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

<channel>
	<title>Özgür Koca</title>
	<atom:link href="https://www.tankado.com/feed/" rel="self" type="application/rss+xml"/>
	<link>https://www.tankado.com</link>
	<description>"Bilgi özgür kalsın"</description>
	<lastBuildDate>Fri, 07 Mar 2025 22:39:51 +0000</lastBuildDate>
	<language>tr</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<itunes:explicit>no</itunes:explicit><itunes:image href="http://tankado.com/images/tankadologo.png"/><itunes:subtitle>"Bilgi özgür kalsın"</itunes:subtitle><item>
		<title>Linux Cheat Sheets</title>
		<link>https://www.tankado.com/linux-cheat-sheets/</link>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Fri, 07 Mar 2025 22:33:39 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=9223</guid>

					<description><![CDATA[Linux redirections cheatsheets Linux command chaining Bash scripting basics Bash scripting functions basics Bash scripting loops basics]]></description>
										<content:encoded><![CDATA[
<p>Linux redirections cheatsheets</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="3276" height="4096" src="https://www.tankado.com/assets/2025/03/bash_redirecting.jpg" alt="" class="wp-image-9224"/></figure>



<span id="more-9223"></span>



<p>Linux command chaining</p>



<figure class="wp-block-image size-full"><img decoding="async" width="3594" height="4096" src="https://www.tankado.com/assets/2025/03/linux-command-chaining.jpg" alt="" class="wp-image-9228"/></figure>



<p>Bash scripting basics</p>



<figure class="wp-block-image size-full"><img decoding="async" width="3205" height="4096" src="https://www.tankado.com/assets/2025/03/bash_scripting-basics.jpg" alt="" class="wp-image-9225"/></figure>



<p>Bash scripting functions basics</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1603" height="2048" src="https://www.tankado.com/assets/2025/03/bash-scripting-functions.jpg" alt="" class="wp-image-9226"/></figure>



<p>Bash scripting loops basics</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="4096" height="4096" src="https://www.tankado.com/assets/2025/03/bash_scripting-loops.jpg" alt="" class="wp-image-9227"/></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Mahkemelerce hakaret sayılan veya sayılmayan sözler hangileridir?</title>
		<link>https://www.tankado.com/hakaret-sayilan-veya-sayilmayan-sozler-hangileridir/</link>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Tue, 18 Feb 2025 22:11:31 +0000</pubDate>
				<category><![CDATA[Genel]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=9204</guid>

					<description><![CDATA[Yargı kararlarındaki hakaret sayılan veya sayılmayan söz ve ifadelerin kime karşı söylendikleri önemlidir! Buna dikkat edilmesi gerekir. Ayrıca yargı, zaman zaman hakaret sayılan veya sayılmayan sözler ve ifadeler konusunda çelişkili kararlar vermekte veya kararını değiştirebilmektedir. İLKEMİZ HAKARET ETMEDEN, KIRICI OLMADAN DÜŞENCEMİZİ İFADE ETMEK OLMALIDIR. HANGİ SÖZLER HAKARET SAYILMAKTADIR? Yerel mahkemeler tarafından verilen ve Yargıtay tarafından &#8230; <a href="https://www.tankado.com/hakaret-sayilan-veya-sayilmayan-sozler-hangileridir/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "Mahkemelerce hakaret sayılan veya sayılmayan sözler hangileridir?"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Yargı kararlarındaki hakaret sayılan veya sayılmayan söz ve ifadelerin kime karşı söylendikleri önemlidir! Buna dikkat edilmesi gerekir.</p>



<p>Ayrıca yargı, zaman zaman hakaret sayılan veya sayılmayan sözler ve ifadeler konusunda çelişkili kararlar vermekte veya kararını değiştirebilmektedir.</p>



<p>İLKEMİZ HAKARET ETMEDEN, KIRICI OLMADAN DÜŞENCEMİZİ İFADE ETMEK OLMALIDIR.</p>



<span id="more-9204"></span>



<h2 class="wp-block-heading">HANGİ SÖZLER HAKARET SAYILMAKTADIR?</h2>



<p>Yerel mahkemeler tarafından verilen ve Yargıtay tarafından onanan kararlar sonucunda hazırlanan listeye göre hakaret kabul edilen kelimeler şu şekilde:</p>



<p></p>



<p>&#8211; AMERİKAN UŞAĞI: YARGITAY 16. CD (E:2018/551 K:2018/671 T:13.03.2018)</p>



<p>&#8211; APTAL: YARGITAY 4. CD (E:2020/8119 K:2020/15398 T:05.11.2020)</p>



<p>&#8211; ART NİYETLİ: YARGITAY 4. CD (E:2012/6933 K:2012/28633 T:04.12.2012)</p>



<p>&#8211; AŞAĞILIK: YARGITAY 18. CD (E:2015/6120 K:2015/2530 T:10.06.2015)</p>



<p>&#8211; AZGIN DUL: YARGITAY 18. CD (E:2015/6120 K:2015/2530 T:10.06.2015)</p>



<p>&#8211; AYI: YARGITAY 4. CD (E:2015/5853 K:2015/29903 T:27.05.2015)</p>



<p>&#8211; BEYİNSİZ: YARGITAY 18. CD (E:2015/2639 K:2015/2852 T:17.06.2015)</p>



<p>&#8211; BOYNUZLU: YARGITAY 4. CD (E:2020/14573 K:2021/9780 T:18.03.2021)</p>



<p>&#8211; BÖLÜCÜLÜK YAPMAYIN: YARGITAY 5. CD (E:2013/13057 K:2014/13166 T:23.12.2014)</p>



<p>&#8211; BUNAK: YARGITAY 2. CD (E:2010/35246 K:2012/41578 T:29.03.2021)</p>



<p>&#8211; CEBİNİZİ DOLDURUYORSUNUZ: YARGITAY CGK (E:2017/18-848 K:2018/312 T:26.06.2018)</p>



<p>&#8211; ÇAKAL: YARGITAY 23. CD (E:2015/4284 K:2015/5323 T:19.10.2015)</p>



<p>&#8211; ÇALMAK: YARGITAY4. CD (E:2020/11997 K:2021/6738 T:25.02.2021)</p>



<p>&#8211; ÇİRKİN SURAT: YARGITAY CGK (E:2013/4-521 K:2014/54 T:11.02.2014)</p>



<p>&#8211; ÇOCUK KATİLİ: YARGITAY 4. CD (E:2015/10421 K:2015/30267 T:01.06.2015)</p>



<p>&#8211; ÇÜRÜK DOMATES: YARGITAY 4 .CD (E:2011/36640 K:2013/22930 T:07.10.2013)</p>



<p>&#8211; DANA: YARGITAY 2. CD (E:2011/26161 K:2013/5887 T:21.03.2013)</p>



<p>&#8211; DAVAYI SATTI: YARGITAY 18. CD (E:2015/34641 K:2017/6807 T:31.05.2017)</p>



<p>&#8211; DECCAL: YARGITAY 16. CD (E:2017/1486 K:2017/4427 T:12.06.2017)</p>



<p>&#8211; DELİ: YARGITAY 4. CD (E:2008/21092 K:2009/2589 T:17.02.2009)</p>



<p>&#8211; DEYYUS: YARGITAY 2. CD (E:2011/9251 K:2012/45816 T:13.11.2012)</p>



<p>&#8211; DİKTATÖR: YARGITAY 16. CD (E:2018/3171 K:2018/5020 T:10.12.2018)</p>



<p>&#8211; DOLANDIRICI: YARGITAY 18. CD (E:2015/26439 K:2016/12596 T:07.06.2016)</p>



<p>&#8211; DOMBİLİ: YARGITAY 23. CD (E:2015/13865 K:2015/5464 T:21.10.2015)</p>



<p>&#8211; DÜMBÜK: YARGITAY 18. CD (E:2015/32126 K:2016/17667 T:16.11.2016)</p>



<p>&#8211; ENAYİ: YARGITAY 15 .CD (E:2014/6713 K:2016/7761 T:19.10.2016)</p>



<p>&#8211; ERKEKLERLE YATIP KALKIYORSUN: YARGITAY 4. CD (E:2021/22105 K:2021/21312 T:09.09.2021)</p>



<p>&#8211; EŞEK: YARGITAY 15. CD (E:2015/10608 K:2016/9438 T:12.12.2016)</p>



<p>&#8211; ETEK GİYMESİ GEREKEN BİR ADAMSIN: YARGITAY 4. CD (E:2013/33459)</p>



<p>&#8211; FARE: YARGITAY 4. CD (E:2012/29981 K:2014/2514 T:29.01.2014)</p>



<p>&#8211; FIRILDAK: YARGITAY 4. CD (E:2020/34939 K:2021/9068 T:15.03.2021)</p>



<p>&#8211; GERİ ZEKALI: YARGITAY 15.C D (E:2018/9033 K:2020/3754 T:12.03.2020)</p>



<p>&#8211; HAİN: YARGITAY CGK (E:2018/18-342 K:2018/378 T:27.09.2018)</p>



<p>&#8211; HAYSİYETSİZ: YARGITAY 18. CD (E:2018/8132 K:2019/3826 T:26.02.2019)</p>



<p>&#8211; HAYVAN: YARGITAY 2. CD (E:2011/27235 K:2013/7902 T:11.03.2014)</p>



<p>&#8211; HIRSIZ: YARGITAY 4. CD (E:2019/3986 K:2021/28634 T:07.12.2021)</p>



<p>&#8211; HİTLER: YARGITAY 16. CD (E:2019/6019 K:2019/8465 T:27.12.2019)</p>



<p>&#8211; HOVARDA: YARGITAY 18. CD (E:2016/2016 K:2018/2155 T:20.02.2018)</p>



<p>&#8211; İĞRENÇ: YARGITAY 4. CD (E:2021/1370 K:10616 T:24.03.2021)</p>



<p>&#8211; İKİYÜZLÜ: YARGITAY 4. CD (E:2015/22863 K:2019/18597 T:02.12.2019)</p>



<p>&#8211; İT: YARGITAY 16. CD (E:2020/7346 K:2021/271 T:28.01.2021)</p>



<p>&#8211; İT OĞLU İT: YARGITAY13. CD (E:2013/5850 K:2014/9707 T:18.03.2014)</p>



<p>&#8211; KAÇAKÇI: YARGITAY 16. CD (E:2019/3989 K:2020/2258 T:02.06.2020)</p>



<p>&#8211; KANI BEŞ PARA ETMEZ: YARGITAY 4. CD (E:2013/33459 K:2016/1538 T:01.02.2016)</p>



<p>&#8211; KANI BOZUK: YARGITAY 16 .CD (E:2018/3029 K:2018/4514 T:05.11.2018)</p>



<p>&#8211; KARI GİBİ KAÇMA: YARGITAY2. CD (E:2013/35727 K:2014/21302 T:18.09.2014)</p>



<p>&#8211; KARINLA DOST HAYATI YAŞADIM: YARGITAY 4. CD (E:2011/18824)</p>



<p>&#8211; KAŞAR: YARGITAY14. CD (E:2015/7961 K:2016/875 T:28.01.2016)</p>



<p>&#8211; KATİL: YARGITAY 16. CD (E:2019/11164 K:2020/2033 T:13.03.2020)</p>



<p>&#8211; KE-MAL: YARGITAY 11. CD (E:2019/4404 K:2019/8470 T:28.11.2019)</p>



<p>&#8211; KENDİNİ BİR BOK SANMAK: YARGITAY 4. CD (E:2014/27210 K:2015/2533 T:02.02.2015)</p>



<p>&#8211; KER: YARGITAY16. CD (E:2019/11075 K:2020/1805 T:06.03.2020)</p>



<p>&#8211; KENDİNİ KAÇ PARAYA SATTIN: YARGITAY 4. CD (E:2018/3121 K:2019/14414)</p>



<p>&#8211; K*Ç YALAMAK: YARGITAY 18. CD (E:2020/1169 K:2020/6092 T:16.03.2020)</p>



<p>&#8211; K*ÇINA GİRSİN: YARGITAY 18. CD (E:2015/3116 K:2015/3572 T:29.06.2015)</p>



<p>&#8211; KÖPEK: YARGITAY 2. CD (E:2011/8780 K:2012/45647 T:12.11.2012)</p>



<p>&#8211; KUDUZ: YARGITAY 16. CD (E:2020/1876 K:2020/3519 T:03.07.2020)</p>



<p>&#8211; LAN: YARGITAY CGK (E:2009/4-196 K:2009/248 T:.2710.2009)</p>



<p>&#8211; MAL: YARGITAY 4. CD (E:2014/27210 K:2015/2533 T:02.02.2015)</p>



<p>&#8211; MASON: YARGITAY 16. CD (E:2017/1486 K:2017/4427 T:12.06.2017)</p>



<p>&#8211; MAYMUN: YARGITAY 2. CD (E:2011/24094 K:2013/3387 T:20.02.2013)</p>



<p>&#8211; MECZUP: YARGITAY 16. CD (E:2016/5885 K:2017/3760 T:19.04.2017)</p>



<p>&#8211; MÜFTERİ: YARGITAY 16. CD (E:2016/1474 K:2016/3955 T:10.06.2016)</p>



<p>&#8211; MÜNAFIK: YARGITAY 18. CD (E:2017/2034 K:2017/9550 T:25.09.2017)</p>



<p>&#8211; NEMRUT: YARGITAY 16. CD (E:2016/2716 K:2017/3869 T:25.04.2017)</p>



<p>&#8211; OSURUK: YARGITAY 18. CD (E:2019/8374 K:2019/15411 T:05.11.2019)</p>



<p>&#8211; ÖKÜZ: YARGITAY 4. CD (E:2012/34201 K:2013/31993 T:12.12.2013)</p>



<p>&#8211; ÖRGÜTÇÜ: YARGITAY1 8.CD (E:2016/17387 K:2019/462 T:08.01.2019)</p>



<p>&#8211; PAVYON KADINI: YARGITAY 2. CD (E:2011/3575 K:2013/22036 T:30.09.2013)</p>



<p>&#8211; PİS ERMENİ: YARGITAY 4. CD (E:2014/15126 K:2015/25931 T:03.04.2015)</p>



<p>&#8211; PİSLİK: YARGITAY 4. CD (E:2020/20258 K:2020/12135 T:15.10.2020)</p>



<p>&#8211; PKK’LI: YARGITAY 3. CD (E:2018/2778 K:2019/2 T:07.01.2019)</p>



<p>&#8211; PUŞT: YARGITAY 4. CD (E:2015/25752 K:2020/626 T:13.01.2020)</p>



<p>&#8211; REZALET KARAR: YARGITAY18. CD (E:2015/11462 K:2015/10888 T:11.11.2015)</p>



<p>&#8211; REZİL: YARGITAY 4. CD (E:2017/1901 K:2020/17650 T:24.11.2020)</p>



<p>&#8211; RÜŞVETÇİ: YARGITAY 4. CD (E:2006/9660 K:2008/5205 T:01.04.2008)</p>



<p>&#8211; SAHTEKAR: YARGITAY 16. CD (E:2018/551 K:2018/671 T:13.03.2018)</p>



<p>&#8211; SALAK: YARGITAY 4. CD (E:2020/20273 K:2020/13343 T:22.10.2020)</p>



<p>&#8211; SAPIK: YARGITAY 18. CD (E:2015/27516 K:2017/408 T:12.01.2017)</p>



<p>&#8211; SARAY SOYTARISI: YARGITAY 16. CD (E:2018/1392 K:2018/1295 T:25.04.2018)</p>



<p>&#8211; SATILMIŞ: YARGITAY 4. CD (E:2009/16387 K:2011/17532 T:17.10.2011)</p>



<p>&#8211; SAZAN: YARGITAY 23. CD (E:2015/4284 K:2015/5323 T:19.10.2015)</p>



<p>&#8211; SEFİL: YARGITAY 4. CD (E:2019/3850 K:2019/15124 T:03.10.2019)</p>



<p>&#8211; SENİ PARAMLA SATIN ALIRIM: YARGITAY 4. CD (E:2012/33854 K:2014/7344 T:05.03.2014)</p>



<p>&#8211; SOYSUZ: YARGITAY 16 .CD (E:2017 /1939 K:2017/5106 T:03.10.2017)</p>



<p>&#8211; SÜFYAN: YARGITAY 16. CD (E:2016/1474 K:2016/3955 T:10.06.2016)</p>



<p>&#8211; SÜRTÜK: YARGITAY 4. CD (E:2013/33173 K:2014/35081 T:04.12.2014)</p>



<p>&#8211; ŞAKLABAN: YARGITAY 16. CD (E:2019/8029 K:2020/595 T:23.01.2020)</p>



<p>&#8211; ŞARAPÇI: YARGITAY 11. CD (E:2017/11989 K:2018/3486 T:12.04.2018)</p>



<p>&#8211; ŞARLATAN: YARGITAY1 8. CD (E:2015/27980 K:2016/14289 T:28.06.2016)</p>



<p>&#8211; ŞEREFSİZ: YARGITAY 16 .CD (E:2017/1014 K:2017/4691 T:22.06.2017)</p>



<p>&#8211; TACİZCİ: YARGITAY 18. CD (E:2019/7465 K:2019/12402 T:17.09.2022)</p>



<p>&#8211; TERÖRİST: YARGITAY1 6. CD (E:2017/317 K:2017/3803 T:02.05.2017)</p>



<p>&#8211; TETİKÇİ: YARGITAY 2. CD (E:2010/28561 K:2010/30230 T:02.11.2010)</p>



<p>&#8211; TİRAN: YARGITAY 11. CD (E:2019/4869 K:2019/8859 T:05.12.2019)</p>



<p>&#8211; TOP: YARGITAY /4.CD (E:2013/14870 K:2015/30041 T:28.05.2015)</p>



<p>&#8211; TOSBAĞA: YARGITAY 4. CD (E:2013/26390 K:2014/16646 T:07.07.2014)</p>



<p>&#8211; VATAN HAİNİ: YARGITAY 16. CD (E:2018/551 K:2018/671 T:13.03.2018)</p>



<p>&#8211; YAHUDİ: YARGITAY 16. CD (E:2017/1486 K:2017/4427 T:12.06.2017)</p>



<p>&#8211; YANDAN ÇARKLI: YARGITAY 4. CD (E:2013/26390 K:2014/16646 T:07.07.2014)</p>



<p>&#8211; YAPTIĞINIZ İŞİN İÇİNE SI**YIM: YARGITAY 15. CD (E:2012/6180 K:2012/41043 T:11.09.2012)</p>



<p>&#8211; YAVŞAK: YARGITAY 3. CD (E:2017/19528 K:2018/14193 T:02.10.2018)</p>



<p>&#8211; YEZİT: YARGITAY 16. CD (E:2016/6928 K:2017/4807 T:19.07.2017)</p>



<p>&#8211; YOLSUZLUK: YARGITAY 8. CD (E:2017/9234 K:2017/11414 T:16.10.2017)</p>



<p>&#8211; YÜRÜTME: YARGITAY 18. CD (E:2016/15036 K:2019/30 T:07.01.2019)</p>



<p>&#8211; YÜZÜNE TÜKÜRÜLSE YARRABİ ŞÜKÜR DER: YARGITAY 4. CD (E:2012/12487 K:2014/2703 T:30.01.2014)</p>



<p>&#8211; ZENNE: YARGITAY 4. CD (E:2021/27623 K:2021/22707 T:28.09.2017)</p>



<p>&#8211; ZEVZEK: YARGITAY 18. CD (E:2016/5910 K:2017/3859 T:04.05.2017)</p>



<p>&#8211; ZORBA: YARGITAY 16. CD (E:2017/2489 K:2017/5502 T:27.11.2017)</p>



<h2 class="wp-block-heading">Mahkemelerce hakaret sayılmayan ifadeler</h2>



<p>1-“ Ukalalık yapma ” Yarg.18. CD. Esas : 2019/390 Karar : 2020/1377 Tarih : 16.01.2020<br>2-“menopozlu kadın kaşın gözün oynuyor” Yarg. 18. CD. E. 2018/2631 K. 2019/16047 T. 12.11.2019<br>3-“işlem yapmazsan adam değilsin, erkeksen yaparsın” Yarg. 18. CD. Esas : 2019/7103 Karar :2020/1789 Tarih : 21.01.2020<br>4-“cahilleri buraya koyuyorlar ondan sonra böyle oluyor” Yarg. 18. CD. E. 2017/565 K. 2019/3443 T. 19.2.2019<br>5-“aç gözlü” Yarg. 18. CD. Esas : 2019/8256 Karar : 2020/4884 Tarih : 24.02.2020<br>6-“senin kafan bozuk” Yarg. 18. CD. Esas : 2019/7667 Karar : 2020/893 Tarih : 15.01.2020<br>7-“seni paramla satın alırım” Yarg. 18. CD. E. 2019/8789 K. 2020/4519 T. 18.2.2020<br>8-“lan” Yarg. 18. CD. E. 2019/7381 K. 2020/4109 T. 10.2.2020<br>9-“Ruh sağlığın yerinde mi senin, köylü kurnazlığı yapıyorsun, bu da kapak olsun sana” Yarg. 18. CD. E. 2016/17134 K. 2019/15901 T. 27.11.2018<br>10-“Allah belanızı versin…” Yarg. 18. CD. E. 2017/7660 K. 2019/15697 T. 6.11.2019.<br>11-“lan sen ne biçim adamsın yazıklar olsun…” Yarg.18. CD. E: 2015/8559 K:2015/11175 t.16.11.2015<br>12-“basitsin” Yarg.18. CD. E: 2015/38074 K:2017/8480 t.06.07.2017<br>13-“köylüsünüz, buraya layık değilsiniz” Yarg.18. CD. E: 2015/11272 K:2016/140 t.11.01.2016<br>14-“sen kimsin lan, sesin çok çıkıyor merdane gibi” Yarg. 18. CD. E. 2018/6039 K. 2020/1173 T. 15.1.2020<br>15-“senin ağa babaların benim suç ortağım, sen bana bir şey yapamazsın” Yarg. 18. CD. Esas : 2019/514 Karar : 2020/1369 Tarih : 16.01.2020<br>16-“sen bu kişilerin etkisi altında kaldın, ben her şeyi biliyorum, hakim savcı bir olmuşsunuz, zaten hakim de senin gibi düşünür, seni yukarılara şikayet edeceğim, savunmanı onlara verirsin çoluğundan çocuğundan çıksın” Yarg. 18. CD. Esas : 2019/8948 Karar : 2020/4006 Tarih : 06.02.2020<br>17-“siz eşkıya mısınız” Yarg. 18. CD. E. 2017/6485 K. 2019/17210 T.<br>18-“adam değilsin lan” Yarg. 18. CD. E. 2018/2762 K. 2019/14315 T. 14.10.2019<br>19-“Allah senin belanı versin, Allahsız” Yarg.18. CD E. 2017/5698 K. 2019/11138 T. 25.6.2019.<br>20-“ulan ne biçim adamsın” Yarg. 18. CD. E. 2018/258 K. 2019/10218 T. 10.6.2019<br>21-“İki Buçuk Milyarlık Adamsınız” Yarg. 18. CD. E. 2017/4751 K. 2019/9316 T. 21.5.2019.<br>22-“edepsizler” Yarg. 18. CD. E. 2018/5959 K. 2019/6788 T. 4.4.2019<br>23-“Siz Ne Biçim İnsansınız” Yarg. 18. CD. E. 2019/299 K. 2019/5526 T. 20.3.2019<br>24-“siz kimsiniz ne oluyor burada, adam mı oldunuz” Yarg. 18. CD. E. 2017/2695 K. 2019/5594 T. 21.3.2019<br>25-“siz korsan mısınız, ben gidiyorum lan” Yarg. 18. CD. E. 2016/18133 K. 2019/2201 T. 4.2.2019<br>26-”defol git” Yarg. 18. CD. E. 2018/4989 K. 2019/1191 T. 14.1.2019<br>27-“korkak” Yarg. 18. CD. E. 2016/17675 K. 2019/760 T. 9.1.2019<br>28-“hakkımı helal etmiyorum, sırf siyaset devreye girdi diye D4 belgemi vermemiştin Allah affetmesin seni”, “yaktığın çırada kavrul İnşallah” ve “takdir ilahiden kaçış yok er veya geç hepimiz nasibimizi alacağız ama kötü bir şekilde, ama iyi bir şekilde. Sen benim ayağımın altını kazanları tez zamanda yak yarabbim” Yarg. 18. CD. E. 2018/3618 K. 2019/590 T. 8.1.2019<br>29-“hepiniz artist olmuşsunuz” Yarg. 18. CD. E. 2018/1950 K. 2018/14560 T. 7.11.2018<br>30-“terbiyesizlik yapma, pislik yapma erkeksen gel yüzüme söyle” Yarg. 18. CD. E. 2017/8129 K. 2018/14490 T. 7.11.2018<br>31-“serseriler, insan olsan böyle yapmazsın” Yarg. 18. CD. E. 2017/7437 K. 2018/3053 T. 7.3.2018<br>32-“bu sevimsiz bir insan, bu fakir düşmanı, bununla muhatap olma” Yarg. 18. CD. E. 2016/898 K. 2018/1331 T. 7.2.2018<br>33-“gerici yobazlar” Yarg. 18. CD. E. 2017/4058 K. 2018/537 T. 22.1.2018<br>34-“terbiyesiz, saygısız” Yarg. 18. CD. E. 2015/16741 K. 2016/3164 T. 22.02.2016<br>35-“Siz kim oluyorsunuz, çoban bile bu işi sizden daha iyi yapar” Yarg. 4. CD. E. 2012/35366 K. 2014/14293 T. 05.05.2014<br>36-“İbiş efendi kısırlaştırma yapmadan yavruları barınağa attırıyorsun, ölüme terkediyorsun, Allah da seni süründürerek öldürsün, gavur yapmaz” ve “İbiş hem barınağa bakmıyorsun, hem kapıyı kapatıyorsun, tam canavarsın, geber” Yarg. 4. CD. E. 2014/5380 K. 2014/33505 T. 19.11.2014<br>37-“bu karı hep böyle yapıyor” Yarg. 4. CD. E. 2013/39681 K. 2014/32235 T. 06.11.2014<br>38-“ben sizin ne mal olduğunuzu biliyorum” Yarg. 4. CD E:2013/35802 K: 2014/31186 K. 30.10.2014<br>39-“delikanlı değilsin, sen karısın” Yarg. 18. CD. E. 2015/44413 K. 2017/15756 T. 28.12.2017<br>40- “sen ne biçim doktorsun” Yarg. 4. CD. E: 2017 / 22520 K: 2021 / 4489 T: 10.02.2021<br>41- ”lan” ve ”sen ne utanmazsın” Yarg 4. CD. E: 2019 / 4048 K: 2021 / 26139 T: 03.11.2021<br>42- “Terörist miyiz lan” Yarg. 2. CD. E: 2020 / 27786 K: 2021 / 13592 T: 29.06.2021<br>43- “üç kağıtçı / üçkağıtçı” Yarg. 2. CD. E.2011/726725 K.2013/7383 T. 08.03.2013<br>44- “hainler korkak olur” Yarg. 18. CD. T. 12.04.2018, E.2017/7129, K.2018/5519<br>45- “kukla gibi buraya oturmuşsunuz” Yarg. 18. CD. E: 2019 / 11782 K: 2020 / 5741 T: 09.03.2020<br>46- “tombaladan müdür” Yarg. 18. CD. E: 2019 / 71 K: 2020 / 7755 T: 18.06.2020<br>47-“ Çiftlik ağası” Yarg. 18. CD E: 2015 / 26407 K: 2016 / 11710 T: 30.05.2016<br>48- ”sen şizofren hastasısın, iki ruhlusun, doktora git bir an evvel sağlığına kavuş” Yarg. 18. CD. E: 2015 / 11055 K: 2015 / 10949 T: 12.11.2015<br>49- “sana bu diplomayı verenin” Yarg. CG. T. 28.05.2019, E. 2016/1403, K. 2019/464<br>50-“adamlığını kurtar” Yarg. 18. CD. E. 2015/7845 K. 2015/13139 T. 09.12.2015<br>51-“gavur” Yarg. 18. CD. E. 2017/1772 K. 2017/3352 T. 27.03.2017<br>52-“bu yaptığınız kıllıktır” Yarg. 18. CD. E. 2017/1218 K. 2017/3077 T. 21.03.2017<br>53-“cahil cahil konuşma” Yarg. 18. CD. E. 2015/25786 K. 2016/6526 T. 31.03.2016<br>54-“psikiyatriye git, tedavi gör, karşımda kıvırtıp durma” Yarg. 18. CD. E. 2015/191 K. 2015/9090 T. 26.10.2015<br>55-“siz genişsiniz” Yarg. 18. CD. E. 2015/8477 K. 2015/4709 T. 08.09.2015<br>56-“herkes haddini bilsin” Yarg. 18. CD. E. 2015/41787 K. 2017/13867 T. 29.11.2017<br>57-”sizi mutlu edecek ise ceketimi ilikliyorum; size birşey kazandıracaksa işte alt düğmemi de ilikliyorum.’‘ Yarg. 18. CD. E. 2015/42548 K. 2017/10648 T. 10.10.2017<br>58-“Sen ne işe yararsın, bilmiyorsan burada oturma, seni buraya kim oturttu?” Yarg. 18. CD. E. 2015/7358 K. 2015/14397 T. 28.12.2015<br>59-“sen insan değilsin” Yarg. 18. CD. E. 2015/37780 K. 2017/9762 T. 27.09.2017<br>60-“donumu da çıkarayım mı?” Yarg. 18. CD. E. 2016/5753 K. 2018/4283 T.26.03.2018<br>61-“sırıtma” Yarg. 18. CD. E. 2015/1377 K. 2015/1806 T. 26.05.2015<br>62-“senin bu yaptığını maksim gazinosundaki şarkıcılar yapar” Yarg. 18. CD. E. 2015/3980 K. 2015/2443 T.10.06.2015<br>63-“işini yapmıyor, karaktersiz herif” Yarg. 18. CD. E. 2015/40646 K. 2017/10756 T.11.10.2017<br>64-“size o makamı yakıştıramıyorum, böyle adalet olmaz olsun” Yarg.4. CD E:2013/6603 K: 2014/20618 K. 09.06.2014<br>65- “haddini bileceksin, haddini bil“ Yarg. 18.C.D. E:2015/1532 K:2015/1097 06.05.2015<br>66-“nankör, aç gözlü, görmemiş” Yarg.18.C.D. E:2016/12901 K:2018/12942 15.10.2018<br>67-“siz eşkıyasınız” Yarg.18.C.D. E:2017/7727 K:2019/13374, 30.09.2019<br>68-“okumuşun da adam olamamışsın” Yarg.4.C.D. E:2020/8130, K:2020/15390, 05.11.2020<br>69-“ben böyle hastanenin a..a korum” Yarg.18.C.D. E: 2015/28063, K:2016/5116, 16.03.2016<br>70- “amele karısı” Yarg.18.C.D., E: 2015/37065, 2017/2121, 27.02.2017<br>71-“yalancı” Yarg.4.C.D., E: 2018/911, K:2021/9386, 16.03.2021<br>72-“bacaksız”Yarg.4.C.D., E: 2018/3727, K:2021/12060, 06.04.2021<br>73- “hasta mısın kızım sen” Yarg.4.C.D., E: 2020/24317, K: 2021/2804, 28.01.2021<br>74-“ne ulan artistlik yapıyorsunuz” Yarg. 4.C.D., E: 2020/12152, K: 2021/2989, 28.01.2021<br>75-“benim köpeklerim pis değil, pis olan sensin” Yarg. 4.C.D. E: 2020/12282, K:2021/7983, 08.03.2021<br>76-“bu yaptığınız terbiyesizliktir” Yarg.4.C.D. E: 2020/14295, K: 2021/10146, 22.03.2021<br>77-“sen konuşma lan” Yarg. 4.C.D. E: 2020/12906 K: 2021/4637, 11.02.2021<br>78-“artist bu” Yarg. 4.C.D. E:2020/19683 K:2021/16627, 31.05.2021<br>79-“sana mı soracağım lan” Yarg. 4.C.D. E: 2020/11777, K:2021/13830, 17.05.2021<br>80-“siz insan mısınız” Yarg.2.C.D. E: 2020/9912, K: 2021/408 – 20.01.2021<br>81-“baş müdürün yalakasısın” Yarg.4.C.D. E: 2020/4001, K:2021/153, 11.01.2021<br>82-“sen kim oluyorsun lan” Yarg.4.C.D. E: 2020/5195, K: 2021/1724, 21.01.2021<br>83-“karı gibi ağlıyorsun” Yarg.1.C.D. E: 2021/1732, K: 2021/5031, 24.03.2021<br>84-“size de kurumunuza da başlarım lan” Yarg. 2. C.D.<br>E: 2020/10052, K:2021/38, 18.01.2021<br>85-“hepiniz aynısınız lan” Yarg.4.C.D. E. 2021/1378, K: 2021/11042, 25.03.2021<br>86-“karı gibi kıvırıyorsun” Yarg.2.C.D. E:2020/10152, K:2021/1959 09.02.2021<br>87-“Allahsızsın, vicdansız ve acımasızsın” Yarg.15.C.D., E: 2017/36393, K: 2021/6049, 26.05.2021<br>88-“Çek lan arabanı” Yarg.8.C.D., E:2017/24670, K: 2020/10838, 03.03.2020<br>89-“Adilik yapma” Yarg. 18.C.D., E: 2019/9840, K:2020/5687, 05.03.2020<br>90-“IQ seviyen düşük” Yarg.18C.D., E:2020/411, K:2020/7982, 23.06.2020<br>91-“Allahınız kitabınız yok mu sizin” Yarg.18.C.D. E:2017/3071, K:2019/6713, 03.04.2019<br>92-“Al kimliğimi bak da egonu tatmin et” Yarg.18 C.D. E:2017/2776, K. 2019/6708, 03.04.2019<br>93-“görevinizi adam gibi yapın” Yarg. 18 C.D. E:2018/6156, K:2019/16798, 28.11.2019<br>94-“Hangi orospu ile gezersen gez” Yarg. 18 C.D. E:2017/7415, K: 2018/7716, 21.05.2018<br>95-“Allah çoluğunuzdan çocuğunuzdan çıkartsın” Yarg. 18 C.D. E:2016/12319, K: 2018/11613, 24.09.2018<br>96-“gözün kör olsun” Yarg.18.C.D. E:2015/41130, K:2017/11725, 25.10.2017<br>97-“gıcık” Yarg. 18.C.D. E:2015/27033, K:2016/5622, 22.03.2016<br>98-“zehir zıkkım olsun aldığınız maaş” Yarg.18.C.D. E:2015/4989, K:2015/9334, 27.10.2015<br>99-“ciğerin ağzından gelsin” Yarg.18.C.D. E:2015/5253, K:2015/5376, 15.09.2015<br>100-“yaktığın çırada kavrul inşallah” Yarg. 18.C.D. E: 2018/3618, K:2019/590, 08.01.2019</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>ETAP  Pardus Programlama Notlarım – 1</title>
		<link>https://www.tankado.com/etap-pardus-programlama-notlarim-1/</link>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Sat, 18 Jan 2025 02:38:41 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=9174</guid>

					<description><![CDATA[Bu yazıda QR Kod (EBAQR) özelinde LightDM altyapısı hakkında yaptığım incelemeleri paylaşıyor olacağım. İncelediğim kısmı kadarıyla altyapının büyük kısmında kod emeği olan Bayram Karahan hocamızın emeğine sağlık. &#8220;Sabit kullanıcı (ebaqr) giriş&#8221; ve &#8220;Kişiye Özel Giriş&#8221; giriş seçeneklerinin yer aldığı ETAP sistemlerde lightdm-greeter adlı grafik giriş yöneticisi kullanılıyor. Karşılama ekranını (login) oluşturan python kaynak kodları /usr/share/pardus/pardus-lightdm-greeter &#8230; <a href="https://www.tankado.com/etap-pardus-programlama-notlarim-1/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "ETAP  Pardus Programlama Notlarım &#8211; 1"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Bu yazıda QR Kod (EBAQR) özelinde LightDM altyapısı hakkında yaptığım incelemeleri paylaşıyor olacağım. İncelediğim kısmı kadarıyla altyapının büyük kısmında kod emeği olan Bayram Karahan hocamızın emeğine sağlık.</p>



<p>&#8220;Sabit kullanıcı (ebaqr) giriş&#8221; ve &#8220;Kişiye Özel Giriş&#8221; giriş seçeneklerinin yer aldığı ETAP sistemlerde lightdm-greeter adlı grafik giriş yöneticisi kullanılıyor. Karşılama ekranını (login) oluşturan python kaynak kodları <strong>/usr/share/pardus/pardus-lightdm-greeter</strong> dizininde bulunabilir. Aşağıda ekran görüntüsü yer alan QR giriş seçenekleri <strong>main.py </strong>tarafından yüklenen <strong>module/ebaonline.py</strong> tarafından sağlanıyor. </p>



<span id="more-9174"></span>



<p>Kaynak kod incelendiğinde bir <strong>WebKit.WebView() </strong>nesnesi içinde &#8220;<strong>https://giris.eba.gov.tr/EBA_GIRIS/studentQrcode.jsp</strong>&#8221; sayfasının yüklendiği görülebilir. Bu webview nesnesinin <strong>load-changed</strong> olayına bağlanan <strong>response_dataonline</strong> yordamı sayfa tazelendiğinde çalışacak şekilde ayarlanmış. Sayfanın tazelenmesi için EBA uygulaması üzerinden kamera ile QR kodu okutulması yeterli. Okutma gerçekleştikten sonra webview&#8217;de yüklü sayfaya taramayı yapan kullanıcıya ait JSON verisi EBA sunucusu tarafından geri döndürülüyor (Response). Sayfayı bir tarayıcıda açarak network hareketlerinden ilgili JSON verisini inceleyebilirsiniz.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="610" height="496" src="https://www.tankado.com/assets/2025/01/2025-01-17_15-46-50.png" alt="" class="wp-image-9175" style="width:394px;height:auto"/></figure>



<p><strong>ebaonline.py</strong> modülü JSON biçiminde gelen response verisi içerisinden gerekli alanları parsellenerek bir python listesine dönüşütürüyor. ebaonine.py modülünün python listesini oluşturmak için kullandığı alanların listesi aşağıdan görülebilir.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">role=str(persondata&#91;"userInfoData"]&#91;"role"])
userid=persondata&#91;"userInfoData"]&#91;"userId"]
name=persondata&#91;"userInfoData"]&#91;"name"]
surname=persondata&#91;"userInfoData"]&#91;"surname"]
username = self.username_prepare(name+"-"+surname)</pre>



<p>modül kodunun ilerleyen satırları incelendiğinde; oturumun açılması için bu veri yapısı TCP 7777&#8217;yi dinleyen bir prosese gönderiliyor. Veri yapısının gönderilmesi için aşağıdaki format kullanılmış.</p>



<p>Eğer &#8220;Sabit kullanıcı (ebaqr) giriş&#8221; seçilmiş ise sokete gönderilen veri şuna benziyor ebaqrebaqr:ozgur-koca:209823d20ad93948434</p>



<p>Eğer &#8220;Kişiye özel giriş&#8221; seçilmiş ise sokete gönderilen veri şunun gibi oluyor: ebaonline:ozgur-koca:209823d20ad93948434</p>



<p>İlk alandaki değerler ebaqrebaqr veya ebaqronline hangi kullanıcı ile oturum açılacağını söylüyor. Yani sabit kullanıcı olan <strong>ebaqr </strong>ile mi yoksa kullanıcının <strong>ad-soyad</strong> ile oluşturulan kişisel hesabı ile mi. Diğer alan ad (name) ve soyad (surname) alanlarından oluşturulan kullanıcı adını ifade ediyor. Son alan ise kullanıcının EBA üzerindeki kullanıcı ID&#8217;si ve bu kullanıcının geçici parolasını tanımlamak için kullanılıyor.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">if role == "2" or role == "300" or role == "301":
  os.system("echo '"+self.loginType+":"+username+":"+userid+"' | netcat localhost 7777 &amp;")</pre>



<p>Öğretmen kullanıcılarının rol tanımı EBA sisteminde 2 ile ifade edilmiş. 39&#8217;un veli olduğu görülebiliyor. 300 ve 301 ile ilgili bir dökümantasyon paylaşılmamış.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">"userRoleList": &#91;
            {
                "id": 39,
                "name": "Veli",
                "userAuthorities": null
            },
            {
                "id": 2,
                "name": "Öğretmen",
                "userAuthorities": null
            }
        ],</pre>



<p>TCP 7777&#8217;ye gönderilen bu veri ilgili kullanıcı hesabının oluşturulması ve oturum açılması için yeterli. Komut satırında aşağıdaki komutu vererek <strong>ali-candan</strong> isimli kullanıcının oluşturulmasını ve otomatik olarak oturum açılmasını sağlayabilirsiniz.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">echo 'ebaqronline:ali-candan:parola' | netcat localhost 7777</pre>



<p>Burada <strong>netcat </strong>aracı echo ile pipe edilen verinin TCP 7777. porta yazılmasını sağlamak için kullanılmış. TCP 7777&#8217;yi hangi prosesin dinlediğini görmek için <strong>lsof </strong>komutundan faydalandığımızda:</p>



<pre class="urvanov-syntax-highlighter-plain-tag"><strong># lsof -i :7777</strong>
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
tcpserver 771 root    3u  IPv4  18602      0t0  TCP *:7777 (LISTEN)</pre>



<p>PID numarası 771 olan tcpserver adından bir binary olduğunu görüyoruz. Bu binary&#8217;iyi hangi prosesin çalıştırdığını ya da dinlendiğini görmek için ise <strong>ps </strong>aracını aşağıdaki gibi çalıştırabiliriz:</p>



<pre class="urvanov-syntax-highlighter-plain-tag"><strong># ps -p 771 -o pid,ppid,args</strong>
PID    PPID COMMAND
771       1 tcpserver -v -P -R -H -l 0 0.0.0.0 7777 /usr/bin/pardus-lightdm-greeter-listener</pre>



<p>TCP soketine gelen verilerin <strong>/usr/bin/pardus-lightdm-greeter-listener</strong> programına yönlendirildiğini görüyorum. Bu yapı bir systemd servisi ile (pardus-lightdm-greeter-listener.service) ayakta tutuluyor.  Yani 7777. porta bir veri akışı olduğunda bu veri <strong>pardus-lightdm-greeter-listener</strong>  programının başlatılmasında kullanılıyor. Bu program aslında bir bash betiği. Betiğin içinde kullanıcı hesabını oluşturan <strong>add_user()</strong> alt programının kodları ise aşağıdaki gibi:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">#!/bin/bash
add_user()
{
user="$1"
defpass="$user"
pass="$2"
if &#91; ! -d /home/$user ] ; then
            useradd -m $user -s /bin/bash -p $(openssl passwd "$pass") -U -d /home/$user
            useradd $user-qr -s /bin/bash -p $(openssl passwd "$defpass") -d /home/$user
            mkdir -p /home/$user
            chown $user -R /home/$user
            chmod 755 /home/$user
            uida=$(grep "^$user:" /etc/passwd | cut -f 3 -d ":")
            uidb=$(grep "^$user-qr:" /etc/passwd | cut -f 3 -d ":")
            sed -i "s/:$uidb:/:$uida:/g" /etc/passwd
            for g in floppy audio video plugdev netdev $user; do usermod -aG $g $user-qr || true;usermod -aG $g $user || true;done
            #usermod $user-qr -p $(openssl passwd -6 "$pass")
       fi
}</pre>



<p>Bu alt program incelendiğinde <strong>ali-candan</strong> ve <strong>ali-candan-qr</strong> isimli olmak üzere iki tane kullanıcı hesabı oluşturuyor ve gereki hesap ayarlarını (ev dizini, erişim izinleri, grup ayarları vb) yapıyor.</p>



<p>İkinci useradd komutuna baktığımızda ilkinden farklı olarak parola tanımının $defpass ile yapıldığını görebiliriz. Bu diğerinden farklı olarak ali-candan-qr kullanıcı adlı hesaba <strong>kullanıcı adı ile aynı</strong> ($defpass=&#8221;$user&#8221;) olan bir parolanın tanımlanmasını sağlıyor.</p>



<p>İstenilen hesabın oluşturulması ve oturumunun açılması için tcpserver&#8217;a veri akıtmak yerine veriyi dorudan bu betiğe göndermek de mümkün. Aynı sonucu yaratıyor. Buradaki tcp soket yaklaşımının nedeni uzaktan (ağ tabanlı) kullanıcı oluşturma/oturum açma isteği olabilir.</p>



<pre class="urvanov-syntax-highlighter-plain-tag"><strong># echo 'ebaqronline:ali-candan:parola' | /usr/bin/pardus-lightdm-greeter-listener</strong>
PID: 116322
ebaqronline:ali-candan:parola
Type: ebaqronline
User: ali-candan
Password: parola
{"username": "ali-candan-qr", "password": "parola"}
Failed to connect pardus lightdm greeter</pre>



<p>Betiğin tamamını incelediğimizde oturum açma işlemi için <strong>greeter_login() </strong>adındaki <strong>alt programa</strong> kullanıcı adı ve parolanın parametre geçildiğini görüyoruz. Aslında bu alt program  <strong>/usr/share/pardus/pardus-lightdm-greeter/cli.py</strong> ile sembolik olarak bağlı <strong>/usr/bin/sshlogin</strong>&#8216;in kendisi. cli.py&#8217;a sembolik link içeren bir diğer dosya da <strong>/usr/bin/pardus-login</strong> konumunda bulunuyor.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">/usr/bin/sshlogin $1 $2 &amp;</pre>



<pre class="urvanov-syntax-highlighter-plain-tag"><strong># ls -la /usr/bin/sshlogin</strong>
lrwxrwxrwx 1 root root 45 Eyl 24 12:55 /usr/bin/sshlogin -&gt; ../share/pardus/pardus-lightdm-greeter/cli.py</pre>



<pre class="urvanov-syntax-highlighter-plain-tag"><strong># ls -la /usr/bin/pardus-login</strong>
lrwxrwxrwx 1 root root 45 Eyl 24 12:55 /usr/bin/pardus-login -&gt; ../share/pardus/pardus-lightdm-greeter/cli.py</pre>



<pre class="urvanov-syntax-highlighter-plain-tag">sshlogin ali-candan parola
{"username": "ali-candan", "password": "parola"}</pre>



<p>Sonuç olarak; yalnızca var olan bir kullanıcının oturumunu açmak için sshlogin ve diğer sembolik aracıları devreden çıkartarak aşağıdaki komut da çalıştırılabilir. Buradan yola çıkarak cli.py modülünün lightdm aracılığıyla oturum açmaktan sorumlu olduğunu söyleyebiliriz.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">python3 /usr/share/pardus/pardus-lightdm-greeter/cli.py ali-candan parola</pre>



<p>Bu incelemeleri yaptığım sırada şunu farkettim; betik kullanıcı hesaplarını oluşturduktan sonra bazen oturum açmada başarısız oluyor ve tahta siyah ve boş bir ekranda kalıyor. Bu durum systemctl restart lightdm ile greeter&#8217;ın yeniden başlatarak çözülüyor fakat <strong>&#8220;/usr/bin/pardus-lightdm-greeter-listener: satır 90: Masaüstü: komut yok&#8221; dan da anlaşılacağı üzere betikde bir hata var (Ocak 2024 itibariyle güncellenmiş bir sürümdeyiz). 90&#8217;ı satıra baktığımızda yorum satırının # ile kapatmasının unutulduğunu görüyorum.</strong> Ancak bu betiğin çalışmasını etkilemeyecek önemsiz bir hata.</p>



<p>Oturumun açılmasını sağlayan betik parçası aşağıdaki gibi, burada 4 saniye aralıkla iki kez giriş işlemi yaptırılmış. Eğer grafik ekranda &#8220;Sabit Kullanıcı (ebaqr) Giriş&#8221; seçilmiş ise <strong>&#8220;$type&#8221; == &#8220;ebaqrebaqr&#8221;</strong> şartlı if bloğu, &#8220;Kişiye Özel Giriş&#8221; seçilmişse <strong>&#8220;$type&#8221; == &#8220;ebaqronline&#8221;</strong> şartlı if blok çalışıyor. </p>



<pre class="urvanov-syntax-highlighter-plain-tag">#****************************************************************
greeter_login()
{
/usr/bin/sshlogin $1 $2 &amp;
sleep 4
/usr/bin/sshlogin $1 $2 &amp;
}
read MESSAGE
echo "PID: $$"
echo "$MESSAGE"
type=$(echo $MESSAGE|cut -d":" -f1)
#****************************************************************
if &#91; "$type" == "ebaqronline" ]
then
user=$(echo $MESSAGE|cut -d":" -f2)
psw=$(echo $MESSAGE|cut -d":" -f3)

echo "Type: $type"
echo "User: $user"
echo "Password: $psw"
add_user $user $psw
greeter_login "$user-qr" $psw
fi
#****************************************************************
if &#91; "$type" == "ebaqrebaqr" ]
then
user=$(echo $MESSAGE|cut -d":" -f2)
#psw=$(echo $MESSAGE|cut -d":" -f3)
psw="rastgele-parola"
user="ebaqr"
echo "Type: $type"
echo "User: $user"
echo "Password: $psw"
greeter_login $user $psw
fi
</pre>



<p><strong>ebaqrebaqr</strong> if bloğuna bakacak olursak kullanıcı adı olarak ebaqr, parola olarak ise rastgele üretilen bir parola kullanılıyor. </p>



<p>lightdm tarafında oturum açma sürecinin nasıl işlediğini görmek için cli.py incelediğimizde aşağıdaki gibi kullanıcı adı ve parolanın json biçimine dönüştürülerek /var/lib/lightdm/pardus-greeter dosyasına append yani ekleme modunda  yazdığını görüyoruz. </p>



<pre class="urvanov-syntax-highlighter-plain-tag">def login(username=None, password=None, session=None):
    if not os.path.exists("/var/lib/lightdm/pardus-greeter"):
        print("Failed to connect pardus lightdm greeter")
        exit(2)
    data = {}
    data&#91;"username"] = str(username)
    data&#91;"password"] = str(password)
    if session != None:
        data&#91;"session"] = str(session)

    with open("/var/lib/lightdm/pardus-greeter", "a") as f:
        print(json.dumps(data))
        f.write(json.dumps(data))
        f.flush()</pre>



<p>/var/lib/lightdm/pardus-greeter konumuna gittiğimizde ise bu dosyanın aslında bir named pipe (FIFO) olduğu anlaşılıyor. Bu pipe yukarıdakine benzer (tcpserver) şekilde prosesler arasında iletişim kurmak için kullanılan bir linux yöntemi. ls -la çıktısındaki p (pipe) takısından bunu anlayabiliriz. lightdm-greeter yani oturum açma ekranı aktif olduğunuda bu pipe&#8217;da mevcut oluyor. Kullanıcı oturum açtığında ise DELETE_SELF işlemi ile kendini siliyor (root@etahta:/var/lib/lightdm# inotifywait -m pardus-greeter ile görülebilir). Bu aynı zamanda önceki kod parçasında görüleceği üzere <strong>os.path.exists</strong> işlevi ile lightdm-greeter&#8217;ın etkin olup olmadığını sınamak için kullanılmış. </p>



<pre class="urvanov-syntax-highlighter-plain-tag">root@etahta:/var/lib/lightdm# <strong>ls -la</strong>
toplam 40
drwxr-x---  7 lightdm lightdm 4096 Oca 18 00:09 .
drwxr-xr-x 44 root    root    4096 Oca 17 00:14 ..
drwxr-xr-x  6 lightdm lightdm 4096 Oca 16 21:39 .cache
drwx------  4 lightdm lightdm 4096 Oca 16 21:39 .config
drwxr-xr-x  7 root    root    4096 Oca 18 00:09 data
drwx------  3 lightdm lightdm 4096 Oca 16 21:39 .dbus
drwx------  3 lightdm lightdm 4096 Oca 16 21:39 .local
prw-------  1 lightdm lightdm    0 Oca 18 00:09 pardus-greeter
-rw-r--r--  1 lightdm lightdm  822 Oca 18 00:09 pardus-lightdm-greeter.log
-rw-------  1 lightdm lightdm  215 Oca 18 00:09 .wget-hsts
-rw-------  1 lightdm lightdm   51 Oca 18 00:09 .Xauthority
</pre>



<p>Görebildiğimiz gibi lighdm oturum açacak kullanıcıyı buradan kabul ediyor. Bu  FIFO pipe&#8217;ı ise<strong> module/daemon.py</strong> tarafından dinleniyor ve aşağıda kod parçasından görüleceği üzer ekrandaki kullanıcı parola kutularını doldurarak lightdm.login() işlevini çalıştırıyor.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">GLib.idle_add(loginwindow.o("ui_entry_username").set_text, username)
GLib.idle_add(loginwindow.o("ui_entry_password").set_text, password)
GLib.idle_add(loginwindow.event_login_button,loginwindow.o("ui_button_login"))
lightdm.login()</pre>



<p>module/gtkwindow.py içinde tanımlanan login_handler() işlevi de son iş olarak self.kill_windowmanager() metodunu çalıştırarak Greeter&#8217;ı yok ediyor. </p>



<h2 class="wp-block-heading">Açılışta başlatılan betikler</h2>



<p>Grafik oturumun başlangıcında yürütelen yapılandırmalardan birisi olan <strong>/etc/xdg/autostart/newpassword.desktop</strong> içeriği incelendiğinde <strong>/usr/bin/newpassword.sh</strong> betiğini çalıştırdığı görülebilir. Betik <strong>$HOME/.config/np</strong> konumundaki dosyanın varlığını kontrol ederek kullanıcıya <strong>sifredegistir </strong>diyalog penceresini görüntülüyor. Bu betiğin içeriği aşağıdaki gibi:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">#!/bin/bash
passwordstatus="$HOME/.config/np"

if &#91; -f $passwordstatus ]; then
        echo "dosya var"

else
    echo "dosya yok"
        #touch $passwordstatus
        notify-send -i password "İlk Defa Oturum Açıyorsunuz.." -u critical

        notify-send -i password "Şifrenizi Mutlaka Değiştirin.." -u critical
        /usr/bin/sifredegistir

fi
</pre>



<p>Eğer kullanıcı sifredegistir binary&#8217;isini kullanarak bir parola tanımlarsa $HOME/.config/np  (muhtemelen <strong>n</strong>o <strong>p</strong>assword) konumunda <strong>boş bir dosya</strong> oluşturuluyor.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Parmak izi deseninden kişiye özel yetenek analizi mi?</title>
		<link>https://www.tankado.com/parmak-izinden-yetenek-analizi-mi/</link>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Sun, 22 Dec 2024 17:51:46 +0000</pubDate>
				<category><![CDATA[Genel]]></category>
		<category><![CDATA[fingerprint analysis]]></category>
		<category><![CDATA[parmak izi]]></category>
		<category><![CDATA[parmak izinden yetenek analizi]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=9139</guid>

					<description><![CDATA[Parmak izlerinden kişinin yetenek ve mizacını analiz etme fikri, özellikle popüler bilim ve bazı alternatif yaklaşımlar arasında ilgi çekmiştir. Bu konudaki iddialar, genellikle dermatoglifiks (parmak izi analizi) üzerine yapılan çalışmalara dayandırılır. Ancak, bilimsel açıdan bu iddiaların doğruluğu ve güvenilirliği konusunda dikkat edilmesi gereken önemli noktalar vardır. Dermatoglifiks ve Genetik Bağlantılar Dermatoglifiks, parmak izlerindeki desenlerin genetik &#8230; <a href="https://www.tankado.com/parmak-izinden-yetenek-analizi-mi/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "Parmak izi deseninden kişiye özel yetenek analizi mi?"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Parmak izlerinden kişinin yetenek ve mizacını analiz etme fikri, özellikle popüler bilim ve bazı alternatif yaklaşımlar arasında ilgi çekmiştir. Bu konudaki iddialar, genellikle dermatoglifiks (parmak izi analizi) üzerine yapılan çalışmalara dayandırılır. Ancak, bilimsel açıdan bu iddiaların doğruluğu ve güvenilirliği konusunda dikkat edilmesi gereken önemli noktalar vardır.</p>



<span id="more-9139"></span>



<h2 class="wp-block-heading has-medium-font-size">Dermatoglifiks ve Genetik Bağlantılar</h2>



<p>Dermatoglifiks, parmak izlerindeki desenlerin genetik ve çevresel faktörlerle nasıl şekillendiğini inceleyen bir bilim dalıdır. Parmak izlerinin kişiye özgü olduğu ve doğumdan itibaren değişmediği bilinir. Bazı araştırmalar, parmak izi desenlerinin genetik rahatsızlıklar (örneğin Down sendromu) veya nörolojik bozukluklarla ilişkili olabileceğini göstermiştir. Ancak bu, parmak izlerinin doğrudan bir kişinin mizaç, kişilik veya yeteneklerini gösterebileceği anlamına gelmez.</p>



<h2 class="wp-block-heading has-medium-font-size">Parmak İzleri ve Yetenek İlişkisi</h2>



<p>Parmak izlerinin kişilik özellikleri, mizacı veya zihinsel becerilerle doğrudan bağlantılı olduğu fikri, genellikle bilimsel temelden yoksundur. Bu tür iddialar, çoğu zaman biyolojik determinizme dayalı ve yeterince desteklenmeyen teorilere dayanır. Özellikle Hindistan ve Çin gibi ülkelerde bu tür analizlerin popüler olduğu görülür, ancak bu yaklaşımlar genellikle bilimsel doğrulama süreçlerinden geçmemiştir.</p>



<h2 class="wp-block-heading has-medium-font-size">Bilimsel Çalışmalar ve Güvenilirlik</h2>



<p>Bazı çalışmalar parmak izi desenleri ile nörolojik durumlar veya zekâ arasında istatistiksel bağlantılar aramıştır. Örneğin:</p>



<ol class="wp-block-list">
<li><strong>Zekâ ve Parmak İzleri</strong>: 1980&#8217;lerde yapılan bazı küçük ölçekli araştırmalar, parmak izi desenleriyle zekâ arasında bir korelasyon olabileceğini öne sürmüştür. Ancak bu çalışmalar genellikle metodolojik eksiklikler taşır ve geniş örneklem gruplarıyla tekrarlanmamıştır.</li>



<li><strong>Psikiyatrik Bozukluklar</strong>: Şizofreni gibi bazı psikiyatrik bozukluklarla parmak izi desenleri arasında ilişkiler kurmaya çalışan çalışmalar vardır, ancak bu bağlantılar genelde zayıf ve tartışmalıdır.</li>
</ol>



<h2 class="wp-block-heading has-medium-font-size">Güvenilirlik ve Eleştiriler</h2>



<p><strong>Metodolojik Sorunlar: </strong>Parmak izi analizine dayalı yetenek ve mizaç tespiti, çoğunlukla anekdotlara veya sınırlı verilere dayalıdır. Yöntemler bilimsel bir temele oturtulmamış ve genellikle önyargıya açıktır.<br><strong>Tekrarlanabilirlik:</strong> Bilimsel bir iddianın güvenilir olabilmesi için farklı araştırma grupları tarafından tekrarlanabilir ve doğrulanabilir olması gerekir. Parmak izleri ve mizaç/yetenek analizi üzerine yapılan çalışmalar bu standardı karşılamaz.<br><strong>Biyolojik Karmaşıklık: </strong>İnsan yetenekleri ve mizacı, genetik, çevresel, kültürel ve kişisel deneyimlerin karmaşık bir etkileşimine dayanır. Bu faktörlerin bir kısmını parmak izlerinden anlamaya çalışmak indirgemeci bir yaklaşım olarak görülür.</p>



<h2 class="wp-block-heading has-medium-font-size">Bilimsel Tavsiye</h2>



<p>Parmak izi analiziyle yetenek veya mizaç tespiti yapmak bilimsel olarak desteklenmiş bir yöntem değildir. Parmak izlerinin genetik rahatsızlıklar veya bazı biyolojik özellikler hakkında bilgi verebileceği kabul edilse de, bir kişinin mizacı, karakteri veya yetenekleri hakkında çıkarım yapmak, mevcut bilimsel verilerle mümkün değildir.</p>



<p>Eğer bu konuda daha fazla bilgi isterseniz, dermatoglifiks üzerine yapılmış meta-analizlere veya genetik-psikoloji ilişkilerini inceleyen literatüre başvurabilirsiniz. Ancak bu tür analizlerin <strong>daha çok eğlence veya popüler bilim</strong> kapsamında değerlendirilmesi gerektiğini unutmamak önemlidir.</p>



<h2 class="wp-block-heading has-medium-font-size">Bir adım öteye</h2>



<p>Parmak izi desenlerinin oluşumu hakkında CellPress/Cell dergisinde 2023 yılında yayınlanan &#8220;<strong>Parmak izi deseninin oluşumu ve çeşitliliğinin gelişimsel temeli</strong>&#8221; başlıklı makaleye göre şu çıkarımları yapabiliriz.</p>


<aside
	class="download-box">

	<img decoding="async" alt="Placeholder" class="wp-post-image" src="https://www.tankado.com/extensions/download-monitor/assets/images/placeholder.png" />
	<div
		class="download-count">512 downloads</div>

	<div
		class="download-box-content">

		<h1>The developmental basis of fingerprint pattern formation and variation</h1>

						<a  data-e-Disable-Page-Transition="true" class="download-link download-button" title="" href="https://www.tankado.com/download/the-developmental-basis-of-fingerprint-pattern-formation-and-variation/?tmstv=1749170199" rel="nofollow" id="download-link-9157" data-redirect="false" >
			Download File			<small>Glover_2023.pdf				&ndash; 19,22 MB</small>
		</a>
			</div>
</aside>





<p>Makalede parmak izinin nihai halinin oluşumu şu 5 mekanizmanın ortak çalışmasına bağlanmış:</p>



<p></p>



<ol class="wp-block-list">
<li>Özellikle EDAR, WNT, BMP gibi genetik sinyal yolları ve RSPO2 gibi genler, desenlerin başlangıç noktalarını ve türlerini etkiler. Ancak, genetik faktörler yalnızca temel düzeni sağlar; bireysel farklılıklar üzerinde belirleyici değildir.</li>



<li>Parmak izi desenleri, Turing reaksiyon-difüzyon mekanizmasıyla oluşturulur. Bu mekanizma, biyolojik doku içinde küçük düzensizliklerin büyütülmesiyle desenleri oluşturur. Bu düzensizlikler, tamamen rastlantısal değil, dokunun biyomekanik ve biyokimyasal özelliklerine bağlıdır.</li>



<li>Parmak ucu şekli (volar pedler), parmak izi türünü doğrudan etkiler. Örneğin, kubbeli bir parmak ucu daha çok sarmal (whorl) desenlerine yol açar. Ayrıca, parmağın hareketi ve embriyonik gelişim sırasında cildin gerilme kuvvetleri, desenlerin düzenlenmesinde rol oynar.</li>



<li>Parmak izleri üzerinde bireysel farklılıkların ortaya çıkmasında rastlantısal moleküler gürültü etkili olur. Ancak bu rastlantısallık, yalnızca desenin ince ayrıntılarında belirleyicidir. Örneğin, aynı genetik altyapıya sahip olan tek yumurta ikizlerinin parmak izleri benzer genel desenler gösterse de, bireysel detaylarda farklılıklar oluşur. Bu da rastlantısallığın yalnızca sınırlı bir rol oynadığını gösterir.</li>



<li>Parmak izi sırtlarının oluşumu, dijitlerin (parmakların) anatomisine ve yerel sinyal ortamlarına bağlı olarak farklı başlangıç noktalarından yayılan dalgalar şeklinde gerçekleşir.</li>
</ol>



<p>Ben yine de bu 5 madde ışığında; bu konuda üretilmiş programların içine bilim karıştırılmış ticari amaçlı bir yanılsama olduğunu savunma tarafındayım. </p>



<p></p>



<p>Böyle düşünmemin nedenlerini açıklamam gerekirse: iz desenine etki eden  genetik temelin yanında hatırı sayılır miktarda &#8220;rastlantısal/stokastik&#8221; unsurların da bulunması, şöyle ki:</p>



<p></p>



<ol class="wp-block-list">
<li>İkinci maddede düzensizlikten bahsetmiş. Buradaki biyomekanik ve biyokimyasal olaylardan kaynaklanan düzensizliklerin bir miktar rastgelelik (randomizing) ortaya koyduğunu düşünüyorum.</li>



<li> Üçüncü maddede bahsedilen embriyo-fetüs dönüşümündeki parmak eklemlerindeki hareketlerin iz desenine etki ettiğini ve tahmin edilemez bu hareketlerin yarattığı etkinin de bir rastgelelik doğuracağını düşünüyorum.</li>



<li>Dördüncü maddede minör etki yaratsa da rastlantısal moleküler gürültüden bahsetmiş.</li>



<li>Beşinci maddede &#8220;başlangıç noktalarının&#8221; neresi olacağını belirleyen bir mekanizmadan bahsedilMEmiş olsa da bunu rastlantısallık ile ilişkilendirme eğilimindeyim.</li>
</ol>



<p></p>



<p>Sonuç olarak; iz deseninin oluşmasında stokastik argümanları hesaba kattığımda genetik temelden doğan kombinasyonun filtrelenemeyecek kadar büyük ölçüde kirliliğe (korelasyon gürültüsüne) sahip olabileceğini düşünüyorum. Tabi ki bir veri bilimci değilim ve bunu doğrulayacak veriye/teorik öngörüye de sahip değilim ama bende bu öngörü ağır basıyor. Olası kombinasyonların büyüklüğünü birazcık hayal ettiğimde içten içe bu düşünceye yani parmak izi deseninin nihai halinin sebep sonuç ilişkisi (iz->yetenek) kurulamayacak ölçüde rastlantısal faktörlerin kontrolünde olduğuna sonucuna varıyorum.</p>



<p></p>



<p>Bilgisayar bilimi açısından düşündüğümde rastlantısallık kısmının etkisi (desenden yetenek analizi çıkarımında bulunma konusu özelinde) olasılıksal açıdan çok büyük bir örneklemi işaret ediyor ki; bu bile ileride veri setinin büyüklüğü/güncellenmesiyle ilişkili olarak bambaşka sonuçlar üretmesine  neden olabilir. Bana sorarsanız bu çok sinir bozucu bir durum ;) . Bazıları belki de TIP&#8217;ın tam olarak pozitif bir bilim olmadığını bu gibi durumlar nedeniyle iddia ediyor olabilir, emin değilim.</p>



<h2 class="wp-block-heading has-medium-font-size">Türkiye&#8217;de bu konuda yapılmış çalışmalar</h2>



<p>Doğrudan bu konuda (parmak izinden kişilik testi) çalışan bir akademisyen tanıdığım olmasa da [ iyiki de yok :) ] ülkemizin saygın üniversitelerinde genetik alanında çalışmalar yürütmüş bazı akademisyenlerin (Prof. ve Doç. ünvanlı) konuya verdikleri cevapları/yorumları aşağıda bulabilirsiniz. Konuya duyarlılık göstererek görüşlerini belirttikleri için kendilerine tekrar teşekkür ederiz.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="650" height="275" src="https://www.tankado.com/assets/2024/12/parmak-izinden-yetenek-analizi-prof-dr-cevabi-1.png" alt="" class="wp-image-9140"/></figure>



<p></p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="645" height="566" src="https://www.tankado.com/assets/2024/12/parmak-izinden-yetenek-analizi-prof-dr-cevabi-3.png" alt="" class="wp-image-9142"/></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="641" height="413" src="https://www.tankado.com/assets/2024/12/parmak-izinden-yetenek-analizi-prof-dr-cevabi-4.png" alt="" class="wp-image-9143"/></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="639" height="331" src="https://www.tankado.com/assets/2024/12/parmak-izinden-yetenek-analizi-doc-dr-cevabi-5.png" alt="" class="wp-image-9144"/></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="761" height="734" src="https://www.tankado.com/assets/2024/12/parmak-izinden-yetenek-analizi-doc-dr-cevabi-6A-1.png" alt="" class="wp-image-9152"/></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="707" height="745" src="https://www.tankado.com/assets/2024/12/parmak-izinden-yetenek-analizi-doc-dr-cevabi-6B.png" alt="" class="wp-image-9146"/></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="716" height="753" src="https://www.tankado.com/assets/2024/12/parmak-izinden-yetenek-analizi-doc-dr-cevabi-6C.png" alt="" class="wp-image-9147"/></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>WordPress Parolasını Sıfırlamak</title>
		<link>https://www.tankado.com/wordpress-parolasini-sifirlamak/</link>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Wed, 20 Nov 2024 06:58:55 +0000</pubDate>
				<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[wordpress kullanıcı parolasını sıfırlamak]]></category>
		<category><![CDATA[wordpress parola sıfırlamak]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=9129</guid>

					<description><![CDATA[WordPress parolasını sıfırlamak için veritabanını kullanabilirsiniz. WordPress kullanıcılarının bilgisi wp_users adındaki tabloda tutulur. Kullanıcının parolası ise MD5 hash&#8217;i ile korunmuştur, yani açık şekilde veritabanından kayıtlı değildir. WordPress kullanıcı adını hatırlamıyorsanız veritabanı konsoluna aşağıdaki SQL komutunu yazarak kullanıcıları listeleyebilirsiniz. Yukarıdaki SQL çıktısında kullanıcı adının kurulum esnasında admin olarak belirlendiği gözüküyor. admin isimli kullanıcının parolasını değiştirmek için &#8230; <a href="https://www.tankado.com/wordpress-parolasini-sifirlamak/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "WordPress Parolasını Sıfırlamak"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>WordPress parolasını sıfırlamak için veritabanını kullanabilirsiniz. WordPress kullanıcılarının bilgisi wp_users adındaki tabloda tutulur. Kullanıcının parolası ise MD5 hash&#8217;i ile korunmuştur, yani açık şekilde veritabanından kayıtlı değildir.</p>



<p>WordPress kullanıcı adını hatırlamıyorsanız veritabanı konsoluna aşağıdaki SQL komutunu yazarak kullanıcıları listeleyebilirsiniz. </p>



<pre class="urvanov-syntax-highlighter-plain-tag">MariaDB &#91;wordpress]&gt; select user_login,user_pass from wp_users;
+------------+------------------------------------+
| user_login | user_pass                          |
+------------+------------------------------------+
| admin      | $P$BBhCPKezzES0g/Pzs30Qut4U.cWd6Q0 |
+------------+------------------------------------+
1 row in set (0.000 sec)</pre>



<p>Yukarıdaki SQL çıktısında kullanıcı adının kurulum esnasında admin olarak belirlendiği gözüküyor. admin isimli kullanıcının parolasını değiştirmek için ise aşağıdaki SQL komutunu çalıştırabilirsiniz.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">UPDATE wp_users SET user_pass = MD5('tankado') WHERE user_login = 'admin';</pre>



<span id="more-9129"></span>



<h2 class="wp-block-heading">Parola sıfırlamak için 2. yöntem</h2>



<p>WordPress&#8217;in kurulu olduğu sunucuya disk erişiminiz varsa (Örn. FTP) aşağıdaki gibi bir parola sıfırlama betiği (PHP) oluşturun ve dosyanın URL&#8217;ini adres çubuğuna yazarak çağırın.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">&lt;?php
require_once('wp-config.php');
wp_set_password('tankado', 1); // 'yenişifre' yerine istediğin şifreyi yaz, '1' admin kullanıcı ID'sidir.
?></pre>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>PHP – The Wrong Way (Galat-ı Meşhur)</title>
		<link>https://www.tankado.com/php-the-wrong-way-galat-i-meshur/</link>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Sun, 06 Oct 2024 18:19:05 +0000</pubDate>
				<category><![CDATA[Açık Kaynak]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programlama]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=9119</guid>

					<description><![CDATA[PHP programlama dünyasında, bir dizi eğilim bazı insanlar tarafından (kendi kitaplarında ve web sitelerinde) “Modern PHP” olarak pazarlanırken, aynı zamanda diğer tüm yaklaşımlar sanki ilkel, aptalca veya yanlış olarak sunuluyor. Bu insanlar yorulmadan başkalarının işlerini yaparken kendilerinin yollarını takip etmelerini sağlamaya çalışıyor gibi görünüyorlar. Bu web sitesi PHP ile programlama yapanlara pragmatik bir bakış sunmak &#8230; <a href="https://www.tankado.com/php-the-wrong-way-galat-i-meshur/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "PHP &#8211; The Wrong Way (Galat-ı Meşhur)"</span></a>]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1000" height="413" src="https://www.tankado.com/assets/2024/10/deviant-code-1000px-tr.png" alt="" class="wp-image-9123"/></figure>



<p>PHP programlama dünyasında, bir dizi eğilim bazı insanlar tarafından (kendi kitaplarında ve web sitelerinde) “Modern PHP” olarak pazarlanırken, aynı zamanda diğer tüm yaklaşımlar sanki ilkel, aptalca veya yanlış olarak sunuluyor. Bu insanlar yorulmadan başkalarının işlerini yaparken kendilerinin yollarını takip etmelerini sağlamaya çalışıyor gibi görünüyorlar. Bu web sitesi PHP ile programlama yapanlara pragmatik bir bakış sunmak amacıyla oluşturulmuştur. Hedeflenen popüler eğilimler, teori veya akademik dogmalardan ziyade tecrübeden ve pratik sonuçlardan oluşturulmuş bir bakış açısı ortaya çıkarmaktır.</p>



<p><a href="https://phpthewrongway.com/tr/">PHP &#8211; The Wrong Way</a> yaşayan bir site olacak ve yenilikler ortaya çıktıkça site güncellenecektir.</p>



<p>Her türlü katkıya ve yardıma açığız.</p>



<span id="more-9119"></span>



<h1 class="wp-block-heading" id="aşırıya-kaçma-tehlikesi">Aşırıya kaçma tehlikesi</h1>



<p>Programlama kuralları ve kılavuzlarının önemli bir sorunu da, genellikle belirli bir bağlamda bir amaca hizmet etmeleridir. Bağlam dışına alındığında, iyi bir kural korkunç bir kural haline gelebilir. Aslında, her kural aşırıya götürüldüğünde kötü sonuçlar doğurur.</p>



<p>Bunun anlaşılması önemlidir, çünkü zamanla geliştirilen ve birçok farklı insan tarafından sunulan yazılım geliştirme ilkeleri ve kurallarının çoğu aşırılık yanlılarının elinde çoğunlukla yanlış kullanılır.</p>



<p>Deneyimler genel kuralların ve kılavuzların kötüye kullanılmasının her zaman karmaşıklıkla, güvenlik eksikliğiyle, hataya açık sonuçlarla ve hatta bazı durumlarda felaketle sonuçlandığını göstermiştir.</p>



<p>“Basit ve Aptal Tutun, (Keep It Simple, Stupid)” ın kısaltması olan <a href="https://en.wikipedia.org/wiki/KISS_principle">KISS ilkesi</a>, genellikle deneyimli kişiler tarafından çok yararlı olarak görülen, akıllıca ve iyi bir ilkedir. Takip edilmesi tavsiye edilir. Ancak bu büyük prensip bile, aşırıya götürülürse bir proje için tehlike oluşturur. Gerekli işlevsellikten uzak sadece “çok basit” görünen bir sonuç ortaya çıkabilir.</p>



<p><strong>Yanlış yol</strong>: Kuralları ve kılavuzları din gibi algılama<img decoding="async" src="https://phpthewrongway.com/img/thumbs-down.png" alt="Thumbs down"></p>



<h1 class="wp-block-heading" id="mutlaka-uygulama-çatısı-framework-kullanmak-gerekir">Mutlaka uygulama çatısı (framework) kullanmak gerekir</h1>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Tüm genel amaçlı PHP uygulama çatıları mutlaka patlar!</p>



<p>– <a href="https://www.youtube.com/watch?v=DuB6UjEsY_Y">Rasmus Lerdorf</a></p>
</blockquote>



<p>PHP topluluğunda, gerçekten çok kötü bir eğilim web uygulamaları geliştirmek için fiili bir standart haline geldi. Bu eğilim mutlaka popüler bir genel amaçlı uygulama çatısının kullanılması gerektiğinin düşülmesidir.</p>



<p>Bu eğilim geliştirme sürecinin kalitesini artırdığı için değil, teknolojik ve mimari açıdan yapılacak doğru şey olduğu için ortaya çıkmış ve popüler hale gelmiştir. Bu eğilimin popüler bir hale gelmesinin bir sebebi de, uygulama çatısı geliştiricilerinden bazılarının kitleleri, “Çarkı yeniden icat etmeyin!” ve “Kendin yapmana gerek yok, başkaları senden daha yetenekli olabilir.” gibi sloganlarla manipüle etmeleridir.</p>



<p>Günümüz programcılarının çoğu, sağlıklı programlamanın temel ilkelerini tamamen görmezden geliyorlar. Akranları olarak gördükleri kişiler tarafından daha akıllı, daha havalı ve daha kabul edilebilir görünmek için ve yeni karmaşık katmanları hayal etmek için çok zaman harcıyorlar.</p>



<p>Bu tarzı benimseyen insanlar, diğer insanların hep “kendi yollarını” takip etmeleri, kendilerini bir tür PHP topluluğu lideri gibi görmelerini ve başkalarının kendi kullandıkları Açık Kaynak araçlarını kullanmalarını sağlamayı (ki bu araçların bazılarının ne olduğunu kendileri bile unutmuş olabiliyor) sağlamak için deli gibi çaba sarfediyor görünüyorlar.</p>



<p>Yazılım endüstrisinde genel amaçlı bir yazılım çatısını önceden inşa edilmiş bir evi ile eşleştirebilirsiniz. Önceden inşa edilmiş bir evi bir araya getirmek nasıl sizi iyi bir marangoz yapmazsa, genel amaçlı uygulama çatıları ile uygulama geliştirmek de sizi çok iyi bir kodlayıcı veya programcı yapmaz.</p>



<p>Bu sitede biz uygulama çatısı kullanmak ile kütüphane kullanmayı birbirinden aşağıdaki maddelerden dolayı ayrı tutuyoruz;</p>



<ul class="wp-block-list">
<li>Bir kütüphane, C standart kütüphanesi veya Go standart kütüphanesi gibi, tekrar kullanılabilir bir kod topluluğu olarak kabul edilir. Herhangi bir sınırlama veya kısıtlama yapmadan kendi projelerinize kolayca entegre edebileceğiniz koddan oluşur. Her biri belirli bir işlevselliğe sahip küçük kod parçalarından oluşur.</li>



<li>Bir uygulama çatısı yeniden kullanılabilir bir kod koleksiyonu değildir ve içinden bir kod parçası alıp kendi projenize entegre etmek çok zordur. Çatı, yazılım oluşturmanıza yardımcı olan bir sistemdir, ancak aynı zamanda çatının kendisinin sınırlamaları ve kısıtlamaları dahilinde çalışmaya zorlar. Çatının kendisinde çok fazla bağımlı işlevsellik bulunabilir. Bir parça diğer olmadan çalışamaz.</li>
</ul>



<p>Python ve Ruby dünyasında, en baştan web siteleri inşa etmek zahmetlidir, çünkü ne Python ne de Ruby aslında web siteleri oluşturmak için yaratılmamıştır. Sonuç olarak, <a href="https://en.wikipedia.org/wiki/Django_%28web_framework%29">Django</a> ve <a href="https://en.wikipedia.org/wiki/Ruby_on_Rails">Ruby on Rails</a> gibi genel amaçlı çerçeveler hızla bu dillerde web siteleri oluşturmak için popüler oldu.</p>



<p>Diğer taraftan PHP, başlangıçta Rasmus Lerdorf tarafından C dilinde yazılmış ve dinamik HTML’yi kolayca ve hızlı bir şekilde geliştirmenizi sağlayacak bir dizi araç olarak oluşturulmuştur. Bu tasarımından dolayı PHP hala ** kendi başına bir uygulama çatısıdır **.</p>



<p>PHP ilk zamandan beri kitlesel olarak gelişti ve bugün PHP, HTML ve web siteleri oluşturmaktan çok daha fazlası için kullanılabilir, ancak PHP’yi kendi içinde bir tür çatı olarak görmek hala yanlış değildir. PHP, doğası gereği, tamamen bir C prosedüründe yazılmış web uygulamalarını geliştirmek için bir soyutlama katmanıdır.</p>



<p>Projenizde herhangi bir kütüphane kullanmak son derece doğaldır. PHP, kendi kodunuzu genişletmek için kullanabileceğiniz bir dizi kütüphaneyle birlikte gelir. Örneğin PDO, PHP’deki veritabanlarına erişmek için tutarlı bir arayüz sağlayan sade bir kütüphanedir.</p>



<p>Diğer taraftan PHP’nin üstünde bir çatı kullanmak tamamen başka bir konudur.</p>



<p>PHP’de bir çatı kullandığınızda, bir soyutlama katmanının üstüne başka bir soyutlama katmanı daha eklemiş olursunuz. Çatının sağladığı ek soyutlama katmanı, kodunuzu önceden sabitlenmiş bir kalıplar dizisi halinde düzenlemeye hizmet edebilir ama yüzlerce hatta binlerce sınıfı ve yöntemi bir ya da daha fazla bağımlılık kabusuyla iç içe geçirerek daha da karmaşıklık kazandırır, yani kodunuza ihtiyaç duyulmayan karmaşıklık katmanları eklemiş olursunuz!</p>



<p>Tüm deneyim arayüz ile başlar. Arayüz deneyimi, alttaki teknolojinin ve soyutlama katmanlarının sonucudur. Ne kadar çok soyutlama kullanırsanız, arayüz o kadar az verimli olur ve uygulama o kadar hataya açık hale gelir. Soyutlama ne kadar yüksek olursa, detay ve verimlilik o kadar fazla kaybolur.</p>



<p>Bunu anlamak gerek: <strong>Herhangi bir projede ideal kod satırı sayısı ne kadar az olursa proje o kadar açık ve okunaklıdır.!</strong></p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Herkesin ihtiyaç duymayacağı tek şey genel amaçlı bir çatıdır. Herkesin sorunu birbirinin aynısı değildir, herkesin çözmeye çalıştığı sorun kendine özeldir.</p>



<p>– <a href="https://www.youtube.com/watch?v=anr7DQnMMs0">Rasmus Lerdorf</a></p>
</blockquote>



<p>Bazı şirketler PHP çatılarıyla ilgili yutturmacaları dinlemeye başladılar ve bir sonraki projelerine bu popüler genel amaçlı çatılardan birini kullandılar ve süreç felaketle sonuçlandı. Sadece genel amaçlı çatının çok özel ihtiyaçlarını çözmede gerçekten kötü olduğunu keşfetmediler, aynı zamanda bunu yapmakta da oldukça yavaş olabileceğini de gördüler. Ölçeklendirmek imkansızdı ve sonuç olarak, çerçeveyi gerçekten ihtiyaç duymadıklarını çıkarmak için çaresiz bir girişimde parçalamaya başladılar.</p>



<p>Her zaman en faydalı olanı seçin:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Ihtiyacımız olan teori veya dogmadan ziyade pratik sonuçların göz önünde bulundurulmasıyla oluşturulan eylem veya politikalardır.</p>



<p>– Collins English Dictionary, Complete and Unabridged, 12th Edition 2014</p>
</blockquote>



<p><strong>Yanlış yol:</strong> Mutlaka bir uygulama çatısı kullanmak gerekir. <img decoding="async" src="https://phpthewrongway.com/img/thumbs-down.png" alt="Thumbs down"></p>



<h1 class="wp-block-heading" id="her-zaman-bir-tasarım-modeli-kullanılmalı">Her zaman bir tasarım modeli kullanılmalı</h1>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Fildişi kule tasarlar gibi düşünmeye ve tasarım modellerine büyük alerjim var. Peter Norvig, Harlequin’deyken, tasarım kalıplarının programlama dillerinde nasıl bir kusur olduğunu anlatan bir yazı yazdı. Daha iyi bir programlama dili edinin. Kesinlikle haklı. Desenlere tapmayın ve devamlı “Ah, X modelini kullanacağım” diye düşünmeyin.</p>



<p>– Brendan Eich <a href="http://codersatwork.com/">Coders at work &#8211; Reflections on the Craft of Programming</a></p>
</blockquote>



<p>Yazılım mühendisliğinde, tasarım deseni yazılım tasarımında yaygın olarak ortaya çıkan bir sorunun yeniden kullanılabilir bir çözümüdür. Tasarım deseni doğrudan koda dönüştürülebilen bitmiş bir tasarım değildir. Bir problemin çözümü ile ilgili birçok farklı durumda kullanılabilecek bir açıklama veya fikirdir. Nesneye yönelik tasarım desenleri tipik olarak, son uygulama sınıflarını veya dahil olan nesneleri belirtmeden, sınıflar veya nesneler arasındaki ilişkileri ve etkileşimleri gösterir.</p>



<p>PHP imperative, fonksiyonel, nesne tabanlı, prosedürel ve reflective paradigmaları destekler. PHP birçok sorunu farklı şekillerde çözmeyi mümkün kılan çok sayıda farklı araca sahip devasa bir araç kutusudur.</p>



<p>PHP tamamen özgürdür, hızlı ve ölçeklenebilir çözümler sunar ve sorunlarla başa çıkmanın birçok farklı yoluna sahiptir.</p>



<p>Kendimizi yada daha spesifik olarak kodumuzu geliştirmeye çalıştığımızda, bazen belirli bir örüntü veya düşüncenin felsefesine takılırız ve pratik düşünmeyi unutmaya meyilliyiz.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Programlarımda desenler gördüğümde, bunun bir sorun belirtisi olduğunu düşünüyorum. Bir programın şekli sadece çözmesi gereken sorunu yansıtmalıdır. Koddaki herhangi başka bir düzenlilik, en azından benim için yeterince güçlü olmayan soyutlamalar kullandığımın &#8211; genellikle elle yazmam gereken bazı makroların genişlemelerini ürettiğimin bir işaretidir.</p>



<p>– <a href="http://c2.com/cgi/wiki?AreDesignPatternsMissingLanguageFeatures">Paul Graham</a></p>
</blockquote>



<p>Belli bir kalıp veya çözümün arkasındaki felsefe veya düşünceye kapılmamalıyız. Asıl endişemiz, kodun okunmasının ve anlaşılmasının mümkün olduğu kadar kolay tutulması ve bunun sonucunda da bakımı kolay ve güvenli olmasıdır.</p>



<p>Anti-patern diye bir şeyin var olduğunu da hatırlamalıyız. Yaygın olarak kullanılabilecek ancak pratikte etkisiz ve / veya verimsiz bir kalıptır.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Bence kalıplar genel sorunlar için genel olarak en iyi çözümler olarak kabul edildi. Ama şimdi bir süredir buralarda olduklarından ve uygulamaların olması gerekenden on kat daha karmaşık hale getirildiğini gördük, çünkü insanlar okudukları tüm kalıpları kullanmaya çalışıyorlar. Desenin değerine dair izlenimim biraz değişti. (“Uygulamam iyi tasarlandı çünkü desenlerle doludur.”)</p>



<p>– Paul Weaton <a href="http://www.javaranch.com/patterns/">Evil Design Patterns</a></p>
</blockquote>



<p>Her zaman en faydalı yolu seçin.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Ihtiyacımız olan teori veya dogmadan ziyade acil pratik sonuçların göz önünde bulundurulmasıyla yapılan eylem veya politikalardır.</p>



<p>– Collins English Dictionary, Complete and Unabridged, 12th Edition 2014</p>
</blockquote>



<p><strong>Yanlış yol</strong>: Her zaman bir tasarım deseni kullanmaya çalışmak. <img decoding="async" src="https://phpthewrongway.com/img/thumbs-down.png" alt="Thumbs down"></p>



<h1 class="wp-block-heading" id="her-zaman-nesne-tabanlı-programlama-yapılmalı">Her zaman nesne tabanlı programlama yapılmalı</h1>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Nesne tabanlı dillerle ilgili sorun, kendileriyle birlikte taşıdıkları büyük kapalı ortamlara sahip olmalarıdır. Bir muz istemişsin, fakat tüm ormanı elindeki muz tutan bir goril ile birlikte sana veriyor.</p>



<p>– Joe Armstrong <a href="http://codersatwork.com/">Coders at work &#8211; Reflections on the Craft of Programming</a></p>
</blockquote>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Soyutlama güçlüdür. Gerçekten alerjim olan ve 90’larda tepki verdiğim şey tüm CORBA, COM, DCOM, nesne tabanlı saçmalıktı. Başlangıç olarak “Merhaba dünya” yazdırmak için 200.000 yöntem çağrısı yapmak çılgınca bir şey. Bu çok komik! Böyle bir tarz ile anılan bir programcı olmak istemezsiniz.</p>



<p>– Brendan Eich <a href="http://codersatwork.com/">Coders at work &#8211; Reflections on the Craft of Programming</a></p>
</blockquote>



<p>Birçok yazılım geliştirici ve birçok şirket, nesneye yönelik programlamanın bugün yazılım geliştirmenin tek makul yolu olduğunu düşünüyor. Nesne yönelimli programlamaya karşı çıkan herkes endüstrinin “geleneksel bilgeliğine” karşı çıktıklarının farkına varır.</p>



<p>Programlama blogları ve forumlarında, nesne tabanlı programlamayı savunan ve standart bir tanımları olmamasına rağmen ne hakkında konuştuklarını bildiklerinden emin olan birçok insan var!</p>



<p>Gerçek şu ki, nesne tabalı programlama sık sık gereksiz karmaşıklık yükünü doğurur!</p>



<p>Bilgisayar bilimcileri ve programcıları olarak, önyargıları bir kenara bırakmayı ve verilen bir soruna en iyi çözümü bulmayı öğrenmeliyiz.</p>



<p>Günümüzde PHP’nin en güçlü yanlarından biri, imperatif, fonksiyonel, nesne tabanlı, prosedürel ve reflective paradigmalar için verdiği destek. PHP, birçok sorunu farklı şekillerde çözmeyi mümkün kılan çok sayıda farklı araca sahip devasa bir araç kutusudur. &#8211; <strong>Her zaman bir den fazla yol vardır!</strong></p>



<p><strong>Bir uygulama içindeki farklı sorunları tek bir özel programlama paradigmasına zorlamaya çalışırken, yaratıcı bir şekilde düşünmüyoruz ve verimli çalışmıyoruz!</strong></p>



<h2 class="wp-block-heading" id="kıssaden-hisse">Kıssaden hisse</h2>



<p>Belirli bir programlama paradigmasını anlamanın en iyi yollarından biri, ilk olarak nasıl ortaya çıktığına bakmaktır. Gelişiminin nedeni neydi? Yeni bir düşünme biçimine ihtiyaç duyan diğer programlama paradigmalarında ne gibi problemler yaşandı? Gerçek bir dünya problemi miydi yoksa sadece akademik bir problem miydi? Ve o zamandan beri nasıl gelişti?</p>



<p>X kişisinin ne söylediği veya Y kişisinin ne tanımladığı önemli değil, paradigmalar bağlamında önemli olan onları oluşturan tarih.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Yazılım tasarımı yapmanın iki yolu vardır. Birinci yol, o kadar basit hale getirmek ki açık bir şekilde hiçbir eksikliğin olmamasını sağlamak. Ve diğer yol ise, bariz bir eksiklik olmayacak şekilde karmaşık hale getirmektir.</p>



<p>– <a href="https://en.wikiquote.org/wiki/C._A._R._Hoare">C.A.R. Hoare</a></p>
</blockquote>



<p>Geçmişte, nesne tabanlı programlamanın ortaya çıkmasından önce, ellili yılların sonlarında, bazen birinci ve ikinci nesil dilleri olarak adlandırılan yapılandırılmamış programlama dilleri kullanılarak birçok yazılım geliştirilmiştir. Yapılandırılmamış programlama, tarihsel olarak en eski programlama paradigmasıdır. “Spagetti” kodunu ürettiği için ağır eleştirildi.</p>



<p>Yapısal olmayan programlama kullanan hem yüksek hem de düşük seviyeli programlama dilleri vardır. Bunlar arasında BASIC, COBOL, MUMPS, JOSS, FOCAL, TELCOMP, makine düzeyinde kod, erken assembler sistemleri (işlemsel meta operatörleri olmayanlar) ve bazı betik dilleri bulunur.</p>



<p>Yapılandırılmamış bir dilde bir program genellikle sıralı olarak düzenlenmiş komutlardan veya genellikle her satırda bir tane olmak üzere ifadelerden oluşur. Satırlar genellikle numaralandırılır veya yürütme akışının programdaki herhangi bir satıra atlamasına izin veren etiketlere sahip olabilir (popüler olmayan GOTO ifadesinde olduğu gibi).</p>



<p>Sonra, altmışlı yıllarda, yapısal programlama ortaya çıktı &#8211; esas olarak Edsger W. Dijkstra’nın ünlü yazısı nedeniyle <a href="http://www.u.arizona.edu/~rubinson/copyright_violations/Go_To_Considered_Harmful.html">Go To kalıpları zararlı olarak kabul edildi</a> .</p>



<p>Yapısal programlama, alt yordamları, blok yapıları ve döngüleri kullanarak yazılımın sadeliğini, kalitesini ve kodlanmasını geliştiren bir programlama paradigmasıdır. Bu, GOTO deyimi gibi basit atlamaların kullanılmasının aksinedir.</p>



<p>Daha sonra, prosedürel programlama yapılandırılmış programlamadan türetilmiştir. Prosedürel programlama “prosedür çağrısı” kavramına dayanır. Bir “prosedür çağrısı”, “işlev çağrısı” için başka bir isimlendirmedir. Prosedürler ayrıca rutinler, alt rutinler veya yöntemler olarak da bilinir. Bir prosedür basitçe gerçekleştirilecek bir dizi hesaplama adımını içerir. Herhangi bir prosedür, başka prosedürler veya kendisi de dahil olmak üzere, programların yürütülmesi sırasında herhangi bir noktada çağrılabilir.</p>



<p>Başlangıçta, tüm prosedürler bir programın herhangi bir bölümünde global veri olarak mevcuttu. Küçük programlarda bu bir problem teşkil etmedi, ancak işler daha da karmaşıklaştıkça ve programın boyutu büyüdükçe, programın bir kısmındaki küçük değişiklikler diğer birçok bölümü de büyük ölçüde etkiledi.</p>



<p>Hiç kimse programdaki değişiklikleri planlamıyordu ve çok fazla bağımlılık vardı. Bir prosedürde yapılan küçük bir değişiklik, orijinal koda bağlı olan birçok başka prosedürde bir hata dizisine neden olur.</p>



<p>Verilerin “nesneler” adı verilen ayrı kapsamlara bölünmesine izin veren yeni bir teknik gelişti. Yalnızca aynı kapsama ait belirli prosedürler aynı verilere erişebilmeli. Buna veri gizleme veya kapsülleme dendi. Sonuç çok daha iyi organize edilmiş kod oldu.</p>



<p>Başlangıçta nesneler nesne olarak adlandırılmadı, sadece ayrı kapsamlar olarak görüldü. Daha sonra bağımlılıklar azaltılarak bu kapsamların içindeki prosedürler ve değişkenler arasındaki bağlantılar yalıtılmış bölümler olarak görüldüğünde, sonuç “nesneler” ve “nesneye tabanlı programlama” kavramlarını doğurdu.</p>



<p>Daha sonra, esas olarak Java’nın gelişmesi nedeniyle, bazı “buzzwords” ifadeleri ortaya çıktı ve “bir prosedür” veya “bir işlev” artık bir işlev olarak adlandırılmadı, ancak ayrı bir kapsamda bulunduğunda “bir yöntem” olarak yeniden adlandırıldı. Değişkenler artık “değişkenler” olarak da adlandırılmadı, ancak ayrı bir kapsamda bulunduklarında “özellikler” olarak yeniden adlandırıldılar.</p>



<p>Dolayısıyla bir nesne özünde basitçe şimdi “yöntemler ve öznitelikler” olarak adlandırılan fonksiyonlar ve değişkenler topluluğudur.</p>



<p>Yöntemlerin ve niteliklerin ayrı bir kapsam içinde izole edilmesinin yolu “bir sınıf” kullanımıdır. Bir sınıf, bir kez yaratıldığında nesne olarak adlandırılır.</p>



<p>Nesneler birbirlerine referans verebilir ve bu referansla içerideki yöntemler (fonksiyonlar) birbirleriyle “iletişim kurabilir”. Nesneler ayrıca yöntemleri diğer nesnelerden “devralabilir” ve bu şekilde genişletilir, buna “miras” denir. Bu, kodu tekrar kullanmanın ve ortak sınıflar ve arabirimler aracılığıyla yazılımın bağımsız uzantılarına izin vermenin bir yoludur. Nesnelerin ilişkileri hiyerarşiye yol açar. Kalıtım, 1967’de programlama dili <a href="http://en.wikipedia.org/wiki/Simula">Simula 67</a> için icat edildi.</p>



<p>Nesneler, diğer nesnelerden yöntemleri devralabilir ve bunları eklenmiş veya değiştirilmiş işlevlerle “geçersiz kılabilir”, buna “polimorfizm” denir.</p>



<p>Bu farklı fikirlerin nasıl uygulandığı, programlama dilden programlama diline kadar büyük ölçüde değişir.</p>



<p>Nesneye yönelik programlama, kodu öncekinden başka bir şekilde düzenlemekle ilgilidir. Prosedürel programlamanın bir uzantısıdır ve verileri gizleme (kapsülleme) ve küresel bir kapsamdan kaçınma ile ilgilidir. Orijinal kodu (kalıtım) etkilemeden, planlarını “ödünç alarak” işlevlerin genişletilmesiyle ilgilidir. Ve orijinal kodu (polimorfizm) etkilemeden fonksiyonları geçersiz kılmakla ilgilidir.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Nesneye yönelik model, programları biriktirerek oluşturmayı kolaylaştırır. Bunun ne anlama geldiği, pratikte spagetti kodu yazmanın yapılandırılmış bir yolunu sağlamasıdır.</p>



<p>– Paul Graham <a href="https://openlibrary.org/works/OL7944696W/ANSI_Common_Lisp">Ansi Common Lisp</a></p>
</blockquote>



<p><strong>Yanlış yol</strong>: Her zaman nesne tabanlı programlama kullanılmalıdır. <img decoding="async" src="https://phpthewrongway.com/img/thumbs-down.png" alt="Thumbs down"></p>



<h1 class="wp-block-heading" id="başkalarının-yazdığı-koddan-korkmayın">Başkalarının yazdığı koddan korkmayın</h1>



<p>Çatı kullanımı için sıklıkla ifade edilen bir argüman da, insanların başkaları tarafından sıfırdan yazılmış kod tabanlarıyla uğraşmak istemedikleridir.</p>



<p>Ancak bu, PHP topluluğundaki web geliştiricileri arasında çoğunlukla karşılaşılan garip bir zihniyettir. Topluluk içinde profesyonellik ve deneyim eksikliği yayan bir şey.</p>



<p>Sıfırdan kod yazmak ve başkalarının kodlarıyla ilgilenmek normaldir. Profesyonel bir programcının günlük çalışmasının bir parçası. Korkacak bir şey değil.</p>



<p>Profesyonel bir programcı, başkalarının kurallarına bakmaz ya da artık şirket veya proje ile ilişkili olmayan eski programcının hangi çatıyı kullandığını ve neden kullandığını düşünmeden işe başlamalıdır.</p>



<p>Bu profesyonel bir programcının zihniyeti değildir. Bunu kimse yapmaz.</p>



<p>Belki de PHP web geliştirmeye giriş engelinin düşük olması bu tür bir zihniyette rol oynamaktadır. Ne olursa olsun, bir insanın yanlış iş kolunda olduğuna dair bir işarettir.</p>



<p>Programlamanın büyük bir kısmı, başkalarının koduyla çalışmak zorunda olan insanlarla ilgilidir. Var olan kod tabanını iyileştirmeye çalışmak ve bazen de yeniden yazmak çalışmanın bir parçasıdır.</p>



<p>Programlamanın büyük ustalarından not alın, <a href="http://codersatwork.com/">İşyerindeki kodlayıcılar &#8211; Programlama Zanaatına Yansımalar</a> adlı kitabı okuyun.</p>



<p>Dünyadaki en büyük ve en başarılı kod tabanlarından bazıları, birbiriyle hiç tanışmamış yüzlerce insan tarafından geliştirilen kod tabanları, herhangi bir çerçeve kullanmadan geliştirilen kod tabanları, tamamen prosedürel bir programlama dilinde kullanılmayan kod tabanlarıdır. Ve hatta bazıları prosedürel paradigmadan başka bir şey yapmazlar ve farklı yapmayı hayal etmezler.</p>



<p><a href="https://www.kernel.org/">Linux Çekirdeği</a>, herhangi bir çatı kullanmadan 14.000’den fazla katılımcı tarafından tamamen prosedürel programlama kullanılarak yazılmış 20 milyon kod satırından oluşur.</p>



<p><a href="https://en.wikipedia.org/wiki/Berkeley_Software_Distribution">BSD</a> ve <a href="https://www.gnu.org/">Linux GNU userland</a> ’ın çoğu tamamen prosedürel programlama kullanılarak yazılmıştır, ve Her hangi bir çatı da kullanılmamıştır.</p>



<p>Aynı şey, sonunda, orijinal programcılar tarafından terk edilen ama diğer yetenekli programcılar tarafından devam edilen dünya çapında yüzlerce Açık Kaynak projesi için de geçerlidir. Bu projelerin birçoğunun dokümantasyonu (eğer varsa) çok azdır, kod tabanında yorum satırları yok denecek kadar azdır ve öneri ya da yönlendirme konusunda hiçbir yardımı yoktur.</p>



<p>Tüm PHP kod temeli, herhangi bir çerçeve kullanmadan, tamamen prosedürel bir programlama dili olan C ile yazıldı.</p>



<p>PHP’de bir sınıf tanımladığın zaman, ya da PHP’nin en sevdiğin çatısını ateşlesen, başkasının saf usule ilişkin işlerinde çalışıyorsun demektir!</p>



<p>Elbette, korkunç bir kod, belki de başlangıçtan tasarlanmamış bir kod, ya da birçok kez kendini aşan bir kod, ancak müşteri yeniden yazma ile baş etmek istemedi. Bu kod ekleme ve çıkarma yapmanıza engel oluyor olabilir, ancak hiçbir çatı bu durumu önleyemezdi. Bu genellikle bir programın doğal büyüme sürecidir. Sonunda her türlü çatı zaten parçalara bölünmüş olacaktı.</p>



<p>Ve tabii ki korkunç bir spagetti kod gerçeği var, ama kimse bilerek korkunç spagetti kodu üretmiyor. Bazen bu, deneyim eksikliğinin bir sonucudur, çoğu zaman müşteri hatasıdır, çünkü gelişimin ortasında birkaç kez teknik özellikleri değiştirdiler, her iki durumda da, bir çatı kullanılmış olsa bile, sonuç hala spagetti kodu olacaktı. ve nesne tabanlı paradigmanın ne kadarının kullanıldığı önemli değil, sonuç yine de spagetti kodu olacaktı.</p>



<p>Programcılar hepimiz bu durumları önlemeye çalışıyoruz, ancak ** bu normaldir <strong>, bu</strong> programlama sanatıdır <strong>, bu</strong> programcı olmanın** ne anlama geldiğinin bir parçasıdır!</p>



<p><strong>Yanlış yol</strong>: Başkalarının yazdığı koddan korkmayın. <img decoding="async" src="https://phpthewrongway.com/img/thumbs-down.png" alt="Thumbs down"></p>



<h1 class="wp-block-heading" id="php-fig-standardlarını-takip-etmede-aşırıya-kaçmayın">PHP-FIG standardlarını takip etmede aşırıya kaçmayın</h1>



<p>FIG kısaca “Framework Interoperability Group” yani “Çatılarası Uyumluluk Grubu”.</p>



<p><a href="http://www.php-fig.org/">PHP-FIG</a>, 2009 yılında php | tek’te bir dizi çatı geliştiricisi tarafından oluşturulmuştur. O zamandan beri, diğer birçok üye başvurmuş ve oy kullanmış, büyüklüğü arttırılmıştır. Başlangıçta 5 üyeden oluşuyorken sonradan sayı 20 üyeye çıkmıştır.</p>



<p>PHP-FIG ile ilgili birçok tartışma var. Bazıları PHP-FIG’i PHP topluluğundan beri PHP topluluğunun başına gelen en iyi şey olarak görürken, diğerleri grubu unutulması en iyi şey olarak görür.</p>



<p>PHP-FIG ile ilgili sorunlardan biri, <a href="http://www.php-fig.org/faqs/">SSS</a>’de şöyle kendini gösterme şeklidir.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Grubun arkasındaki fikir, proje temsilcilerinin projelerimiz arasındaki ortaklıklar hakkında konuşması ve birlikte çalışabileceğimiz yollar bulması. Ana izleyicilerimiz birbirimizdir, ancak PHP topluluğunun geri kalanının izlediğini çok iyi biliyoruz. Eğer diğer insanlar ne yaptığımızı kabul etmek isterlerse, bunu memnuniyetle kabul ederler, ancak amaç bu değildir. Gruptaki hiç kimse size bir programcı olarak nasıl uygulama geliştireceğinizi söylemek istemez.</p>
</blockquote>



<p>Ancak, grubun birkaç üyesinin çalışmalarını gördüğümüzde, hedefin yukarıdaki açıklamaya oldukça aykırı olduğunu açıkça görebiliyoruz. Bu üyeler PHP-FIG’in, grubun asıl adı olan <strong>kabul edilen bir “PHP standart grubu”</strong> olması için yorulmadan çalışırlar. Bunu PHP-FIG’in çalışmalarını kitaplarında, web sitelerinde, blog yazılarında, forumlarında vb. “Modern PHP” olarak sınıflandırarak ve diğer yolları geriye dönük olarak sınıflandırarak yaparlar.</p>



<p>PHP-FIG ile ilgili sorunlardan biri, pek çok çatı ve Açık Kaynaklı projenin standartlarının birçoğunu benimsemiş olmasına rağmen, bu standartların “çatı perspektifinden” sorunları ele almasından dolayı temel olarak gerçek yaşam sorunları karşısında oldukça kullanışsız kalıyor olmasıdır.</p>



<p>Pek çok insan, müşterilerin satın almak ve kullanmak istedikleri, son derece verimli, güvenli ve uygun maliyetli yazılımlar geliştirmektedir. Çatı fanatiklerinin fikirlerine uyması gereken standartlarla rahatsız edilmemeliler. Eğer bu şekilde olursa, bu sektör için felaket olur.</p>



<p>Bir tür standart grubunun oluşturulması gerekiyorsa, sadece framework ve Open Source CMS proje geliştiricilerinin değil, tüm PHP topluluğunun çıkarlarını yansıtması gerekir. PHP programlama dilinin geliştiricileri tarafından temsil edilmeli ve oy kullanma hakkı olan çok daha büyük bir üyelik ile temsil edilmelidir.</p>



<p>PHP-FIG tarafından geliştirilen standartları benimsemeyi seçerseniz, bu standartların bazılarının &#8211; örneğin PSR-0 ve PSR-4 otomatik yükleyici standartları ve bazı diğer standartların &#8211; kodunuzu nasıl değiştirdiğinize doğrudan bir etkisi olduğunu anlamalısınız.</p>



<p>Birçok endüstri ölçeklenebilir, çalışma zamanı açısından kritik ve düşük maliyetli bir yazılımlara ihtiyaç duyuyor ama bunun PHP-FIG’in bu standartları kullanılarak geliştirilemeyeceği aşikardır.</p>



<p><strong>Yanlış yol</strong>: PHP-FIG standardlarını takip etmede aşırıya kaçma. <img decoding="async" src="https://phpthewrongway.com/img/thumbs-down.png" alt="Thumbs down"></p>



<h1 class="wp-block-heading" id="yazılım-güvenliğini-gözardı-etmeyin">Yazılım güvenliğini gözardı etmeyin</h1>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Programcılarla ilgili en büyük problem iş işten geçene kadar ne yaptıklarını söyleyememeleridir.</p>



<p>– Seymour Cray, <a href="http://www.defprogramming.com/q/6e61ae30a855/">defprogramming.com</a></p>
</blockquote>



<p>Güvenli kodlama, kötü niyetli ya da tehlikeli insanlar ya da diğer programlar tarafından saldırıya dirençli programlar yazma pratiğidir. Güvenli kodlama, verilerin hırsızlık veya bozulmaya karşı korunmasına yardımcı olur. Ek olarak, güvensiz bir program, bir saldırganın bir sunucuyu veya kullanıcının kimliğini kontrol altına almasına erişim sağlayabilir, bu da tek bir kullanıcıya hizmet verilememesinden, binlerce kullanıcının gizli bilgilerin açığa çıkmasına, hizmet kaybına veya sistemlerin zarar görmesine kadar bir çok kötü durumla sonuçlanabilir.</p>



<p>Her bilgisayar programı bir güvenlik saldırısı için potansiyel bir hedeftir. Saldırganlar, uygulamalarınızdaki güvenlik açıklarını bulmaya çalışacaktır. Daha sonra gizli bilgileri çalmak, programları ve verileri bozmak, sunucu ve ağların kontrolünü ele geçirmek için bu güvenlik açıklarını kullanmaya çalışacaklar. Müşterilerinizin bilgileri ve itibarınız tehlikede altındadır.</p>



<p><strong>Güvenlik yazılıma eklenebilecek bir özellik değildir.!</strong></p>



<p>Güvensiz bir uygulama, güvenliğini sağlamak için kapsamlı bir yeniden tasarım gerektirebilir. Yazılımınıza yönelik tehditlerin yapısını tanımlamalı ve uygulamanızın planlaması ve geliştirilmesinden başından itibaren güvenli kodlama uygulamalarını dahil etmelisiniz.</p>



<p>Kritik yazılım kaynaklarının güvenceye alınması, saldırganların odağı uygulama katmanına doğru olduğundan her zamankinden daha önemlidir. 2009 SANS araştırması, web uygulamalarına yönelik saldırıların İnternette gözlemlenen toplam saldırı girişimlerinin %60’ından fazlasını oluşturduğunu ortaya çıkardı.</p>



<p>PHP aynı zamanda hem bir programlama dili hem de bir web uygulama çatısı olduğu için olağandışıdır. Bu, PHP’nin, güvensiz kod yazmayı çok kolaylaştıran dile yerleşik bir çok web özelliğine sahip olduğu anlamına gelir.</p>



<h2 class="wp-block-heading" id="baştan-güvenli">Baştan güvenli</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Karmaşıklık çok kötüdür. Geliştiricilerin ömrünü bitirir, ürünleri planlamayı, geliştirmeyi ve test etmeyi zorlaştırır, güvenlikle ilgili zorluklara neden olur ve son kullanıcı ve yönetici sıkıntılarına neden olur.</p>



<p>– <a href="https://phpthewrongway.com/tr/www.azquotes.com/quote/585933">Ray Ozzie</a></p>
</blockquote>



<p>Uygulamaların uygun güvenlik gereksinimleri ile tasarlanması ve uygulanması için, güvenli kodlama uygulamaları ve güvenlik risklerine odaklanma, günlük operasyonlara, düşüncelere ve gelişim süreçlerine dahil edilmelidir</p>



<p>Genellikle, güvenli bir yazılım oluşturmak, yazılım paketi tamamlandıktan sonra güvenlik sorunlarını düzeltmekten daha ucuzdur. Hele bir de güvenlik ihlaliyle ortaya çıkacak maliyetler de göz önünde bulundurulursa…</p>



<p><strong>Yanlış yol</strong>: Yazılım geliştirirken güvenlik konusunu hiç düşünmemek. <img decoding="async" src="https://phpthewrongway.com/img/thumbs-down.png" alt="Thumbs down"></p>



<h1 class="wp-block-heading" id="sss">SSS</h1>



<p>Yazılı belgeleri de yanlış anlamak mümkün. Bunun için bazı konuları aydınlatmak gerekiyor.</p>



<p><strong>Q:</strong> <em>Bu sitenin amacı nedir ve neden biraz çatışmacı bir yaklaşım seçilmiş?</em></p>



<p><strong>A:</strong> Güncel uygulamalar ve ayrkırı görüşler hakkında tartışma ve düşünme ortamı oluşturmak.</p>



<p><strong>Q:</strong> <em>Nesne tabanlı programlamanın kötü mü ya da yanlış mı olduğunu söylüyorsunuz?</em></p>



<p><strong>A:</strong> Hayır, tabii değil! Sorunları çözerken daima yalnızca ve daima nesneye yönelik paradigmayı düşünmenin ve kullanmanın kötü olduğunu söylüyoruz. Sadece siyah ya da beyaz şeklinde düşünmenin yanlış olduğunu söylüyoruz.</p>



<p>Tek bir uygulamada bile bir çok problem vardır. Çoklu paradigma bazen en iyi çözümdür ve bütün çözümler çözmeye çalıştığınız soruna bağlıdır.</p>



<p>Belirli bir sorunu uygun olmayan bir yolla çözmeye çalıştığınız kötü şeyler olur.</p>



<p><strong>Q:</strong> <em>Bütün uygulama çatılarının (framework) kötü olduğunu mu söylüyorsun?</em></p>



<p><strong>A:</strong> Belirli ya da bütün uygulama çatılarını yargılamaya çalışmıyoruz. PHP’nin üstünde her zaman bir uygulama çatısı kullanma algısı ile mücadele ediyoruz.</p>



<p><strong>Q:</strong> <em>Bir uygulama çatısı beni hızlandırıyorsa, neden kötü olsun ki?</em></p>



<p><strong>A:</strong> Tartışmaya açtığımız durumu ve uzun vadeli sonuçlarını analiz ettiyseniz ve o zaman “hızlı üretmenin” aslında başa çıkmanız gereken tek sorun olduğunu görürsünüz. Bunun yüzünden çoğunlukla programlama veya yazılım geliştirme ile uğraşmak yerine bas ve tıkla çözümleriyle uğraşıyoruz.</p>



<p>Hızlı bir şekilde üretmeye başlamak, yazılım tasarlamamak anlamına gelir; bu çoğunlukla, karşılaştığınız sorunu analiz etmediğiniz ve seçiminizin uzun vadeli sonuçlarını anlamadığınız anlamına gelir.</p>



<p><strong>Q:</strong> <em>Harici paket kullanmanın kötü olduğunu mu söylüyorsunuz?</em></p>



<p><strong>A:</strong> Hayır. Harici kütüphanelerin kullanımını teşvik ediyoruz. Herhangi bir sınırlama veya kısıtlama yapmadan kendi projelerinize kolayca entegre edebileceğiniz her kütüphaneyi kullanın. Bu kesinlikle harika bir şey!</p>



<p><strong>Q:</strong> <em>Siz kimsiniz?</em></p>



<p><strong>A:</strong> Bu web sitesi PHP topluluğundaki fikirler ve aşırılıkçılıkla mücadele hakkındadır, kişisel şöhret ya da tanınma amacı gütmemektedir. İnsanları adlandırmak, odağı yalnızca web sitesinde değinilen sorunlardan sorunları çözen kişilere kaydırır. Sadece fikirlere odaklanmanızı tavsiye ediyoruz.</p>



<p><strong>Q:</strong> <em>Yazılım geliştirme alanındaki tecrübeniz nedir?</em></p>



<p><strong>A:</strong> Bu sitede ifade edilen fikirlere ve sonuçlara ulaşmak için çok fazla tecrübeye gerek olmadığını, ana temaya odaklanmanın yeterli olacağını düşünüyoruz.</p>



<h1 class="wp-block-heading" id="tavsiye-edilen-diğer-kaynaklar">Tavsiye edilen diğer kaynaklar</h1>



<p><a href="https://news.ycombinator.com/item?id=12318615">PHP The Wrong Way on Hacker News</a></p>



<ul class="wp-block-list">
<li>“PHP The Wrong Way” açıldığında, Hacker News üzerinde site hakkında okunmaya değer pek çok argüman içeren yorumlar üretildi.</li>
</ul>



<p><a href="https://news.ycombinator.com/item?id=12377385">Why bad scientific code beats code following “best practices”</a></p>



<ul class="wp-block-list">
<li>Yalın ve kayıtsız yetkinlik cehenneme giden bu yolda endüstriyel standartlardan daha iyi olabilir. Bilgisayarın dışındaki “gerçek dünya” bu tür örneklerle doludur.</li>
</ul>



<p><a href="https://medium.com/@brianwill/how-to-program-without-oop-74a46e0e47a3#.squpnjz4n">How to program without OOP</a></p>



<ul class="wp-block-list">
<li>Yeni ve alternatif bir bakış açısı olarak Brian Will, üç videoda programlamaya nesne yönelimli programlama ile başlamanın kötü bir fikir olduğunu neden düşündüğünü anlatıyor ve diziyi OOP dışı kodun nasıl yazılacağı konusunda birkaç notla bitiriyor.</li>
</ul>



<p><a href="http://codersatwork.com/">Coders at work &#8211; Reflections on the Craft of Programming</a></p>



<ul class="wp-block-list">
<li>Tüm zamanların en iyi on beş programcısı ve bilgisayar bilimcisiyle yapılan yaklaşık seksen saat süren konuşmalara ve Work at Coders’taki soru cevap görüşmelerine dayanarak programcıların programlamayı nasıl öğrendiği, zanaatlarını nasıl uyguladıkları ve gelecek hakkında ne düşündükleri hakkında çok yönlü bir belge.</li>
</ul>



<p><a href="https://www.oreilly.com/ideas/the-traits-of-a-proficient-programmer">The traits of a proficient programmer</a></p>



<ul class="wp-block-list">
<li>Yetkinlik, işleri yapmak için yeterli tecrübe ve bilgiye sahip olmak anlamına gelir; yeterlilik bir şeyi belirli bir şekilde yaptığınızı ve bunun büyük resme nasıl uyduğunu bilmekle ilgilidir. Başka bir deyişle, uzman bir uygulayıcı her zaman yetkili bir uygulayıcıdır, ancak bunun tersi doğru olmayabilir.</li>
</ul>



<p><a href="https://www.owasp.org/images/0/08/OWASP_SCP_Quick_Reference_Guide_v2.pdf">OWASP Secure Coding Guidelines</a></p>



<ul class="wp-block-list">
<li>Bu teknoloji agnostik belge, yazılım geliştirme yaşam döngüsüne entegre edilebilecek kontrol listesi formatında bir dizi yazılım güvenlik kodlama standardı tanımlar. Bu standartların uygulanması en yaygın yazılım açıklarını azaltacaktır.</li>
</ul>



<p><a href="https://www.owasp.org/index.php/Security_by_Design_Principles">Security by Design Principles</a></p>



<ul class="wp-block-list">
<li>Web uygulama güvenliği, açık kaynaklı PHP uygulamaları, doğrudan işleme gibi web hizmetleri veya tescilli kurumsal web siteleri gibi başarılı her projenin önemli bir bileşenidir. Uygulama sahipleri (haklı olarak) güvenli olmayan kodları kapatır ve kullanıcılar dolandırıcılık sağlayan güvenli olmayan hizmetleri kapatır. Bu Geliştirme Kılavuzunun amacı işletmelere, geliştiricilere, tasarımcılara ve çözüm mimarlarına güvenli web uygulamaları üretmelerine destek vermektir. En erken aşamalardan yapıldığında, güvenli uygulamalar güvensiz uygulamalarla aynı maliyete gelir ancak uzun vadede çok daha düşük maliyetlidir.</li>
</ul>



<p><a href="http://phpsecurity.readthedocs.io/en/latest/">Survive The Deep End: PHP Security</a></p>



<ul class="wp-block-list">
<li>Her önemli güvenlik açığını, bültenlerinde ve web sitelerinde not ediyorlar, bu konuyu çok öensediklerini gösteriyor. Aynı bakış açısıyla kötü bir tecrübe yaşamadan güvenlik konusunu ciddiye almak gerekir.</li>
</ul>



<p><a href="https://openlibrary.org/books/OL7407595M/Refactoring">Refactoring Improving the Design of Existing Code</a></p>



<ul class="wp-block-list">
<li>Kodu yeniden yazmak aslında tasarımı geliştirmek demektir. Bu kodun çıktısını değiştirmeden yapısını değiştirmektir. Yeniden yazarak kötü tasarlanmış bir uygulamayı daha doğru bir uygulama haline getirebilirsiniz. Bu kitap yeniden yazma prensiplerini (yeniden yazılacak yerleri tespit etme, gerekli testleri oluşturma gibi) tartışmaya açıyor. Kitapta ayrıca kırktan fazla kabul edilmiş yeniden yazma yöntemi (neden ve nasıl yapılacağı, aşama aşama uygulama ve sonucun nasıl olduğunu göstren örnekler ile) de yer alıyor.</li>
</ul>



<p><a href="https://openlibrary.org/works/OL15333872W/The_Practice_of_Programming_%28Addison-Wesley_Professional_Computing_Series%29">The Practice of Programming</a></p>



<ul class="wp-block-list">
<li>Programcılar için önemli pratik konuların bir özeti.</li>
</ul>



<p><a href="https://openlibrary.org/works/OL5748544W/The_pragmatic_programmer">The pragmatic programmer</a></p>



<ul class="wp-block-list">
<li>Pragmatik Programcı: Acemiden ustaya çekirdek programlama sürecini inceler; gereksinim alma ve kullanıcılarını memnun eden çalışma, bakım kodu üretme. Kişisel sorumluluk ve kariyer gelişiminden, kodu esnek tutmak, uyarlamak ve yeniden kullanmak için mimari tekniklere kadar uzanan konuları kapsar.</li>
</ul>



<p><a href="https://openlibrary.org/works/OL1875800W/Understanding_programming_languages">Understanding programming languages</a></p>



<ul class="wp-block-list">
<li>Bir programlama dilinin seçimi, bir yazılım sisteminin nihai kalitesini etkileyen en önemli faktörlerden biridir. Ne yazık ki, çok fazla programcının dil becerisi zayıf: bildikleri dillere tutkuyla anadil dilleri gibi âşıklar ve dil kısıtlamalarını analiz edemiyorlar. “Programlama Dillerini Anlamak” adlı kitap dil tasarımcıları için hangi alternatiflerin mevcut olduğunu, dil yapılarının güvenlik ve okunabilirlik açısından nasıl kullanılması gerektiğini, dil yapılarının nasıl uygulandığını, hangilerinin verimli bir şekilde yerine getirilebileceğini ve dilin soyutlamaları ifade etmedeki ve uygulamasındaki rolünü açıklama amacıyla yazılmıştır.</li>
</ul>



<h1 class="wp-block-heading" id="nasıl-katkıda-bulunabilirim">Nasıl katkıda bulunabilirim?</h1>



<p><a href="https://codeberg.org/unixdigest/phpthewrongway#how-to-contribute">Codeberg</a>’taki repo ile başlayabilirsiniz.</p>



<p>Kaynak: <a href="https://phpthewrongway.com/tr/">https://phpthewrongway.com/tr/</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>SS963 Seri Sürücü ile Şerit LED Besleme ve LED Besleme Trafosu Seçimi</title>
		<link>https://www.tankado.com/ss963-seri-surucu-ile-serit-led-besleme-ve-led-besleme-trafosu-secimi/</link>
					<comments>https://www.tankado.com/ss963-seri-surucu-ile-serit-led-besleme-ve-led-besleme-trafosu-secimi/#respond</comments>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Fri, 15 Mar 2024 14:31:02 +0000</pubDate>
				<category><![CDATA[Elektronik]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=9010</guid>

					<description><![CDATA[Bültenimizde SS963 seri sürücü kartı ile beraber şerit ledleri beslerken kullandığımız 12v SMPS güç kaynaklarının (LED trafolarının) seçiminden ve bazı kullanım uygulamalarından bahsedeceğiz. Sıklıkla LED trafosu olarak da adlandırılan bu güç kaynaklarının özellikle adreslenebilir LED&#8217;ler için kullanılan 5V&#8217;luk olanları da vardır. Doğru bir SMPS güç kaynağı seçerken ve kullanırken aşağıdaki konuları gözden geçirmenizi projelerinizde uygulamanızı &#8230; <a href="https://www.tankado.com/ss963-seri-surucu-ile-serit-led-besleme-ve-led-besleme-trafosu-secimi/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "SS963 Seri Sürücü ile Şerit LED Besleme ve LED Besleme Trafosu Seçimi"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Bültenimizde SS963 seri sürücü kartı ile beraber şerit ledleri beslerken kullandığımız 12v SMPS güç kaynaklarının (LED trafolarının) seçiminden ve bazı kullanım uygulamalarından bahsedeceğiz. Sıklıkla LED trafosu olarak da adlandırılan bu güç kaynaklarının özellikle adreslenebilir LED&#8217;ler için kullanılan 5V&#8217;luk olanları da vardır. Doğru bir SMPS güç kaynağı seçerken ve kullanırken aşağıdaki konuları gözden geçirmenizi projelerinizde uygulamanızı önemle tavsiye ederiz.</p>



<p></p>



<span id="more-9010"></span>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p></p>



<h2 class="wp-block-heading">Trafo Seçimi Nasıl Yapılmalıyım ?</h2>



<p>3çipli 12v&#8217;luk bir şerit LED metre başına ortalama 1.2A akım çeker. En doğru değeri kullandığınız şerit LED&#8217;in paketi üzerinden kontrol edebilirsiniz. Örneğin aşağıdaki LED&#8217;in metrede 14.4 watt güce ihtiyacı varmış. Kaç ampere ihtiyacı olduğunu bulmak için 14.4&#8217;ü 12volt&#8217;a bölün. Sonuç: 1.2A&#8217;dir. </p>



<p>İhtiyacınız olan trafonunun akım değerine karar vermek için şerit LED metre uzunluğu ile metre başına akım ihtiyacını çarpın. Örneğin 30metre 1.2A&#8217;lik şeritin kullanıldığı bir proje söz konusu ise en düşük 36A&#8217;lik bir güç kaynağına ihtiyaç vardır.</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="800" height="817" src="https://www.tankado.com/assets/2024/02/serit-led2024-02-21_02-52-48.png" alt="" class="wp-image-9025" style="width:176px;height:auto"/></figure>



<p>(Açıklamaları okumak için görselin üzerine tıklatın)</p>



<p><strong>Trafonun ömrünü artırmak için toleranslı olun:</strong> Eğer şerit LED&#8217;ler uzun süreler boyunca kesintisiz çalıştırılacaksa trafonun ısınmaya bağlı olarak ömrünü uzatmak için hesapladığınız değerin %25-%30  daha fazlasını verebilecek bir trafo kullanın. Bu sayede trafo, şerit LED voltajını 12v&#8217;da muhafaza etmek için daha az stres altında çalışacaktır. Trafonun bulunduğu ortamda bir hava akışı yoksa veya fansız bir trafo kullanıyorsanız bu toleransı biraz daha artırabilirsiniz.</p>



<p><strong>Trafonun kalitesinden emin olmak: </strong>Çoğu trafonun üzerinde bir voltaj ayar trimpotu bulunur. Trimpotu kullanarak <strong>trafolar boşta iken</strong> (şerit LED bağlı değilken) bir ölçü aleti ile (volt metre) çıkışı 12v&#8217;a sabitleyebilirsiniz. Bu işlemi yaptıktan sonra tüm şerit LED&#8217;leri <strong>çalıştırın</strong> ve voltajı tekrar ölçün. Eğer ölçtüğünüz bu değer 11.5&#8217;un altına kadar düşüyorsa kullanmakta olduğunuz trafo beyan ettiği akımı sağlayamıyor demektir. Belli bir fiyatın altındaki düşük standartlı güç kaynakları genellikle üzerinde yazılı akım değerini voltajı düşürmeden <strong>sağlayamaz</strong>. Bu konuda standartları yüksek, servis ağı ve garantisi olan güç kaynaklarını tercih etmelisiniz.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;68423817a130b&quot;}" data-wp-interactive="core/image" class="wp-block-image size-full is-resized wp-lightbox-container"><img loading="lazy" decoding="async" width="900" height="641" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://www.tankado.com/assets/2024/02/2024-02-smps-seri-led-trafo-ayar-trimpotu-20_22-34-06.png" alt="" class="wp-image-9013" style="width:205px;height:auto"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Büyüt"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p></p>



<h2 class="wp-block-heading">Trafo Bağlantılarını Nasıl Yapmalıyım ?</h2>



<p><strong>Paralel bağlamayın</strong>: LED trafolarının pozitif ve negatif kutuplarını birbirine bağlayarak paralel hale getirmeyin. Çünkü herbir SMPS güç kaynağı kendi çıkışını regüle etmek için kendi geri besleme devresine sahiptir. Ancak yüksek akım ihtiyacını karşılamak için birden fazla trafo kullanmak iyi bir fikirdir. Böylece hem daha ekonomik bir çözüm sağlamış, hem trafo ısısını daha geniş bir alana yaymış hem de arıza durumunda sorunu daha kolay lokalize etme imkanlarına kavuşursunuz. Birden fazla trafoyu SS963 ile kullanmanız gerektiğinde trafoların yalnızca negatif kutuplarını birbirine bağlayın. Trafoların her iki kutbunu da birbirine &#8220;<strong>bağlamayın</strong>&#8220;.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;68423817a1beb&quot;}" data-wp-interactive="core/image" class="wp-block-image size-full wp-lightbox-container"><img loading="lazy" decoding="async" width="1239" height="329" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://www.tankado.com/assets/2024/03/2024-02-17_20-50-13-1.png" alt="" class="wp-image-9050"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Büyüt"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>Aşağıdaki görselde SS963 seri sürücü kartlarının birden fazla güç kaynağı ile nasıl bağlandığı gösterilmiştir. </p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;68423817a2264&quot;}" data-wp-interactive="core/image" class="wp-block-image size-full wp-lightbox-container"><img loading="lazy" decoding="async" width="1244" height="744" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://www.tankado.com/assets/2024/02/2024-02-21_02-42-35.png" alt="" class="wp-image-9023"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Büyüt"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p>Trafonun pozitif kutubuntan çıkıp LED&#8217;lere giden kabloların toplam çapı ile ve SS963&#8217;ün Gnd terminallerinden trafoya dönen kabloların toplam çapı eşit ve enaz hesaplanan yarı çap kadar olmalıdır.  </p>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p></p>



<h2 class="wp-block-heading">Kullanacağım Kabloların Kalınlığı Nekadar Olmalı?</h2>



<p>Şerit LED&#8217;leri beslerken kablo kalınlıklarına dikkat edin. Örneğin toplamda 15A çeken (yaklaşık 18 metre) bir şerit LED bloğunu beslemek için en az 1.5mm2 (1.5&#8217;luk kablo) kullanın. 25 Amper&#8217;e kadar da 2.5&#8217;luk kablo kullanabilirsiniz. Ayrıca kullandığınız kablonun bakır olmasına dikkat edin (Piyasada ucuz olması nedeniyle aliminyum kablolar da satılmaktadır). </p>



<p>Trafoların pozitif kutbundan çıkan akım, şerit LED&#8217;leri dolaşarak negatif kutubundan trafoya geri döner. Dolayısıyla çapını hesapladığınız kablo kesitinin aynısını trafonun negatif kutbunda da kullanmalısınız. Aksi takdirde LED parlaklığında azalma, kablolarda ısınma hatta alevli yanma gerçekleşebilir. Mesafeye ve akıma göre tercih edilmesi gereken kablo kesitleri aşağıdaki tabloada yer almaktadır.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;68423817a28e3&quot;}" data-wp-interactive="core/image" class="wp-block-image size-full wp-lightbox-container"><img loading="lazy" decoding="async" width="1338" height="428" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://www.tankado.com/assets/2024/03/2024-02-17_21-02-24.png" alt="" class="wp-image-9049"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Büyüt"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>



<p> (Tabloyu büyütmek için üzerine tıklatın)</p>



<p><strong>Hatırlatma: </strong>Tüm şerit LED&#8217;ler yanarken ana artel pozitif (+) veya negatif (-) kutup kablolarından birine dokunarak sıcak olup olmadığına bakın, elle hissedilebilecek bir sıcaklık varsa kablo çaplarının olması gerekenden küçük olduğu sonucuna varabilirsiniz. </p>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p></p>



<h2 class="wp-block-heading">Uzun Şeritleri Bağlarken Dikkat Edin</h2>



<p><strong>Uzun şerit LED&#8217;ler</strong>: Art arda bağlı şerit LED&#8217;leri beslerken toplamda 5metre uzunluğun üzerine çıkmayın. Şerit LED&#8217;lerin voltaj besleme bağlantılarını aşağıdaki görseldeki gibi ayrı ayrı yapın. LED&#8217;in kendi üzerindeki bakır yolların akım taşıma kapasitesi sınırlı olduğundan şerit LED&#8217;in ömrünü kısaltmış olursunuz.</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;68423817a2f9f&quot;}" data-wp-interactive="core/image" class="wp-block-image size-full wp-lightbox-container"><img loading="lazy" decoding="async" width="1348" height="681" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://www.tankado.com/assets/2024/03/2024-02-17_20-50-50.png" alt="" class="wp-image-9047"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Büyüt"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>
</div></div>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<p></p>



<h2 class="wp-block-heading">Neden Kart Beslemesini Ayrı Yapmalıyım ?</h2>
</div></div>



<p>LED&#8217;leri besleyen güç kaynağındaki dalgalanmalardan ve parazitlerden tüm sistemin olumsuz etkinlenmemesi için yalnızca kartları besleyecek <strong>bağımsız bir 12V/3A bir güç kaynağı kullanın</strong>. ss963 seri sürücü kartları ayrı bir güç kaynağından besleyerek son derece sorunsuz ve stabil bir sistem elde edebilirsiniz. Herbir seri sürücü kartı 50mA civarında akım çeker. 3A&#8217;lik bir trafo ile 60&#8217;a kadar seri sürücü kartı besleyebilirsiniz. </p>



<p>(Açıklamaları okumak için görselin üzerine tıklatın)</p>



<figure data-wp-context="{&quot;imageId&quot;:&quot;68423817a38ba&quot;}" data-wp-interactive="core/image" class="wp-block-image size-full wp-lightbox-container"><img loading="lazy" decoding="async" width="1579" height="854" data-wp-class--hide="state.isContentHidden" data-wp-class--show="state.isContentVisible" data-wp-init="callbacks.setButtonStyles" data-wp-on-async--click="actions.showLightbox" data-wp-on-async--load="callbacks.setButtonStyles" data-wp-on-async-window--resize="callbacks.setButtonStyles" src="https://www.tankado.com/assets/2024/03/seri_surucu_besleme_trafosu-1.png" alt="" class="wp-image-9036"/><button
			class="lightbox-trigger"
			type="button"
			aria-haspopup="dialog"
			aria-label="Büyüt"
			data-wp-init="callbacks.initTriggerButton"
			data-wp-on-async--click="actions.showLightbox"
			data-wp-style--right="state.imageButtonRight"
			data-wp-style--top="state.imageButtonTop"
		>
			<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" fill="none" viewBox="0 0 12 12">
				<path fill="#fff" d="M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z" />
			</svg>
		</button></figure>
</div></div>
]]></content:encoded>
					
					<wfw:commentRss>https://www.tankado.com/ss963-seri-surucu-ile-serit-led-besleme-ve-led-besleme-trafosu-secimi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Isınma Sorunları</title>
		<link>https://www.tankado.com/isinma-sorunlari/</link>
					<comments>https://www.tankado.com/isinma-sorunlari/#respond</comments>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 10:06:45 +0000</pubDate>
				<category><![CDATA[Sorun Gidermek]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=8927</guid>

					<description><![CDATA[SoC içinde bulunan sıcaklık sensörünü kullanarak Raspberry Pi’ın o anki sıcaklığını öğrenebilirsiniz. İşlemci çekirdeğinin sıcaklığını daha hassas okumak için /sys/class/thermal/thermal_zone0/temp dosyasının içeriğini de görüntüleyebilirsiniz: Tüm mikroişlemcili sistemlerde olduğu gibi sıcaklık, işlemci başarımı olumsuz etkileyen bir faktördür. Raspberry Pi’ı ne kadar iyi soğutursanız o kadar yüksek bir performans sergileyecektir. Aynı zamanda bu, Raspberry Pi bilgisayarının malzeme &#8230; <a href="https://www.tankado.com/isinma-sorunlari/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "Isınma Sorunları"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>SoC içinde bulunan sıcaklık sensörünü kullanarak Raspberry Pi’ın o anki sıcaklığını öğrenebilirsiniz.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry ~ $ vcgencmd measure_temp

temp=44.4'C</pre>



<p>İşlemci çekirdeğinin sıcaklığını daha hassas okumak için /sys/class/thermal/thermal_zone0/temp dosyasının içeriğini de görüntüleyebilirsiniz:</p>



<span id="more-8927"></span>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ cat /sys/class/thermal/thermal_zone0/temp

44546</pre>



<p>Tüm mikroişlemcili sistemlerde olduğu gibi sıcaklık, işlemci başarımı olumsuz etkileyen bir faktördür. Raspberry Pi’ı ne kadar iyi soğutursanız o kadar yüksek bir performans sergileyecektir. Aynı zamanda bu, Raspberry Pi bilgisayarının malzeme ömrünün daha uzun olmasını sağlar. Raspberry Pi’ın hızlı sürümlerini tercih edip işlemcinin zamanının çoğunu boşta (idle) geçirmesini sağlayarak da ömrünü artırabilirsiniz.</p>



<p>Çoğu durumda Raspberry Pi ek bir soğutmaya ihtiyaç duymaz<a href="#_ftn1" id="_ftnref1">[1]</a> <a href="#_ftn2" id="_ftnref2">[2]</a>. Raspberry Pi sürekli olarak zor işleri yerine getiriyorsa doğal olarak SoC çipi ısınacaktır. Bu durumun termal fotoğrafı aşağıda yer almaktadır.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="967" height="824" src="https://www.tankado.com/assets/2023/12/1-11.jpg" alt="" class="wp-image-8928"/></figure>



<p>Raspberry Pi’ın termal görüntüsü</p>



<p>Çipin sıcaklığı 80C’nin üzerine çıktığında aşağıdaki simgeler ekranda görüntülenerek durumu haber verir. Bu durumda önce CPU ardından hem CPU hem de GPU hız azaltarak sıcaklığı düşürmeye çalışır.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="465" height="209" src="https://www.tankado.com/assets/2023/12/2-5.jpg" alt="" class="wp-image-8929"/></figure>



<p>Raspberry Pi’ın kullanıldığı projelere dolayısıyla iş yüküne bağlı olarak sıcaklığın yüksek seyrettiği uygulamalarda 2 tür soğutma gerçekleştirebilirsiniz. İlki heatsink<a href="#_ftn3" id="_ftnref3">[3]</a> denilen kendinden yapışkanlı çok yapraklı alüminyum soğutucuları Raspberry Pi’ın chipset’i üzerine yapıştırmaktır. Bu Raspberry Pi’ın sıcaklığının ortalama 3-5 santigrat derece azalmasını sağlayacaktır. Diğer tür soğutmada heatsink’e ek veya münferit olarak bir üfleme fanı kullanılır ve hava ile soğutma sağlanır. Etkin bir soğutma sağlamak için Raspberry Pi’ı kapalı bir muhafaza içine alarak sıcak havanın dışarı üflenmesini sağlayabilirsiniz. Bu da ortam sıcaklığına bağlı olarak ısının birkaç derece daha azalmasını sağlayacaktır. Aşağıdaki grafikte alüminyon soğutucu ve fan ile soğutmanın etkinlik karşılaştırmasını görebilirsiniz.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="726" height="487" src="https://www.tankado.com/assets/2023/12/3-15.png" alt="" class="wp-image-8930"/></figure>



<p><br>Fan ve Alüminyum Blokların Soğutma Başarımları</p>



<p>Aşağıdaki görsellerde çeşitli soğutucular kullanılarak elde edilen soğutma başarımları gösterilmiştir. Kullanılan soğutucuların hava ile temas yüzüye nekadar fazla olursa o derece etkin bir soğutma gerçekleştirilir diyebiliriz. Bunun yanında soğutucu ile çip arasındaki ısı iletiminin ayrı bir önemi vardır.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="741" height="397" src="https://www.tankado.com/assets/2023/12/4-8.png" alt="" class="wp-image-8931"/></figure>



<p><br>Çeşitli soğutucular</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1390" height="236" src="https://www.tankado.com/assets/2023/12/5-7.png" alt="" class="wp-image-8932"/></figure>



<p><br>Soğutucuların teknik özellikleri</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="837" height="567" src="https://www.tankado.com/assets/2023/12/6-4.png" alt="" class="wp-image-8933"/></figure>



<p><br>Soğutma başarımı karşılaştırması</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>Ne zaman soğutucu kullanılmalı?</strong></p>



<p>Raspberry Pi sürekli olarak yoğun işlem gücü gerektiren işler ile uğraşıyorsa bunu htop veya top komutunun sunduğu işlemci yoğunluk ortalamalarına bakarak anlayabilirsiniz. Örneğin; 15 dk.’lık işlemci kullanım ortalamasının sürekli yüksek değerlere sahip olması harici bir soğutmaya ihtiyaç duyulduğunun göstergesi olabilir. top ve htop hakkında detaylı bilgiyi kitapta bulabilirsiniz.</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><a href="#_ftnref1" id="_ftn1">[1]</a> Raspberry Pi termal haritası: https://goo.gl/guSkDF</p>



<p><a href="#_ftnref2" id="_ftn2">[2]</a> Raspberry Pi için soğutma sistemleri: https://goo.gl/S1C8wB</p>



<p><a href="#_ftnref3" id="_ftn3">[3]</a> Raspberry Pi heatsink: https://goo.gl/QKMITr</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.tankado.com/isinma-sorunlari/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Rasberry Pi’ın Firmware’ini Elle Güncellemek</title>
		<link>https://www.tankado.com/rasberry-piin-firmwareini-elle-guncellemek/</link>
					<comments>https://www.tankado.com/rasberry-piin-firmwareini-elle-guncellemek/#respond</comments>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 10:03:59 +0000</pubDate>
				<category><![CDATA[Sorun Gidermek]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=8925</guid>

					<description><![CDATA[Raspberry Pi’ın sistem çipi olan SoC (örn., BCM28xx), Broadcom&#160;firması tarafından üretilmiştir ve içerisinde genel olarak CPU, GPU, GPU, GPIO port ve arabirimlerini barındırır. Raspberry Pi’a enerji verildiğinde GPU içinde bootloader adı verilen ufak bir program parçası çalışarak bu donanım bileşenlerini gerektiği şekilde etkinleştir ve açılışın devam etmesini sağlar. Bootloader’ın yani açılış ön yükleyicisinin ilk parçası &#8230; <a href="https://www.tankado.com/rasberry-piin-firmwareini-elle-guncellemek/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "Rasberry Pi’ın Firmware’ini Elle Güncellemek"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Raspberry Pi’ın sistem çipi olan SoC (örn., BCM28xx), Broadcom&nbsp;firması tarafından üretilmiştir ve içerisinde genel olarak CPU, GPU, GPU, GPIO port ve arabirimlerini barındırır. Raspberry Pi’a enerji verildiğinde GPU içinde bootloader adı verilen ufak bir program parçası çalışarak bu donanım bileşenlerini gerektiği şekilde etkinleştir ve açılışın devam etmesini sağlar. Bootloader’ın yani açılış ön yükleyicisinin ilk parçası sistem çipinin (GPU) içindedir ve açılış sürecini daha büyük ve yetenekli ikinci aşama program olan firmware adındaki diğer Bootloader yazılıma devreder. Raspberry Pi’ın açılış süreciyle ilgili detaylı bilgiyi kitabın “Raspberry Pi 3&#8217;ün Açılış (Boot) Süreci” başlığında bulabilirsiniz.</p>



<span id="more-8925"></span>



<p>Broadcom firması zaman zaman sistem çipi ile ilgili yaptığı firmware düzeltmelerini ve iyileştirmelerini yayınlar ve Raspberry Pi Vakfı da bunu mevcut dağıtımına entegre eder. Raspberry Pi’ın omurgası olan SoC çipini üreten Broadcom firması bootloader’ının kodlarını açmamaktadır. Kaynak kodlar paylaşılmadığından, açılış sürecinin ilk 2 aşması kapalı olarak yürür. Güncel bir firmware’e sahip olmak başarım açısından önemlidir. Zira firmware Linux çekirdeğini başlatır ve gerektiğinde donanım işlevlerini en etkin şekilde kullanması için bir arayüz yaratır. Güncel bir firmware’e sahip olmanın diğer avantajlarını kitabın “Raspberry Pi’ın EEPROM’unu güncelleştirmek” başlıklı konusundan okuyabilirsiniz.</p>



<p>Bootloader’ın ya da firmware’in güncellenmesi Raspberry Pi 4’den itibaren değişmiştir. Bu nedenle buradan sonra iki farklı başlık altında ele alınacaktır.</p>



<p><strong>Not</strong>: Firmware’den kaynaklı açılış sorunlarını yorumlamak için kitabın “Açılış Sorunları ve Aktivite LED’inin söyledikleri” başlığına göz gezdirebilirsiniz.</p>



<h3 class="wp-block-heading">Raspberry Pi 3 ve öncesini güncellemek</h3>



<p>Bu başlıkta tarif edilen güncelleme işlemi sadece Raspberry Pi 3 ve daha eski modeller içindir. Raspberry Pi 3 ve öncesi bilgisayarların firmware yazılımı, boot&nbsp;(disk bölümü) bölümünde yer alan bootcode.bin adlı dosyada saklanmaktadır. Firmware normal şartlarda kullanmakta olduğunuz dağıtımı güncellediğiniz sırada (dist-upgrade) zaten güncellenir. Bazen dağıtımınızı üst bir dağıtıma yükseltmek gerektiğinde (örn., Raspberry Pi OS Stretch’i Buster’a yükseltmek gibi) veya Raspberry Pi’ın açılışını engelleyen firmware kaynaklı sorunları çözmek gerektiğinde elle (manual) güncelleme (firmware) gerekli olabilir.</p>



<p>Burada anlatılacak olan elle güncelleme yöntemi hâlihazırda kullanmakta olduğunuz dağıtımın ana deposundan değil, henüz geliştirmesi devam eden ve sadece Raspberry Pi OS geliştiricilerinin kullanımına hizmet eden ayrı bir depodan çekilir. Güncellemeyi gerçekleştiren rpi-update aracı Raspberry Pi OS geliştiricilerinin kullanmakta olduğu özel bir araçtır (script) ve sistemi açılmaz duruma getirebileceğinden yukarıda bahsedilen özel durumlar haricinde kullanılmaması önerilir. Firmware zaten dağıtımı güncellediğiniz de güncellenmektedir.</p>



<p>Broadcom firmasının sunmuş olduğu firmware’i ve Linux çekirdeğini güncelleyecek araç olan rpi-update, Raspbian’ın standart bir aracı değildir ve haricen yüklenmesi gerekebilir (eski Raspberry Pi OS sürümlerde varsayılan olarak yüklü değildir):</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry ~ $ sudo apt update

pi@raspberry ~ $ sudo apt install rpi-update</pre>



<p>rpi-update aracı güvenlik için veriyi kendi özel deposundan SSL (güvenli bağlantı) kullanarak çeker; bu nedenle Raspberry Pi ‘ınızın sertifikalarının da güncel ve geçerli olması gerekir. Bu araç CA sertifikalarınızı&nbsp;doğrulayamaz ise aşağıdaki komutlar sertifikaları yükleyebilir ve ardından güncellenmesini sağlayabilirsiniz<a href="#_ftn1" id="_ftnref1">[1]</a>.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry ~ $ sudo apt install ca-certificates

pi@raspberry ~ $ sudo update-ca-certificates</pre>



<p>GPU firmware’ini&nbsp;güncellemeden önce mevcut firmware sürümünü görmek için şu komutu verin:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry ~ $ vcgencmd version

Mar 15 2018 14:47:28

Copyright (c) 2012 Broadcom

version 1cf9a9a77027af9128a339c82d72e331d3532ee4 (clean) (release)</pre>



<p>vcgencmd&nbsp;(VideoCore General Command) aracı sistem çipinin (SoC) içinde yüklü bellenim (firmware) programı ile iletişim kurarak sistem çipinin seçeneklerini görüntülemek ve değiştirmek için kullanılan bir araçtır. Aracın yukarıdaki çıktısında, mevcut sistem çipi yazılımının 15 Mart 2018 tarihli olduğu ve sürüm numarası gözüküyor.</p>



<p>GPU firmware’ini güncellemek için ise şu komutu verebilirsiniz:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry ~ $ sudo rpi-update</pre>



<p>rpi-update aracı firmware’i ve Linux çekirdeğini güncelledikten sonra değişikliğin geçerli olması için yeniden başlatmanızı önerecek. Raspberry Pi bilgisayarını şu komutla yeniden başlatabilirsiniz:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry ~ $ sudo reboot</pre>



<p><strong>İyi haber:</strong> Kitabı yazdığım sıralarda Broadcom firması Raspberry Pi’ın üçüncü sürümünden itibaren kullanılan BCM2837 sistem çipi yazılımının kodlarını açtığını duyurmuştu.</p>



<h3 class="wp-block-heading">Raspberry Pi 4 ve sonrasını güncellemek</h3>



<p>Raspberry Pi 4’ün firmware’ini güncellemek model 3 ve öncesinin aksine uygulanması tavsiye edilen bir işlemdir; çünkü Raspberry Pi’ın başarımını arttırarak yeni özellikler kazandırır<a href="#_ftn2" id="_ftnref2">[2]</a>. Model 3’de firmware /boot/bootcode.bin dosyasında saklanmakta ve SoC&nbsp;tarafından buradan okunarak başlatılmaktaydı. Model 4’de bu durum değişti ve bu dosyanın içeriği SoC’a SPI arabiriminden bağlı 512KB’lık bir EEPROM’a yerleştirildi. Yeterince büyük olan bu EEPROM’un içinde hem bootloader&nbsp;hem de USB kontrolörünün programı yer alır.</p>



<p>EEPROM’u güncellemek için kullanılacak araçlar Raspberry Pi OS deposunda rpi-eeprom&nbsp;adlı pakette toplanmıştır. Kullanmakta olduğunuz dağıtımda bu paket kurulu ise arka planda güncelleştirmeleri otomatik takip eden ve yükleyen bir SystemD servisinin de hâlihazırda etkin olması gerekir. Servisin varlığını aşağıdaki gibi kontrol edebilirsiniz.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberrypi:~ $ sudo systemctl status rpi-eeprom-update</pre>



<p>Eğer servis mevcut değilse aşağıdaki komutları uygulayarak yüklemeniz tavsiye edilir.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberrypi:~ $ sudo apt update

pi@raspberrypi:~ $ sudo apt full-upgrade

pi@raspberrypi:~ $ sudo apt install rpi-eeprom</pre>



<p>Servisin etkin olup olmadığını kontrol ettikten sonra normal şartlarda başka bir işlem yapmanıza gerek yoktur. Servis düzenli olarak Raspberry Pi OS deposunu kontrol edecek ve güncelleme varsa otomatik olarak yükleyecektir. Eğer güncellemeyi istediğiniz bir anda elle başlatmak isterseniz rpi-eeprom-update&nbsp;komutunu vererek başlatabilirsiniz.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberrypi:~ $ sudo rpi-eeprom-update

BCM2711 detected

BOOTLOADER: up-to-date

CURRENT: Tue 10 Sep 10:41:50 UTC 2019 (1568112110)

 LATEST: Tue 10 Sep 10:41:50 UTC 2019 (1568112110)

 FW DIR: /lib/firmware/raspberrypi/bootloader/critical

VL805: up-to-date

CURRENT: 000137ad

 LATEST: 000137ad</pre>



<p>rpi-eeprom-update komutu, yüklü bootloader’ın ve VL805&nbsp;firmware’inin sürüm numaralarını ve güncelleme gerekip gerekmediğini ekrana basar, güncelleme gerekiyorsa güncellemenin tamamlanması için yeniden başlatmayı önerir.</p>



<p>Esasında güncelleştirme işlemi bir sonraki açılış sırasında gerçekleştirilmek üzere hazırlanır. Güncelleme mekanizması şöyle çalışır;</p>



<ol class="wp-block-list">
<li>Gerekli recovery.bin&nbsp;ve firmware dosyaları (pieeprom.upd&nbsp;&nbsp;ile vl805.bin) internetten indirilir ve boot bölümüne kaydedilir. recovery.bin dosyası güncelleme işlemini yapacak ve SoC tarafından açılışta çalıştırılacak olan program dosyasıdır. pieeprom.upd ise ikinci aşama açılış ön yükleyicisinin, vl805.bin ise VIA VL805 USB 3.0 kontrolörünün firmware’ini barındırır<a href="#_ftn3" id="_ftnref3">[3]</a>. İndirilen bu dosyaların içeriklerini doğrulamak için içerisinde SHA256&nbsp;hash kodları yer alan &nbsp;pieeprom.sig&nbsp;ve vl805.sig&nbsp;dosyaları da indirilir. Hash dosyaları EEPROM’un bozulmuş bir firmware ile programlanmasını önlemek için bir önlemdir.</li>



<li>Raspberry Pi yeniden başladığında SoC içindeki ROM’da gömülü birinci aşama açılış ön yükleyicisi recovery.bin’i çalıştırır ve güncelleme işlemini başlatır. Eğer güncelleme başarılı olursa dosya ismini recovery.000 olarak değiştirir ve sistemi yeniden başlatır. Böylece sonraki yeniden başlatmalarda recovery.bin’in tekrar çalışması engellenmiş olur.</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><a href="#_ftnref1" id="_ftn1">[1]</a> Firmware’in güncellenmesi &#8211; http://goo.gl/7yklYN</p>



<p><a href="#_ftnref2" id="_ftn2">[2]</a> Rpi-update ve EEPROM firmware sürüm notları &#8211; http://tiny.cc/rpi-update</p>



<p><a href="#_ftnref3" id="_ftn3">[3]</a> Via Labs VL805 USB 3.0 Controller Datasheet &#8211; http://tiny.cc/vl805</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.tankado.com/rasberry-piin-firmwareini-elle-guncellemek/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Raspberry Pi açılmıyor</title>
		<link>https://www.tankado.com/raspberry-pi-acilmiyor/</link>
					<comments>https://www.tankado.com/raspberry-pi-acilmiyor/#respond</comments>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 10:02:34 +0000</pubDate>
				<category><![CDATA[Sorun Gidermek]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=8923</guid>

					<description><![CDATA[Raspberry Pi’ın açılmamasının birçok nedeni olabilir. Öncelikle USB port’larındaki takılı cihaz varsa hepsini çıkartın ve tekrar deneyin. Raspberry Pi’ın durum LED’leri olağan şekilde yanıyorsa HDMI kablonuzda kopukluk veya konnektörlerin girdiği soketlerde temassızlık olabilir. Raspberry Pi üzerindeki 2 adet HDMI&#160;port’undan varsayılan olan HDMI0’dır. HDMI kablosunu buraya bağladığınızdan emin olun. Kullandığınız kabloyu başka bir cihazla kontrol etmeyi &#8230; <a href="https://www.tankado.com/raspberry-pi-acilmiyor/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "Raspberry Pi açılmıyor"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Raspberry Pi’ın açılmamasının birçok nedeni olabilir. Öncelikle USB port’larındaki takılı cihaz varsa hepsini çıkartın ve tekrar deneyin. Raspberry Pi’ın durum LED’leri olağan şekilde yanıyorsa HDMI kablonuzda kopukluk veya konnektörlerin girdiği soketlerde temassızlık olabilir. Raspberry Pi üzerindeki 2 adet HDMI&nbsp;port’undan varsayılan olan HDMI0’dır. HDMI kablosunu buraya bağladığınızdan emin olun. Kullandığınız kabloyu başka bir cihazla kontrol etmeyi de deneyebilirsiniz. Ayrıca bir HDMI-VGA dönüştürücü kullanıyorsanız birinci bölümdeki “HDMI ve HDMI kabloları” konusunda da açıklandığı üzere aktif bir dönüştürücü kullandığınızdan emin olabilirsiniz.</p>



<span id="more-8923"></span>



<p>Kitabın “Enerji Besleyiciler” başlığında anlatıldığı şekilde güç adaptörünü temin ettiğinizden emin olun. Ardından “İşletim Sisteminin Yüklenmesi” başlığında anlatıldığı şekliyle yükleme işlemini gerçekleştirin. Raspberry Pi’ın açılabilmesi için besleme voltajının 4.75-5.25volt aralığında olması gerekir.</p>



<p>Eğer Raspberry Pi 4 kullanıyorsanız ve tüm bunlara rağmen açılış gerçekleşmiyorsa açılıştan sorumlu &nbsp;EEPROM’da yüklü olan bootloader firmware’i zarar görmüş olabilir. Bunu anlamak için Raspberry Pi’ın enerjisini kesin ve SD kartı çıkartın ardından tekrar enerji verin, yeşil LED yanmıyorsa muhtemelen EEPROM zarar görmüştür. Zarar gören EEPROM’u onarmak için vakfın Download sayfasında yer alan kurtarma bootloader’ını indirin ve arşiv dosyasının içeriğini FAT biçimli boş bir SD karta kopyalayın. EEPROM’u otomatik olarak güncelleyecek olan bu kurtarma diskini Raspberry Pi’a bağlayarak enerji verin ve yeşil LED’in yanmasını bekleyin. Yeşil LED yanıp sönmeye başladıktan sonra enerjiyi kesin ve esas SD kart ile başlatarak durumu kontrol edin. Bu işlem işletim sistemi dağıtımının türünden bağımsızdır yani Raspberry Pi OS dışındaki herhangi bir işletim sistemini çalıştıran Raspberry Pi’lara da uygulanabilir.</p>



<p>Kullandığınız Raspberry Pi modeline uygun olarak bootloader’ı güncellemek için kitabın “&nbsp;Rasberry Pi’ın Firmware’ini Elle Güncellemek” başlığına da göz gezdirebilirsiniz.</p>



<p>Ayrıca, Raspberry Pi’ın üzerinde bulunan kırmızı ve yeşil LED’ler açılış sürecindeki hatalar ile ilgili birçok bilgi verir. Açılış hataları ve LED’lerin anlamları için kitabın “Açılış Sorunları ve Aktivite LED’inin söyledikleri” başlığını okuyabilirsiniz.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.tankado.com/raspberry-pi-acilmiyor/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>logwatch ile Sistem Günlüklerini Analiz Etmek</title>
		<link>https://www.tankado.com/logwatch-ile-sistem-gunluklerini-analiz-etmek/</link>
					<comments>https://www.tankado.com/logwatch-ile-sistem-gunluklerini-analiz-etmek/#respond</comments>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 10:01:49 +0000</pubDate>
				<category><![CDATA[Sorun Gidermek]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=8921</guid>

					<description><![CDATA[logwatch&#160;aracı sistem tarafından tutulan günlükleri yorumlayarak düzenli bir şekilde raporlayan kullanışlı bir araçtır. Araç aşağıdaki gibi yüklenip çalıştırıldığında birçok kategoride rapor sunar. Bunlar; sistemde çalışan cronjob görevleri, paket güncellemeleri, çekirdek hataları, başlatılan oturumlar, sudo kullanımları ve disk kullanım durumudur. logwatch üç seviyede rapor detayı sunar. Detay seviyesi 10, 5 ve 0 olmak üzere detail seçeneği &#8230; <a href="https://www.tankado.com/logwatch-ile-sistem-gunluklerini-analiz-etmek/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "logwatch ile Sistem Günlüklerini Analiz Etmek"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>logwatch&nbsp;aracı sistem tarafından tutulan günlükleri yorumlayarak düzenli bir şekilde raporlayan kullanışlı bir araçtır. Araç aşağıdaki gibi yüklenip çalıştırıldığında birçok kategoride rapor sunar. Bunlar; sistemde çalışan cronjob görevleri, paket güncellemeleri, çekirdek hataları, başlatılan oturumlar, sudo kullanımları ve disk kullanım durumudur.</p>



<span id="more-8921"></span>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo apt install logwatch -y</pre>



<p>logwatch üç seviyede rapor detayı sunar. Detay seviyesi 10, 5 ve 0 olmak üzere detail seçeneği ile ayarlanır:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ logwatch --detail 10</pre>



<p>logwatch arşiv de dâhil olmak üzere belirli tarihler arasındaki raporları görüntüleme, sadece belli bir servise ait raporları görüntüleme gibi işler için seçeneklere sahiptir. Seçeneklerin detayları hakkında bilgi almak için man komutunu kullanabilirsiniz:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ man logwatch</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.tankado.com/logwatch-ile-sistem-gunluklerini-analiz-etmek/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Disklerde Hata Taraması Gerçekleştirmek</title>
		<link>https://www.tankado.com/disklerde-hata-taramasi-gerceklestirmek/</link>
					<comments>https://www.tankado.com/disklerde-hata-taramasi-gerceklestirmek/#respond</comments>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 10:01:03 +0000</pubDate>
				<category><![CDATA[Sorun Gidermek]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=8918</guid>

					<description><![CDATA[Gerek Raspberry Pi&#8217;ın işletim sisteminin yüklü olduğu disk olan SD kart gerekse de harici olarak bağlanan USB depolama ortamları zaman zaman fiziksel hasara uğrayabilmekte ve bu hasar bir süre kendini göstermeden var olmaya devam edebilmektedir. Bir disk ortamının tamamının verileri sağlıklı saklayıp saklamadığı, yani yazılan verinin bozulmadan varlığını koruyup korumadığı basit bir yazma ve okuma &#8230; <a href="https://www.tankado.com/disklerde-hata-taramasi-gerceklestirmek/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "Disklerde Hata Taraması Gerçekleştirmek"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Gerek Raspberry Pi&#8217;ın işletim sisteminin yüklü olduğu disk olan SD kart gerekse de harici olarak bağlanan USB depolama ortamları zaman zaman fiziksel hasara uğrayabilmekte ve bu hasar bir süre kendini göstermeden var olmaya devam edebilmektedir. Bir disk ortamının tamamının verileri sağlıklı saklayıp saklamadığı, yani yazılan verinin bozulmadan varlığını koruyup korumadığı basit bir yazma ve okuma denemesi neticesi kolaylıkla anlaşılabilir. Bu başlık altında her Linux işletim sisteminde bulunan dd aracını kullanarak diskte bir okuma taraması yapacak, daha amaca yönelik olan fakat diske yazma işlemi yaptığı için dikkatli kullanılması gereken badblocks aracını inceleyeceğiz. Ayrıca sabit diskin işletim sistemi olarak kabul edilen ve diskte enerji var olduğu sürece sürekli olarak çalışan S.M.A.R.T adlı firmware programının yapısını ve kullanılış amacını inceleyeceğiz. Özellikle mekanik disklerde SMART verileri dafa fazla öneme sahiptir.</p>



<span id="more-8918"></span>



<h3 class="wp-block-heading">dd aracı ile okuma sınaması gerçekleştirmek</h3>



<p>Diskteki fiziksel hasarlar ise sadece basit bir okuma yapılarak anlaşılabilir. Bunun için &#8220;Terminal Ortamında SD Kartı Yedeklemek&#8221; adlı başlıkta detaylı olarak anlatıldığı üzere; dd aracı ile diskin tüm sektörleri okutulabilir. Fiziksel hasar olan bir sektöre gelindiğinde dd&nbsp;hata okuma hatası verecektir. Bunun için aşağıdaki gibi bir komut verilebilir.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry ~ $ sudo dd if=/dev/sda of=/dev/null count=102400 bs=1M</pre>



<p>Yukarıdaki komut ile /dev/sda diskinin 0. Sektöründen başlanarak 1 megabayt’lık bloklar halinde toplam 102400 MB veri okunarak /dev/null aygıtına gönderilmiştir. Toplamda diskten 100GB&#8217;lık veri okuması yapılır. Diskin boyutuna göre bu rakam değiştirilebilir. /dev/null&nbsp;aygıtı gelen her veriyi kabul eden ardından imha eden Linux&#8217;a özel bir aygıt dosyasıdır. Genellikle standart çıkışa (stdout) yansıyan çıktıların ekrana veya log&#8217;lara yansımadan yok edilmesi için kullanılır.</p>



<h3 class="wp-block-heading">badblocks aracı ile yazma/okuma sınaması gerçekleştirmek</h3>



<p>Linux’ta hasarlı sektörleri taramak için geliştirilmiş bir araç olan badblock&nbsp;da kullanışlı olabilir. badblock&#8217;u kurup aşağıdaki gibi çalıştırabilirsiniz. -v (verbose) seçeneği ile taramanın aşamaları ve sonuçları ayrıntılı olarak listelenecektir. Taranacak diski veya disk bölümünü belirlemek için mevcut disk bölümlerinin aygıt isimlerini lsblk aracı ile listeletebilirsiniz.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~$ sudo apt update

pi@raspberry:~$ sudo apt install badblocks -y

pi@raspberry:~$ lsblk

NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MAJ:MIN RM&nbsp; SIZE RO TYPE MOUNTPOINT

sda&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8:0&nbsp;&nbsp;&nbsp; 1&nbsp; 14.9G&nbsp; 0 disk

sdb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;8:16&nbsp;&nbsp; 0 298.1G&nbsp; 0 disk

└─sdb1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8:17&nbsp;&nbsp; 0 298.1G&nbsp; 0 part /media/pi/DEPO VI

mmcblk0&nbsp;&nbsp;&nbsp;&nbsp; 179:0&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 7.4G&nbsp; 0 disk

├─mmcblk0p1 179:1&nbsp;&nbsp;&nbsp; 0&nbsp; 41.8M&nbsp; 0 part /boot

└─mmcblk0p2 179:2&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp; 7.4G&nbsp; 0 part /pi@raspberry:~$ sudo badblocks -v /dev/mmcblk0

Checking blocks 0 to 7802879

Checking for bad blocks (read-only test):

Pass completed, 0 bad blocks found. (0/0/0 errors)

pi@raspberry:~$ sudo badblocks -v /dev/sda

Checking blocks 0 to 15633407

Checking for bad blocks (read-only test):

done

Pass completed, 0 bad blocks found. (0/0/0 errors)</pre>



<p>Daha önce de bahsettiğim gibi en doğru sonucu verecek tarama yöntemi yazma ve okumadır. Eğer diskin herhangi bir sektörüne yazılan değer geri okunabiliyorsa disk sektörlerinin sağlıklı çalıştığı söylenebilir. badblocks aracı bunun için de -w seçeneğine sahiptir. Taramayı başlatmadan önce diskteki verilerin yedeklerinin alınması gerekir keza diske veri yazılacağından veriler tamamen yok olacaktır. Sistem tarafından kullanımda olan bir diske yazma/okuma taraması yapılamayacağından öncesinde bağlı olan diskleri ayırmak gerekir.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ umount /dev/sdb1

umount: /dev/sdb1: not mounted

pi@raspberry:~ $ sudo badblocks -vws /dev/sdb

Checking for bad blocks in read-write mode

From block 0 to 15633407

Testing with pattern 0xaa: done

Reading and comparing: done

Testing with pattern 0x55:&nbsp;&nbsp; 0.26% done, 1:14:08 elapsed. (0/0/0 errors)

…</pre>



<p>badblocks sırasıyla 0xaa (10101010), 0x55 (01010101), 0xff (11111111) ve 0x00 (00000000) değerlerini diske yazarak aynı değeri okumaya çalışır. Aynı değer okunamazsa ilgili sektör bad-sector&nbsp;(bozuk sektör) olarak raporlanır. -s (progress bar) seçeneği her bir testin tamamlanma yüzdesinin ekranda gösterilmesini sağlar.</p>



<h3 class="wp-block-heading">smartctl aracı ile dâhili kondisyon sınaması gerçekleştirmek</h3>



<p>SATA, IDE&nbsp;ve SCSI&nbsp;arabirimli (HDD/SSD) sabit disklerin mikrodenetleyicisi üzerinde S.M.A.R.T<a href="#_ftn1" id="_ftnref1">[1]</a> (Self-Monitoring, Analysis, and Reporting Technology) adı verilen bir firmware programı yüklüdür ve diskte enerji olduğu sürece bağımsız olarak çalışır. S.M.A.R.T sabit diskin kendi kendini izleme, analiz ve raporlama görevlerini yerine getirir. Bu program diskin mikrodenetleyicisine üretim sırasında yüklenir ve disk enerjilendiği andan itibaren sürekli çalışarak diskin kondisyonunu takip eder ve raporlar üretir.</p>



<p>S.M.A.R.T programı diskin okuma/yazma kafasının mekanik tepkileri, disk motorunun hız ivmeleri, okuma/yazma hataları (bad sector) ve süreleri ile diskin iç sıcaklığı gibi birçok parametreyi sürekli izler ve kendi dahili belleğine kaydeder. Bilgisayarın işletim sisteminden bağımsızdır, çeşitli araçlar ile sorgulanabilir ve komut verilebilir.</p>



<p>Diskteki herhangi bir sorun henüz işletim sistemine yansımamış olsa bile S.M.A.R.T&#8217;ın sürekli olarak izlediği ve belleğinde tuttuğu kayıtlar (log&#8217;lar) diskin genel kondisyonunu hakkında değerli bilgiler elde etmek için kullanılabilir. Dilediğiniz zaman diskin kondisyon durumunu öğrenmek için disk üzerinde çeşitli testlerin çalıştırılmasını ve raporlanmasını sağlayabilir mevcut günlük kayıtlarını okuyabilirsiniz.&nbsp; Eski ya da yıpranmış olduğunu düşündüğüğünüz veya ikinci el olarak satın aldığınız bir sabit diskin SMART verilerini incelemek verilerinizin ne kadar güvenli bir ortamda tutulacağını tahmin etmek açısından da çok kıymetlidir. Her nekadar S.M.A.R.T önemli veriler sağlıyor olsa da SMART tarafından bir raporun bildirilmemiş olması diskin çalışmasını engelleyen donanımsal bir hatayla her an karşılaşmayacağız anlamını da gelmez. S.M.A.R.T’ın sunduğu veriler böyle bir garanti sağlamaz.</p>



<p>&nbsp;Diskin S.M.A.R.T verilerini sorgulamak ve raporlamak için kullanacağımız araç smartmontools&nbsp;adlı paket içerisinde yer almaktadır. Paketi aşağıdaki gibi yükledikten sonra smartctl aracına &#8211;scan seçeneğini ekleyerek sisteme bağlı tüm S.M.A.R.T destekli disklerin listelenmesini sağlayalım.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo apt update

pi@raspberry:~ $ sudo apt install smartmontools

pi@raspberry:~ $ sudo smartctl --scan

/dev/sda -d usbsunplus # /dev/sda &#91;USB Sunplus], ATA</pre>



<p>smartctl diskin genel sağlık durumunu görüntülemek için -H (health) seçeneğine sahiptir. 24 saat içinde arızalanma ihtimali olan bir diskte sınama sonucu FAILED olarak raporlanır. -H seçeneği SMART tarafından tutulan disk seçeneklerini ve günlükleri kullanarak tahmini bir sağlık raporu verir.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo smartctl -H /dev/sda

smartctl 6.6 2016-05-31 r4324 &#91;armv7l-linux-4.9.80-v7+] (local build)

Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===

SMART overall-health self-assessment test result: PASSED</pre>



<p>Eğer bu sınama başarısız (FAIL) olarak sonuçlandıysa disk hâlihazırda arızalıdır veya kısa bir zaman içerisinde arızalanacak demektir. Bu durumda diskteki verilerin acilen yedeklenmesi gereklidir.</p>



<p>Diskin mevcut durumu hakkında daha detaylı bilgiler elde etmek ve SMART&#8217;ın tuttuğu günlükleri görüntülemek için -a (all) seçeneği kullanılabilir. -a seçeneğinin listelediği bilgiler arasında diskin desteklediği yetenekler (capabilities), disk sağlığını takip etmek için kullandığı öznitelikler (attributes) ve firmware yazılımının (SMART) disk taramaları sırasında karşılaştığı sorunlara ait günlükler yer alır. Bu bilgiler ışığında ileride arızalanma riski olan diskleri teşhis etmek mümkün olabilir.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo smartctl -a /dev/sda

smartctl 6.6 2016-05-31 r4324 &#91;armv7l-linux-4.9.80-v7+] (local build)

Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===

Device Model:&nbsp;&nbsp;&nbsp;&nbsp; TOSHIBA MK3276GSX -63

Serial Number:&nbsp;&nbsp;&nbsp; X1RGS31LS

LU WWN Device Id: 5 000039 395d88b2d

Firmware Version: GS101X

User Capacity:&nbsp;&nbsp;&nbsp; 320,072,933,376 bytes &#91;320 GB]

Sector Size:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 512 bytes logical/physical

Rotation Rate:&nbsp;&nbsp;&nbsp; 5400 rpm

Form Factor:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.5 inches

Device is:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Not in smartctl database &#91;for details use: -P showall]

ATA Version is:&nbsp;&nbsp; ATA8-ACS (minor revision not indicated)

SATA Version is:&nbsp; SATA 2.6, 3.0 Gb/s (current: 1.5 Gb/s)

Local Time is:&nbsp;&nbsp;&nbsp; Sat Sep 29 08:51:35 2018 UTC

SMART support is: Available - device has SMART capability.

SMART support is: Enabled

&#91;...]

Error 2 occurred at disk power-on lifetime: 175 hours (7 days + 7 hours)

&nbsp; When the command that caused the error occurred, the device was active or idle.

&nbsp; After command completion occurred, registers were:

&nbsp; ER ST SC SN CL CH DH

&nbsp; -- -- -- -- -- -- --

&nbsp; 84 51 01 c7 2b 1e 40&nbsp; Error: ICRC, ABRT 1 sectors at LBA = 0x001e2bc7 = 1977287

Error 1 occurred at disk power-on lifetime: 113 hours (4 days + 17 hours)

&nbsp; When the command that caused the error occurred, the device was active or idle.

&nbsp; After command completion occurred, registers were:

&nbsp; ER ST SC SN CL CH DH

&nbsp; -- -- -- -- -- -- --

&nbsp; 84 51 01 1c a2 74 62&nbsp; Error: ICRC, ABRT 1 sectors at LBA = 0x0274a21c = 41198108

&#91;...]</pre>



<p>Yukarıdaki SMART çıktısı uzunluğu nedeniyle kırpılmıştır ve devam eden paragraflarda ayrı olarak açıklanmıştır. Çıktıda cihazın genel bilgileri (-i seçeneği ile de listelenebilir) yanında, aynı türden iki hata ile karşılaşıldığı ve ilk hatanın 133 saatlik kesintisiz çalışma sırasında CRC&nbsp;kontrol değerinin teyit edilememesinden kaynaklandığı raporlanmıştır. Uzun süreli çalışmaya bağlı olarak ısınan disklerde bu tarz veri bozulmaları olabilir. Yine de badblocks ile yazma/okuma taraması ya da ileriki başlıklarda anlatıldığı gibi SMART taramalarını gerçekleştirmekte fayda vardır. -a seçeneğini kullanarak SMART bilgilerini listelemek istediğinizde aşağıdaki gibi bir mesajla karşılaşıyorsanız diskin SMART programı devre dışı bırakılmış demektir (-s off ile devre dışı bırakılabilir). Bir disk açısından bu hiç de iyi bir şey değildir.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">SMART Disabled. Use option -s with argument 'on' to enable it.

Diskin SMART programını tekrar çalışır duruma getirmek için -s on seçeneğini verebilirsiniz.

pi@raspberry:~ $ sudo smartctl -s on /dev/sda</pre>



<p>smartctl&#8217;in -x seçeneği, tüm standart SMART bilgileri yanında disk üreticisinin o modele özgü tanımladığı sınama seçeneklerini ve sonuçlarını da listeler. Üreticiye özel seçenekler içinde diskin karşılaştığı en yüksek sıcaklık (Max Temperature), diskin çalışma saati (Power On Hours), plaka dönüş başlatma denemesi sayısı (Spin_Retry_Count) gibi teknik veriler yer alır.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo smartctl -x /dev/sda</pre>



<h4 class="wp-block-heading">diskin SMART yeteneklerini ve özniteliklerini listelemek</h4>



<p>smartctl aracı hem standart hem de disk üreticisine özel SMART yeteneklerini ve özniteliklerini listelemek için &#8211;capabilities ve &#8211;attributes seçeneklerine sahiptir. &#8211;capabilities seçeneği ile disk üzerinde çalıştırılabilecek test rutinleri ve tahmini tamamlanma süreleri ve diğer üretici tanımlı işlevler hakkında gerçekleştirilebilecek yetenekler listelenir. attributes ile de SMART tarafından takip edilen disk özniteliklerinin değerleri listelenir. Bu değerler diskin ömrü ve mevcut kondisyon durumu hakkında önceden bilgi sağlayabilir. Disk yeteneklerini listelemek için aşağıdaki komut çalıştırılabilir:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo smartctl --capabilities /dev/sda</pre>



<p>Komut listelediği belli başlı işlevler şunlardır:</p>



<ul class="wp-block-list">
<li><strong>Self-test execution status</strong><strong>:</strong> Hâlihazırda devam eden bir SMART sınaması varsa işlemin kalan yüzdesini gösterir. Eğer yoksa tarama sonucunda karşılaşılan hatalar bu satırda listelenir.</li>



<li><strong>Offline data collection status</strong><strong>:</strong> Offline kısa taramanın etkileştirilip etkinleştirilmediğini,&nbsp; etkinleştirilmiş ise diskin SMART yazılımının 4 saatte bir gerçekleştirdiği tarama sonuçlarını görüntüler.</li>



<li><strong>Short self-test routine recommended polling time:</strong> Bir short sınamasının tahmini olarak ne kadar sürede tamamlanacağını dakika cinsinden haber verir.</li>



<li><strong>Extended self-test routine recommended polling time:</strong> long (extended) disk sınamasının tahmini olarak ne kadar sürede tamamlanacağını dakika cinsinden haber verir.</li>



<li><strong>Error logging capability</strong><strong>:</strong> Sınamalar sırasında tespit edilen disk hatalarının disk mikrodenetleyici belleğinde kayıt altına alınıp alınamayacağını belirtir. Başka bir ifadeyle kayıt altına alma özelliğinin desteklenip desteklenmediğini belirtir.</li>



<li><strong>Offline data collection</strong><strong>&nbsp;capabilities:</strong> Diskin SMART yazılımının ne tür işlevlerini desteklediğini görüntüler. Bunlar arasında, arka planda otomatik veri toplama ve disk yüzeyi taraması gibi işlevler yer alır.</li>
</ul>



<p>Diskin smart yazılımının takip ettiği öznitelikleri<a href="#_ftn2" id="_ftnref2">[2]</a> (attributes) listelemek için aşağıdaki komut çalıştırılabilir:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo smartctl --attributes /dev/sda

smartctl 6.6 2016-05-31 r4324 &#91;armv7l-linux-4.9.80-v7+] (local build)

Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF READ SMART DATA SECTION ===

SMART Attributes Data Structure revision number: 16

Vendor Specific SMART Attributes with Thresholds:

ID# ATTRIBUTE_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VALUE WORST THRESH TYPE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UPDATED&nbsp; RAW_VALUE

&nbsp; 1 Raw_Read_Error_Rate&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp; 099&nbsp;&nbsp; 050&nbsp;&nbsp;&nbsp; Pre-fail&nbsp; Always&nbsp;&nbsp; 0

&nbsp; 2 Throughput_Performance&nbsp; 100&nbsp;&nbsp; 100&nbsp;&nbsp; 050&nbsp;&nbsp;&nbsp; Pre-fail&nbsp; Offline&nbsp; 0

&nbsp; 3 Spin_Up_Time&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp; 100&nbsp;&nbsp; 001&nbsp;&nbsp;&nbsp; Pre-fail&nbsp; Always&nbsp;&nbsp; 1387

&nbsp; 4 Start_Stop_Count&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp; 100&nbsp;&nbsp; 000&nbsp;&nbsp;&nbsp; Old_age&nbsp;&nbsp; Always&nbsp;&nbsp; 297

&nbsp; 5 Reallocated_Sector_Ct&nbsp;&nbsp; 100&nbsp;&nbsp; 100&nbsp;&nbsp; 050&nbsp;&nbsp;&nbsp; Pre-fail&nbsp; Always&nbsp;&nbsp; 0

&nbsp; 7 Seek_Error_Rate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100&nbsp;&nbsp; 100&nbsp;&nbsp; 050&nbsp;&nbsp;&nbsp; Pre-fail&nbsp; Always&nbsp;&nbsp; 0

&nbsp; 8 Seek_Time_Performance&nbsp;&nbsp; 100&nbsp;&nbsp; 100&nbsp;&nbsp; 050&nbsp;&nbsp;&nbsp; Pre-fail&nbsp; Offline&nbsp; 0

&#91;...]</pre>



<p>Attributes listesinde her bir öznitelik için sunulan sütunların anlamları şunlardır:</p>



<ul class="wp-block-list">
<li><strong>ID:</strong> Özniteliğin kimlik numarasıdır. Çeşitli program çıktılarında veya üretici dokümanlarında sunulan öznitelikleri karşılaştırmak için kimlik numarasını kullanmak daha doğrudur. Örneğin farklı isimler ile ifade edilen öznitelikler aynı kimlik numarasına sahip olabilir. Bu gibi durumlarda aynı SMART özniteliğinden bahsediliyor demektir.</li>



<li><strong>ATTRIBUTE_NAME</strong><strong>:</strong> Smart özniteliğinin adıdır.</li>



<li><strong>VALUE:</strong> Özniteliğin normalleştirilmiş değeridir. Normalleştirmeden kasıt her üreticinin kendi disk teknoloji ve üretim kalite standartlarını dikkate alarak belirlediği değerleri farklı üreticilerinkiler ile kıyaslayabilmek için sabit bir aralık ile eşleştirmesidir. Buna ölçüm değerlerinin normalleştirilmesi adı verilir. &nbsp;Bu sütunun değer aralığı çoğunlukla 0-100 aralığında olmakla beraber bazı öznitelikler için 0-255 aralığında da olabilir. Diğer taraftan, üreticiler arasında ham (RAW) değerlerin normalleştirilmesi konusunda da ortak bir standart yoktur. Normalleştirme işlemi doğrusal olabileceği gibi üstel ya da logaritmik de yapılmış olabilir. Yüksek değerler (bazı üreticilerin sıcaklık özellikleri hariç) her zaman daha iyi sonuçları ifade eder. Normalleştirilmiş olan bu değerler üreticinin ilgili diskin öznitelikleri için belirlediği ve uzun süreli kullanım koşullarında test ederek ulaştığı referans değerleri baz alır. Bu nedenle her üreticinin aynı öznitelik için belirlediği ham değer aynı olmayacaktır. Aynı olmayan bu değerleri karşılaştırabilmek için normalleştirilmeleri gerekir. Örneğin bir disk üreticisi yeniden ayrılan 1000 sektör için 10 normalleştirilmiş değerini sunabilirken bir diğer üretici 15 değerini sunabilir. Bu yaklaşım diğer normalleştirilmiş öznitelikler için de geçerlidir. TYPE sütununda Pre-fail yazan bir özniteliğin normalleştirilmiş değeri (VALUE), THRES&#8217;dan küçük veya eşit ise bu bir sorun olduğuna ve diskin ileride arızalanacağına işaret eder. Yine VALUE değerinin THRES’dan küçük olduğu durumlarda TYPE sütununda Old_age varsa, diskin üreticinin öngördüğü oranda yıpranmış olduğu anlaşılır ve bu da çoğu zaman bir soruna işaret etmez.</li>



<li><strong>WHEN_FAILED</strong><strong>:</strong> Bir arızanın kesin olarak var olup olmadığını belirtir. Kesinleşmiş bir sorun var ise bu sütunda FAILING_NOW ifadesi görüntülenir. Sütunda değer olarak &#8220;-&#8221; işareti varsa ilgili özniteliğin soruna işaret etmediği, daha önce de bu öznitelikle ilgili bir sorunla karşılaşılmadığı anlamı çıkar. Eğer WORST değeri THRES&#8217;den küçük veya eşitse, bu sütunda &#8220;in_the_past&#8221; bilgisi görüntülenerek, ilgili sorunla geçmişte en az bir kez karşılaşıldığı belirtilir.</li>



<li><strong>WORST</strong><strong>:</strong> VALUE sütununda olduğu gibi normalleştirilmiş bir değerdir ve değerini yansıttığı özniteliğin SMART programının çalıştığı süre içinde karşılaştığı en kötü durumunu ifade eder.</li>



<li><strong>THRESH</strong><strong>:</strong> Eşik değeri de (Threshold) normalleştirilmiş bir değerdir ve iyi durum ile kötü durum arasındaki sınır değeri ifade eder. VALUE değeri THRES değerinden ne kadar büyükse ilgili öznitelik açısından diskin durumu o kadar iyi demektir. VALUE, THRES&#8217;ın altına düşerse sorunlar baş göstermeye başlayacak demektir. Tam bir sonuca varabilmek için VALUE, TYPE ve WHEN_FAILED sütunlarını birlikte yorumlamak gerekir.</li>



<li><strong>TYPE:</strong> Özniteliğin türünü ifade eder. Aşınma ve yıpranma miktarını öngören öznitelikler de Old-age (yaşlı-yıpranma), yaklaşan olası bir arızayı göstermek için de Pre-fail (ön-hata) değeri kullanılır. Pre-fail öznitelikleri, üretici tarafından öngörülen disk ömrünü takip etmek için kullanılır. Pre-fail tek başına diskin arızalı olduğu anlamını taşımaz, bunun için ilgili özniteliğin VALUE değerinin THRES&#8217;den küçük veya eşit olması gerekir.</li>



<li><strong>RAW_VALUE:</strong> Değerin normalleştirilmemiş ham halidir ve çoğu durumda bir karara varmak için kullanılabilecek bir değer sunmaz. Bunun nedeni, diskin sağlığı konusunda karara varmak için her diskin fiziksel dayanıklılık özelliklerine göre değişen eşiklere sahip olmasıdır.</li>
</ul>



<p>Komutun çıktısında listelenen SMART özniteliklerinden en önemlileri ve kodları şöyledir:</p>



<ul class="wp-block-list">
<li><strong>Raw Read Error Rate (1):</strong> Diskin içinde bulunduğu enerji oturumunda (son enerjilenmesinden bu yana) karşılaştığı okuma hatalarının sayısını tutar. Bu hatalar CRC kontrol bilgisi ile sağlama yapılamadığında oluşur.</li>



<li><strong>Spin Up Time</strong><strong>&nbsp;(3)</strong>: Disk plakasının tam devir hızına ulaşması için geçen süreyi verir. Milisaniye veya saniye cinsinden olabilir.</li>



<li><strong>Reallocated Sectors Count</strong><strong>&nbsp;(5):</strong> Okunamayıp (bad sector) diskin servis alanındaki yedek sektör ile ilişkilendirilmesi yapılan sektörlerin sayısı.</li>



<li><strong>Power On Hours</strong><strong>&nbsp;(9):</strong> Diskin toplam çalışma süresini saat olarak verir. 9 numaralı bu SMART özniteliği, bazı marka disklerde dakika ve saniye cinsinden de tutulabilir.</li>



<li><strong>Spin Retry Count</strong><strong>&nbsp;(10):</strong> Diskin olağan dönüş devir hızına ulaştırmak için fazladan gerçekleştirilen deneme sayısı. Bu deneme sayısı mekanik sorunlara işaret edebilir.</li>



<li><strong>G-Sense Error Rate</strong><strong>&nbsp;(191):</strong> Disk kartının üzerinde yer alan G-Sensörünün kaydettiği harici şok ve titreşimlerin sayısını takip eden özniteliktir.</li>



<li><strong>Power-Off Retract Count</strong><strong>&nbsp;(192):</strong> Diskin kapalı duruma geçme sayısını tutar <em>Power Cycle Count</em> ile beraber değerlendirildiğinde iki değerin eşit ya da yakın olması beklenir.</li>



<li><strong>Load/Unload Cycle Count</strong><strong>&nbsp;(193)</strong>: Okuma/yazma kafasının kaç kez park konumuna geçtiğini söyler. Özellikle 2.5 inçlik taşınabilir sabit diskler, bir sarsıntı anında kafanın disk yüzeyine çarpmaması ve enerji tasarrufu için sıklıkla park konumuna geçerler. Sıklıkla park konumuna geçmek genel disk başarımını düşürür. Disk üreticileri bu özelliği özelleştirmek için araçlar veya firmware’ler yayınlayabilir.</li>



<li><strong>Hardware ECC Recovered</strong><strong>&nbsp;(195)</strong>: Donanımsal hata düzeltme sayısı diskin elektro-mekanik sorunlarına işaret edebilir.</li>



<li><strong>Reallocation Event Count</strong><strong>&nbsp;(196):</strong> Başarılı ve başarısız şekilde yeniden ayrılan bozuk sektörlerin miktarını ifade eden özniteliktir.</li>



<li><strong>Current Pending Sector Count</strong><strong>&nbsp;(197):</strong> Yeniden ayrılmak için bekleyen bozuk sektörlerin miktarını ifade eden özniteliktir.</li>



<li><strong>Offline Uncorrectable</strong><strong>&nbsp;(198):</strong> Hatalı ve düzeltilemeyen sektör okuma yazma işlemlerinin miktarını ifade eder.</li>



<li><strong>Disk_Shift</strong><strong>&nbsp;(220):</strong> Okuma/yazma kafasının konumunu referans alarak disk plakasının dönme merkezinden kayıp kaymadığını takip eden özniteliktir. Plakanın dönme merkezinden kayması, disk mekanik bir şok aldığında veya aşırı ısındığında gerçekleşebilir.</li>



<li><strong>Load-in Time</strong><strong>&nbsp;(226):</strong> Okuma/yazma kafasının park konumundan disk üzerindeki konumuna geçiş süresini sağlar. Uzun değerler mekanik bir soruna işaret edebilir.</li>
</ul>



<p>Smart öznitelikleri okunurken her zaman normalleştirilmiş değerler dikkate alınmalıdır. Ham (RAW) değerler, disk hakkında doğru karar vermek için yeterli olmayabilir. Çünkü her üreticinin kullandığı teknoloji ve üretim standardına göre belirlediği aralıklar değişkenlik gösterir.</p>



<h4 class="wp-block-heading">offline sınama gerçekleştirmek</h4>



<p>Sabit disk işletim sistemi tarafından kullanılmadığı anlarda disk hasarlarına karşı kendi kendini otomatik olarak tarayarak kendi sağlığı hakkında veri toplayabilir. Bu veri toplama ve tarama işlemine offline sınama adı verilir. SMART uyumlu disklerde offline taramaya kısa (short) tarama adı da verilir. Kısa (short) veri toplama ya da tarama işi, diskin meşgul olmadığı zamanlarda 4 saatte bir gerçekleştirilir. Diskin bu tarama işlemini ne kadar sürede tamamlayabileceği ve offline sınama kapsamında tarayabileceği disk seçenekleri listelemek için -c (calculate) seçeneğini kullanabiliriz:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo smartctl -c /dev/sda</pre>



<p>Yukarıdaki komutun ekran çıktısında Short test ve Extended self test sütunlarında, sınamaların tahmini tamamlanma suresi yazar.</p>



<p>Diskin uygun olduğu zamanlarda (offline) kısa taramayı kendi kendine düzenli olarak gerçekleştirmesi için -o (offline) seçeneğini aşağıdaki gibi kullanabilirsiniz:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo smartctl -o on /dev/sda

smartctl 6.6 2016-05-31 r4324 &#91;armv7l-linux-4.9.80-v7+] (local build)

Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF ENABLE/DISABLE COMMANDS SECTION ===

SMART Enable Automatic Offline failed: scsi error unsupported scsi opcode

En son tarama sonuçlarını ise aşağıdaki gibi listeletebilirsiniz:

pi@raspberry:~ $ sudo smartctl -l selftest /dev/sda

=== START OF READ SMART DATA SECTION ===

SMART Self-test log structure revision number 1

Num&nbsp; Test_Description&nbsp;&nbsp;&nbsp; Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remaining&nbsp; LifeTime(hours)&nbsp; LBA_of_first_error

# 1&nbsp; Short offline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Completed without error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -

# 2&nbsp; Short offline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Completed without error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -

# 3&nbsp; Short offline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Completed without error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 193&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -

# 4&nbsp; Short offline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Completed without error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 184&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -</pre>



<p>Yukarıdaki ekran çıktısında, diskte gerçekleştirilen shorf offline taramalarının sonuç kaydı yeniden eskiye doğru listelenmiştir. Bu kayıtlara göre tüm sınamalar hatasız olarak tamamlanmıştır. Daha kapsamlı bir tarama için long taraması gerçekleştirebilirsiniz.</p>



<h4 class="wp-block-heading">short sınaması gerçekleştirmek</h4>



<p>Kısa (short) ya da selftest&nbsp;adı verilen taramayı -t short seçeneği ile istediğiniz zaman başlatabilirsiniz. Tarama, diskin firmware yazılımına gönderilecek bir komut ile başlatılacak ve -c çıktısında belirtilen sürede tamamlanacaktır.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo smartctl -t short /dev/sda</pre>



<p>Bu tarama sorunlu diskleri hızlı bir şekilde tespit etmek için kullanışlıdır ve temel olarak 3 aşamada hızlı bir tarama gerçekleştirir.</p>



<ul class="wp-block-list">
<li><strong>1. Elektriksel özellikler:</strong> Diskin üzerindeki mikrodenetleyici kapsamı daha çok üretici tarafından belirlenen elektronik bileşenleri sınar. Bunlar arasında diskin üzerindeki tampon bellek (RAM), okuma/yazma devreleri ve okuma/yazma kafasını kontrol eden elektronik devreler sayılabilir. Bu aşamada gerçekleştirilen sınamalar üreticinin disk tasarımına dâhil ettiği sınama özelliklerini kapsadığı için çok daha fazla olabilir.</li>



<li><strong>2. Mekanik özellikler:</strong> Diskin okuma/yazma kafasının konumlanma başarımı ve disk dönüş hızı gibi tamamen üreticiye özel sınamaların gerçekleştirildiği aşamadır.</li>



<li><strong>3. Okuma ve doğrulama:</strong> Disk üreticisi tarafından ayrılan bir disk alanından okuma yaparak okuduğu veriyi doğrular. Bu doğrulama diskin kullanıcı verilerinin saklandığı alanında yapılmaz.</li>
</ul>



<p>Short sınamasının tamamlanma yüzdesini ve geçmiş offline tarama sonuçlarını, sudo smartctl -a /dev/sda çıktısında &#8220;Self-test execution status: &#8221; satırında görebilirsiniz. Mevcut taramayı iptal etmek için -X seçeneğini kullanabilirsiniz. En son tarama sonuçlarını ise önceki başlıkta olduğu gibi -l selftest seçeneği ile listeletebilirsiniz:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo smartctl -l selftest /dev/sda

=== START OF READ SMART DATA SECTION ===

SMART Self-test log structure revision number 1

Num&nbsp; Test_Description&nbsp;&nbsp;&nbsp; Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remaining&nbsp; LifeTime(hours)&nbsp; LBA_of_first_error

# 1&nbsp; Extended offline&nbsp;&nbsp;&nbsp; Completed: read failure&nbsp;&nbsp; 90%&nbsp;&nbsp;&nbsp;&nbsp; 19675&nbsp;&nbsp;&nbsp; 69299

# 2&nbsp; Short offline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Completed: read failure&nbsp;&nbsp; 90%&nbsp;&nbsp;&nbsp;&nbsp; 18675&nbsp;&nbsp;&nbsp; 52526

# 3&nbsp; Short offline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Completed: read failure&nbsp;&nbsp; 90%&nbsp;&nbsp;&nbsp;&nbsp; 16601&nbsp;&nbsp;&nbsp; 48525

# 4&nbsp; Short offline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Completed without error&nbsp;&nbsp; 00%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5505&nbsp;&nbsp;&nbsp; -</pre>



<p>Yukarıdaki örnek SMART günlük kaydında disk çalışma zamanının 5505. dakikasında gerçekleştirilen kısa tarama başarıyla tamamlanmış; fakat 16601. dakikasında gerçekleştirilen taramada 48525. sektörde okuma hatası tespit edilmiştir. Disk firmware&#8217;i okuma hatası olan sektörleri yeniden ayrılmak üzere işaretler. Bunu 18675. dakikada gerçekleştirilen taramada 48525. sektörden sonra gelen 52526. sektörde tespit edilen okuma hatasından anlıyoruz. Benzer şekilde, bu sektör de bad sector olarak işaretlenmiştir ve daha sonra diskin sağlam bir alanı (spare area) ile ilişkilendirilmiştir. Ancak disk 19675. dakikada gerçekleştirilen long (extended) sınamasından 69299. sektördeki okuma hatası nedeniyle başarıyla geçememiştir. Uzun kullanım süresine sahip disklerde bu tarz sektör bozulmaları olması olağandır. Bu diskin kullanılmaması gerektiğine tam olarak karar vermek için SMART özelliklerinin (attributes) değerleri yorumlanmalı ve belli aralıklarla short ve long taramaları gerçekleştirilmelidir.</p>



<p>Bozuk sektör olarak işaretlenen alanların diskin servis alanı da adı verilen yedek sektörler ile ilişkilendirilmesi gerekir. Bu yapıldığında diski kullanan yazılım/işletim sistemi bozuk sektörlere aynı sektör adresini kullanarak erişebilir. Bozuk sektörlerin sağlam sektörler ile eşleştirme işlemi disk donanımı tarafından fiziksel olarak gerçekleştirilir ve ilgili eşleştirme tablosu yeni diskin servis alanı olarak ayrılmış kısmında saklanır. Okuma hatası nedeniyle işaretlenen bir sektörün yedek sektör (servis alanında bu amaçla ayrılmış boş sektörler) ile eşleştirilmesi ilk yazma işlemi sırasında gerçekleştirilir. Bu yazma işlemini 19675. sektör için elle gerçekleştirmek isterseniz dd aracından faydalanabilirsiniz. Aşağıdaki komut /dev/sda aygıtının 19675. Sektörünü okuyarak yine aynı sektöre yazmaktadır:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo blockdev --getbsz /dev/sda

4096

pi@raspberry:~ $ sudo dd if=/dev/sda of=/dev/sda bs=4096 count=1 seek=69299 conv=noerror,sync

1+0 records in

1+0 records out

4096 bytes (4.1 kB, 4.0 KiB) copied, 0.000887961 s, 4.6 MB/s</pre>



<p>İlk komut ile dosya sisteminin kullandığı blok boyutu (cluster&nbsp;boyutu) öğrenilerek dd&nbsp;komutunun block size (bs) seçeneğini geçilmiştir. Komut çalıştıktan sonra kopyalamanın başarıyla gerçekleştiği gözükmektedir. Bu işlemden sonra smartctl aracının -A ile listelenen SMART özellikleri listesindeki Current Pending Sector Count değeri 1 azalarak Reallocated Sectors Count değeri 1 artmıştır.</p>



<h4 class="wp-block-heading">long (extended) sınaması gerçekleştirmek</h4>



<p>Uzun (long) SMART taraması diskin tüm sektörlerini tarayarak, diskin sağlık durumu hakkında daha kesin bir bilgi sunar. Bu bilgiyi short taramasının sonuçlarını doğrulamak için kullanmak akıllıcadır. Bu sınamanın süresi diskin kapasitesine göre değişir. Raspberry Pi takılan harici diskleri otomatik olarak bağladığı için taramaya başlamadan önce ayırmak faydalı olur:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo umount /dev/sda1

Taramayı başlatmak için aşağıdaki komutu çalıştırabilirsiniz:

pi@raspberry:~ $ sudo smartctl -t long /dev/sda

Testing has begun.

Please wait 98 minutes for test to complete.

Test will complete after Fri Oct 12 12:46:47 2018

Use smartctl -X to abort test.

Bu taramanın tamamlanma yüzdesi ve sonuçları smartctl -a çıktısından görülebilir.

pi@raspberry:~ $ sudo smartctl -a /dev/sda

=== START OF READ SMART DATA SECTION ===

SMART overall-health self-assessment test result: PASSED

General SMART Values:

&#91;...]

Self-test execution status:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( 249) Self-test routine in progress...

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;90% of test remaining.

SMART Self-test log structure revision number 1

Num&nbsp; Test_Description&nbsp;&nbsp;&nbsp; Status&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Remaining&nbsp; LifeTime(hours)&nbsp; LBA_of_first_error

# 1&nbsp; Extended offline&nbsp;&nbsp;&nbsp; Aborted by host&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 70%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 216&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;-

# 2&nbsp; Extended offline&nbsp;&nbsp;&nbsp; Aborted by host&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 60%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 215&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -

# 3&nbsp; Short offline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Completed without error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -

# 4&nbsp; Short offline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Completed without error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 214&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -

# 5&nbsp; Short offline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Completed without error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 193&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -

# 6&nbsp; Short offline&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Completed without error&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00%&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 184&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -</pre>



<p>Yukarıdaki ekran çıktısında taramanın devam ettiği ve %10&#8217;unun tamamlandığı (90% remaining) ve daha önce bitirilen testlerden son ikisinin -X seçeneği ile kullanıcı tarafından sonlandırıldığı yazmaktadır.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>Veri Kablosu ve Güç Besleme Adaptörüne Dikkat !</strong></p>



<p>Smartctl aracı, işletim sisteminden bağımsız olarak diskin kendi firmware aracılığıyla diskin kendi içinde taramalar çalıştırmasını sağlar. Yani diskin kendi kendini denetlemesi için komutlar gönderir, diskin mikrodenetleyicisinde çalışan S.M.A.R.T programı da ilgili tarama prosedürlerini başlatır ve çıktılarını dahili belleğine kaydeder. Disk kendi kendinde bir hata tespit edemediği halde diskten okuma/yazma hataları alabilirsiniz.. Böyle durumlarda sorunu diskin dışındaki bileşenlerde aramak gerekir.</p>
</blockquote>



<p>Harici olarak olarak bağlanan disklerde sık karşılaşılan sorunlar arasında USB kablolar başta gelir. Kablo konnektörünün yıpranmış ya da korozyona uğramış olması, kullanılan USB portların temas sorunları ve veri kablosunun iletkenlerinin yeterince kalın olmaması veya kopmuş olması gibi kablo kaynaklı sorunlardan bahsedilebilir. Diğer sık karşılaşılan sorun ise diskin besleme adaptörü ile ilgilidir. Besleme adaptörleri şehir şebekesi (~220v) gerilimini harici diskin çalışabileceği D.C gerilime (9-12v) çevirirerek regüle ederler. Bu çevirme işlemi disk çalıştığı sürece devam eder ve diske okuma/yazma gerçekleştirildiği sırada daha fazla akım ihtiyacı olacağından normalde çalıştığından daha zor koşullarda regülasyon yapar. DC adaptörlerin tamamında kullanılmakta olan elektrolitik kondansatörler ömürlü bileşenlerdir ve yıllar içerisinden özelliğini yitirerek görevini iyi yapamaz duruma gelebilirler. Diskin manyetik malzemesinde sorun olmamasına rağmen yıpranmış bir adaptör karşılanamayan akım ihtiyacından ötürü okuma/yazma işlemleri sırasında başarısızlığa neden olabilir. Diskinizi sağlam ve kaliteli birer kablo ve adaptör ile test etmeniz bu tür sorunları teşhis etmenizi sağlayabilir.</p>



<h4 class="wp-block-heading">grafik ortamda smart taraması gerçekleştirmek</h4>



<p>Eğer grafik masaüstü kurulumuna sahipseniz smartctl&nbsp;aracının görsel versiyonu olan GSmartControl&nbsp;programını da kullanabilirsiniz. Program komut satırı aracı olan smartctl ile gerçekleştirilebilen hemen tüm temel işlevleri yerine getirebilen görsel bir arayüze sahiptir. Programı kurmak için önce paket listesini güncelleyelim:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ sudo apt update

pi@raspberry:~ $ sudo apt install gsmartcontrol -y

Programı çalıştırmak için grafik ortamda bir terminal penceresi açarak aşağıdaki komutu verin:

pi@raspberry:~ $ sudo gsmartcontrol</pre>



<p>Programın ekran görüntüsü aşağıdaki gibidir. Identy sekmesinde sabit diskin marka/model bilgileri, Attributes sekmesinde firmware tarafından disk içinde izlemesi gerçekleştirilen teknik özellikler, Capabilites sekmesinde diskin donanımsal ve yazılımsal özellikleri listelenir. Error Log sekmesinde taramalar sırasında oluşan hataların detaylı bir listesi yer alır. Self-test Logs sekmesinde offline veya kullanıcı tarafından başlatılan sınamaların sonuçları listelenir. Perform Tests sekmesinde kısa (short) ve gelişmiş (extended/long) taramaları başlatmak için komut listesi yer alır.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="864" height="639" src="https://www.tankado.com/assets/2023/12/1-28.png" alt="" class="wp-image-8919"/></figure>



<p><br>GSmartControl programınn Self-Tests sekmesi</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><a href="#_ftnref1" id="_ftn1">[1]</a> S.M.A.R.T &#8211; https://www.tankado.com/s-m-a-r-t-teknolojisi-ne-anlama-geliyor/</p>



<p><a href="#_ftnref2" id="_ftn2">[2]</a> SMART özellik listesi: http://tiny.cc/smart_properties</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.tankado.com/disklerde-hata-taramasi-gerceklestirmek/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Dosya Sistemi Hatalarının Açılışta Otomatik Onarılmasını Sağlamak</title>
		<link>https://www.tankado.com/dosya-sistemi-hatalarinin-acilista-otomatik-onarilmasini-saglamak/</link>
					<comments>https://www.tankado.com/dosya-sistemi-hatalarinin-acilista-otomatik-onarilmasini-saglamak/#respond</comments>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 09:54:01 +0000</pubDate>
				<category><![CDATA[Sorun Gidermek]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=8916</guid>

					<description><![CDATA[Raspberry Pi’ın kullandığı dosya sistemi ani elektrik kesintileri veya sistem kilitlenmeleri nedeniyle zarar görebilir. Bunun için Raspberry Pi’ın her açılışında muhtemel dosya sistemi hatalarını otomatik olarak düzeltmek için bir seçenek vardır. Bu seçenek /etc/default/rcS&#160;dosyasında yer alan FSCKFIX&#160;seçeneğidir. Normalde No (hayır) olan bu ayarı Yes yaparak dosya sistemi hatalarının her açılışta otomatik olarak düzeltilmesini sağlayabilirsiniz. Bu &#8230; <a href="https://www.tankado.com/dosya-sistemi-hatalarinin-acilista-otomatik-onarilmasini-saglamak/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "Dosya Sistemi Hatalarının Açılışta Otomatik Onarılmasını Sağlamak"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Raspberry Pi’ın kullandığı dosya sistemi ani elektrik kesintileri veya sistem kilitlenmeleri nedeniyle zarar görebilir. Bunun için Raspberry Pi’ın her açılışında muhtemel dosya sistemi hatalarını otomatik olarak düzeltmek için bir seçenek vardır. Bu seçenek /etc/default/rcS&nbsp;dosyasında yer alan FSCKFIX&nbsp;seçeneğidir. Normalde No (hayır) olan bu ayarı Yes yaparak dosya sistemi hatalarının her açılışta otomatik olarak düzeltilmesini sağlayabilirsiniz. Bu işlem açılış süresini biraz daha uzatacaktır. Dosyayı root yetkisi ile düzenlemek için aşağıdaki komutu kullanabilirsiniz:</p>



<span id="more-8916"></span>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry ~ $ sudo nano /etc/default/rcS
#

# /etc/default/rcS

#

# Default settings for the scripts in /etc/rcS.d/

#

# For information about these variables see the rcS(5) manual page.

#

# This file belongs to the "initscripts" package.

# delete files in /tmp during boot older than x days.

# '0' means always, -1 or 'infinite' disables the feature

#TMPTIME=0

# spawn sulogin during boot, continue normal boot if not used in 30 seconds

#SULOGIN=no

# do not allow users to log in until the boot has completed

#DELAYLOGIN=no

# be more verbose during the boot process

#VERBOSE=no

# automatically repair filesystems with inconsistencies during boot

FSCKFIX=yes</pre>



<p>Dosyadaki diğer seçenekler ise şunlardır:</p>



<ul class="wp-block-list">
<li>TMPTIME: Geçici dosyaların saklandığı dizin olan /tmp’yi her açılışta temizler.</li>



<li>SULOGIN: Açılışta root komut satırı açar (kabuk) açar. Kullanılmadığında 30 saniye bekleyip açılış işlemine devam edilir.</li>



<li>DELAYLOGIN: Raspberry Pi’ın açılışı (boot) tamamlanana kadar kullanıcının login olmasına izin vermez.</li>



<li>VERBOSE: Açılış mesajlarının detaylı şekilde raporlanmasını sağlar. Raporları dmesg komutu ile görebilirsiniz.</li>
</ul>



<p>Açılışta dosya sistemi onarımın yapılmasını sağlamanın bir başka yolu da /boot/cmdline.txt&nbsp;dosyasına fsck.mode=force ve fsck.repair=yes seçeneklerini eklemektir. Bu sayede açılışta dosya sistemi taraması yapılacak ve olası tüm onarım sorularına otomatik olarak yes cevabı verilecektir. fsck.mode=force seçeneği gerekli olsun veya olmasın açılışta zorunlu olarak bir dosya sistemi taraması başlattığından açılışın biraz daha uzamasına neden olur. Bu ayar gerekli olmadığında kaldırılmalıdır.</p>



<p>Diğer taraftan, kök dizinde oluşturacağınız /forcefsck&nbsp;isimli bir dosya da aynı işi yapar. Açılışta bir dosya sistemi kontrolü ve taraması başlatır. Tarama gerçekleştirildikten sonra bu dosya silinir. Örneğin:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry ~ $ sudo touch /forcefsck</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.tankado.com/dosya-sistemi-hatalarinin-acilista-otomatik-onarilmasini-saglamak/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PCB Sınama Noktalarını Kullanmak</title>
		<link>https://www.tankado.com/pcb-sinama-noktalarini-kullanmak/</link>
					<comments>https://www.tankado.com/pcb-sinama-noktalarini-kullanmak/#respond</comments>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 09:52:27 +0000</pubDate>
				<category><![CDATA[Sorun Gidermek]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=8913</guid>

					<description><![CDATA[Raspberry Pi’ın elektronik baskı devre kartı (PCB) geliştirilirken, arızaların teknisyenler tarafından kolayca tespit edilebilmesi için PCB’nin alt yüzeyine çok sayıda sınama noktası (test pad) yerleştirilmiştir. Bir ölçü aleti (multimetre) direnç ve DC voltaj kademelerinde kullanılarak arızanın kaynağı hızlı bir şekilde bulunabilir. Raspberry Pi 3 devre kartının alt yüzeyinde yer alan bazı sınama noktaları (PPxx) aşağıdaki &#8230; <a href="https://www.tankado.com/pcb-sinama-noktalarini-kullanmak/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "PCB Sınama Noktalarını Kullanmak"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Raspberry Pi’ın elektronik baskı devre kartı (PCB) geliştirilirken, arızaların teknisyenler tarafından kolayca tespit edilebilmesi için PCB’nin alt yüzeyine çok sayıda sınama noktası (test pad) yerleştirilmiştir. Bir ölçü aleti (multimetre) direnç ve DC voltaj kademelerinde kullanılarak arızanın kaynağı hızlı bir şekilde bulunabilir. Raspberry Pi 3 devre kartının alt yüzeyinde yer alan bazı sınama noktaları (PPxx) aşağıdaki fotoğrafta gözükmektedir.</p>



<span id="more-8913"></span>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1024" height="689" src="https://www.tankado.com/assets/2023/12/1-27.png" alt="" class="wp-image-8914"/></figure>



<p><br>Raspberry Pi 3’ün alt katman (bottom copper) görünüşü</p>



<p>Aşağıda bir listesi yer alan sınama noktalarında ölçme yaparken, ölçü aletinin GND terminalinin Raspberry Pi’ın şasesine (header pin 6 veya konnektörlerin metal gövdesi) bağlı olduğu varsayılmıştır. Voltaj ölçümleri Raspberry Pi’a enerji bağlı ve çalışır halde iken, direnç ölçümleri ise Raspberry Pi’ın enerjisi bağlı olmadan gerçekleştirilmelidir.</p>



<ul class="wp-block-list">
<li><strong>P1-2</strong>: Vdd’dir. Micro-USB güç girişi doğrudan buraya bağlıdır. Ölçü aleti DCV kademesinde iken 5V göstermelidir.</li>



<li><strong>PP3-6</strong>: Şasedir. Ölçü aleti direnç kademesinde iken 0 ohm&nbsp; göstermelidir.</li>



<li><strong>PP7</strong>: Ölçü aleti DCV kademesinde iken 5V göstermelidir. Voltaj alınamadığı durumlarda PP35 voltaj sağlıyorsa U14 (BCM857BS) entegre devresi veya Q3 (DMG2305UX) diyotu arızalı demektir.</li>



<li><strong>PP8</strong>: Ölçü aleti DCV kademesinde iken 3.3V göstermelidir. Aksi takdirde 3.3v regülatörü veya sigortası arızalı demektir.</li>



<li><strong>PP9</strong>: Ölçü aleti DCV kademesinde iken 1.8V göstermelidir. Aksi takdirde 1.8v regülatörü veya sigortası arızalı demektir.</li>



<li><strong>PP10</strong>: Ölçü aleti DCV kademesinde iken 3.3V göstermelidir. Aksi takdirde güç kaynağı yeterli gücü sağlayamıyor demektir.</li>



<li><strong>PP13</strong>: Ölçü aleti DCV kademesinde ve ACT’ LED i aktif iken 2v pasif iken 3.3v göstermelidir.</li>



<li><strong>PP20</strong>: U9 etiketli RT9741CGV voltaj anahtarının çıkışına bağlıdır. Ölçü aleti DCV kademesinde iken 5V göstermelidir.</li>



<li><strong>PP21</strong>: Reset işlevi girişidir. Ölçü DCV kademesinde iken 0V’tan yüksek bir değer göstermelidir. Aksi takdirde yeniden başlatma (reset) düğmesi işlevi çalışmayabilir.</li>



<li><strong>PP25</strong>: Sol hoparlör ses çıkışıdır (AUDIO_L).</li>



<li><strong>PP26</strong>: Sağ hoparlör ses çıkışıdır (AUDI_R).</li>



<li><strong>PP35</strong>: Vdd’dir. Micro-USB güç girişinin sigorta çıkışıdır. Ölçü aleti DCV kademesinde iken 5V göstermelidir. Aksi takdirde F1 etiketli otomatik sigorta bozulmuş demektir.</li>



<li><strong>PP58</strong>: İşlemci voltaj regülatörünün geri besleme ucudur. İşlemcinin çalışma voltajına göre değişen değerler okunmalıdır. Bu sınama noktası U16 etiketli (RT8088AWSC) işlemci voltaj regülatörüne bağlıdır. Ölçü aleti DCV kademesinde iken 0.8v ile 1.4v aralığında değerler okunmalıdır. Değer okunmuyorsa sorun enerji besleme hattında veya voltaj regülatörlerinde olabilir. PP7-10 ve PP35 test noktalarından geriye giderek kontrollerini gerçekleştirin.</li>
</ul>



<p>Elektronik arızaların tespit edilmesi konusu ayrı bir uzmanlık konusu olmakla birlikte temel elektronik bilgisi olanlara tavsiye edebileceğim temel arıza teknikleri aşağıdaki gibi olabilir. Bunların haricinde ileri düzey bir arıza tespiti için faydalı olabilecek Türkçe kaynaklardan Önder Şişer’in “Elektronikte Arıza Bulma ve Giderme Teknikleri” kitaplarını (1. ve 2. cilt), ayrıca yazarın youtube seminer video’larını<a href="#_ftn1" id="_ftnref1">[1]</a> izlemenizi tavsiye ederim. Bu konudaki nadir kitaplardan birisi de <strong>Şerafettin Arıkan</strong>’ın “Elektronik Devrelerde Hata/Arıza” adlı kitabıdır. Ölçümleri yapmak için kullanmanızı tavsiye edebileceğim ölçü aletlerinden birisi de fiyat, özellik ve başarımı ile ön plana çıkan Vichy VC99<a href="#_ftn2" id="_ftnref2">[2]</a> olabilir.</p>



<ul class="wp-block-list">
<li>Bir büyüteç aracılığı ile kartın ön ve arka yüzünde kızaran/yanan devre elemanları ve yolları var mı bakın.</li>



<li>Göz ile kontrol ederek elektrolitik kondansatörlerde şişme ve sızdırma var mı bakın.</li>



<li>0 ohm ’luk smd dirençlerinde (sigorta dirençleri) ve smd sigortalarda açık devre olup olmadığına bakın.</li>



<li>Ölçü aletinizi diyot konumuna alarak SMD kondansatörlerde kısa devre olup olmadığına bakın.</li>



<li>Ölçü aletinizi diyot konumuna alarak smd MOSFET’lerde kısa devre olup olmadığına bakın.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><a href="#_ftnref1" id="_ftn1">[1]</a> Önder Şişer seminer videoları: https://goo.gl/YU1KU6</p>



<p><a href="#_ftnref2" id="_ftn2">[2]</a> Vichy VC99 ölçü aleti: https://goo.gl/dsscm3</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.tankado.com/pcb-sinama-noktalarini-kullanmak/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Açılış Sorunları ve Aktivite LED’inin söyledikleri</title>
		<link>https://www.tankado.com/acilis-sorunlari-ve-aktivite-ledinin-soyledikleri/</link>
					<comments>https://www.tankado.com/acilis-sorunlari-ve-aktivite-ledinin-soyledikleri/#respond</comments>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 09:51:26 +0000</pubDate>
				<category><![CDATA[Sorun Gidermek]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=8909</guid>

					<description><![CDATA[Raspberry Pi’ın üzerinde yer alan&#160; kırmızı ve yeşil LED’lerin yanış desenleri açılış sorunları hakkında bilgi verir. Bu desenlerden Raspberry Pi’ın açılış sorunları hakkında görsel olarak birçok bilgi edinilebilir. Aşağıda çeşitli Raspberry Pi modellerinin üzerinde yer alan Power Led&#160;(güç LED’i) ve Activity LED’lerin (aktivite LED’i) konumları gözükmektedir. Çeşitli Raspberry Pi modellerinin ACT (Activity), PWR (Power), FDX, &#8230; <a href="https://www.tankado.com/acilis-sorunlari-ve-aktivite-ledinin-soyledikleri/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "Açılış Sorunları ve Aktivite LED’inin söyledikleri"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Raspberry Pi’ın üzerinde yer alan&nbsp; kırmızı ve yeşil LED’lerin yanış desenleri açılış sorunları hakkında bilgi verir. Bu desenlerden Raspberry Pi’ın açılış sorunları hakkında görsel olarak birçok bilgi edinilebilir. Aşağıda çeşitli Raspberry Pi modellerinin üzerinde yer alan Power Led&nbsp;(güç LED’i) ve Activity LED’lerin (aktivite LED’i) konumları gözükmektedir.</p>



<span id="more-8909"></span>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="749" height="564" src="https://www.tankado.com/assets/2023/12/1-10.jpg" alt="" class="wp-image-8910"/></figure>



<p><br>Çeşitli Raspberry Pi modellerinin ACT (Activity), PWR (Power), FDX, LNK ve 10M LED’leri</p>



<p>ACT LED, açılış sırasında karşılaşılan başlatma sorunları ile ilgili olarak belli sayıda yanıp sönerek, açılışın hangi sebepten ötürü gerçekleşemediğini haber verir<a href="#_ftn1" id="_ftnref1">[1]</a>. Aşağıdaki tablo yanış desenlerinin (uzun veya kısa yanma sayıları) anlamlarını açıklamaktadır:</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>Uzun Yanma</strong></td><td><strong>Kısa Yanma</strong></td><td><strong>Anlamı</strong></td></tr><tr><td>0</td><td>3</td><td>Genel boot hatası.</td></tr><tr><td>0</td><td>4</td><td>Boot bölümündeki start*.elf&nbsp;dosyası bulunamadı.</td></tr><tr><td>0</td><td>7</td><td>Boot bölümündeki kernel.img&nbsp;dosyası bulunamadı.</td></tr><tr><td>0</td><td>8</td><td>SDRAM tanınmadı. Muhtemelen yeni bir Raspberry Pi bilgisayarını eski bir işletim sistemi ile yüklemeye çalışıyorsunuz. Güncel bir işletim sistemi ile tekrar deneyebilirsiniz.</td></tr><tr><td>0</td><td>9</td><td>SDRAM yetersiz.</td></tr><tr><td>0</td><td>10</td><td>HALT durumu.</td></tr><tr><td>2</td><td>1</td><td>Disk bölümü FAT değil</td></tr><tr><td>2</td><td>2</td><td>Disk bölümünden okuma yapılamadı.</td></tr><tr><td>2</td><td>3</td><td>Genişletilmiş disk bölümü FAT değil.</td></tr><tr><td>2</td><td>4</td><td>Dosya imzası/hash uyumsuzluğu (Pi 4)</td></tr><tr><td>3</td><td>1</td><td>SPI EEPROM hatası (Pi 4)</td></tr><tr><td>3</td><td>2</td><td>SPI EEPROM yazma korumalı (Pi 4)</td></tr><tr><td>3</td><td>3</td><td>I2C hatası (Pi 4)</td></tr><tr><td>3</td><td>4</td><td>Secure-boot yapılandırması geçersiz</td></tr><tr><td>4</td><td>4</td><td>Desteklenmeyen Raspberry Pi.</td></tr><tr><td>4</td><td>5</td><td>Firmware hatası.</td></tr><tr><td>4</td><td>6</td><td>Güç kesintisi A.</td></tr><tr><td>4</td><td>7</td><td>Güç kesintisi B.</td></tr></tbody></table></figure>



<p><strong>PWR Led</strong>: Raspberry Pi’ın enerjisinin var olduğu anlamına gelir ve adaptör takılı olduğu sürece sürekli olarak yanan kırmızı LED’tir. Bu LED aynı zamanda enerjinin istenilen voltaj seviyesinde olduğunu da gösterir. Raspberry Pi’ın normalde 5V olan besleme enerjisi 4.63 voltun&nbsp;altına düştüğünde PWR LED yanıp sönerek düşük voltaj uyarısı verir. Bu durumda güç kaynağınızı değiştirmeli veya kablo bağlantılarını kontrol etmelisiniz. Bu konuyla ilgili olarak kitabın “Enerji Besleyiciler” başlığını okuyabilirsiniz.</p>



<p>Güç sorunu ile ilgili bir başka durum ise, Raspberry Pi’ın açılışında GPU&#8217;nun (grafik işlemci) devreye girerek ekranı alacalı bulacalı bir gök kuşağı rengine boyamasıdır. Ekran görüntüsü aşağıda yer alıyor.</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="317" height="234" src="https://www.tankado.com/assets/2023/12/2-18.png" alt="" class="wp-image-8911"/></figure>



<p><br>Açılış sırasında ekrandaki Raibow görüntüsü</p>



<p>kernel.img&nbsp;gibi açılış dosyalarında veya adaptörün akım kapasitesinde sorun yoksa bu ekran 1-2 sn. içinde kaybolur. Eğer ekran kaybolmuyorsa kernel.img dosyasında hata olabilir veya güç kaynağı ihtiyaç duyulan akımı sağlayamadığı için Raspberry Pi sürekli yeniden başlıyor olabilir. Güç kaynağını değiştirmeli veya aşırı güç çeken bir USB aygıtının olup olmadığını kontrol etmelisiniz.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><a href="#_ftnref1" id="_ftn1">[1]</a> Raspberry Pi Act LED hata kodları &#8211; http://tiny.cc/rpileds</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.tankado.com/acilis-sorunlari-ve-aktivite-ledinin-soyledikleri/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Durum LED’leri</title>
		<link>https://www.tankado.com/durum-ledleri/</link>
					<comments>https://www.tankado.com/durum-ledleri/#respond</comments>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 09:50:09 +0000</pubDate>
				<category><![CDATA[Sorun Gidermek]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=8906</guid>

					<description><![CDATA[Raspberry Pi’ın üzerindeki kırmızı ve yeşil LED’lerin yanış ritmine göre değişen çeşitli anlamları vardır. Bu LED’lerin yanış şekline göre Raspberry Pi’ın çalışması hakkında görsel olarak birçok bilgi edinilebilir. Aşağıda çeşitli Raspberry Pi modellerinin üzerinde yer alan Power Led&#160;(güç LED’i) ve Activity LED’in (aktivite LED’i) konumu gözükmektedir. Çeşitli Raspberry Pi modellerinin ACT (Activity), PWR (Power),FDX,LNK ve &#8230; <a href="https://www.tankado.com/durum-ledleri/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "Durum LED’leri"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Raspberry Pi’ın üzerindeki kırmızı ve yeşil LED’lerin yanış ritmine göre değişen çeşitli anlamları vardır. Bu LED’lerin yanış şekline göre Raspberry Pi’ın çalışması hakkında görsel olarak birçok bilgi edinilebilir. Aşağıda çeşitli Raspberry Pi modellerinin üzerinde yer alan Power Led&nbsp;(güç LED’i) ve Activity LED’in (aktivite LED’i) konumu gözükmektedir.</p>



<span id="more-8906"></span>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="749" height="564" src="https://www.tankado.com/assets/2023/12/1-9.jpg" alt="" class="wp-image-8907"/></figure>



<p><br>Çeşitli Raspberry Pi modellerinin ACT (Activity), PWR (Power),FDX,LNK ve 10M LED’leri</p>



<p>FDX, LNK&nbsp;ve 10M/100 LED’leri, Raspberry Pi’ın ilk modellerinde yer alan (Raspberry Pi Model A) ağ iletişim durumu hakkında bilgi veren LED’lerdir. FDX, full duplex iletişim (aynı anda gönderme ve alma) modunda olunduğunu; LNK, o anda bir ağ iletişimi yapıldığı, 100, 100Mbit/s hızında bir ağ bağlantısını, benzer olarak 10M&nbsp; de 10MBit/s hızında bir kablolu ağ bağlantısına sahip olunduğu anlamına gelir.</p>



<p><strong>ACT LED</strong><strong>:</strong> PC’lerdeki HDD LED’i gibi düşünülebilir. Bir SD Kart işlemi (okuma/yazma) sırasında bu yeşil renkli LED yanıp söner. Mesela açılış sırasında bu LED’in sıkça yanıp söndüğünü görebilirsiniz. Çünkü açılış (boot) sırasında diskten yoğun bir okuma yapılması söz konusudur. Bunun dışında, boşta olan (IDLE) bir Rapberry Pi’ın ACT LED’i genellikle dakikada bir sıklığa kadar yanar. Özellikle Raspberry Pi kurtarma kipinde (rescue mode) başladığında bir komut vermediğiniz sürece çoğunlukla sönük kalacaktır.</p>



<p>ACT LED’inin Raspberry Pi’ın açılışı sırasında özel bir görevi daha vardır. Açılış sırasında karşılaşılan başlatma sorunları ile ilgili olarak belli sayıda yanıp sönerek, açılışın hangi sebepten ötürü gerçekleşmediği hakkında bilgi verir. Bu konu hakkında detaylı bilgiye kitabın “Açılış Sorunları ve Aktivite LED’inin söyledikleri” başlığından ulaşabilirsiniz.</p>



<p><strong>PWR Led</strong>: Raspberry Pi’ın enerjisinin var olduğu anlamına gelir ve adaptör takılı olduğu sürece sürekli olarak yanan kırmızı LED’tir. Bu LED aynı zamanda enerjinin istenilen voltaj seviyesinde olduğunu da gösterir. Raspberry Pi’ın normalde 5V olan besleme enerjisi 4.63 voltun&nbsp;altına düştüğünde PWR Led’i yanıp sönerek düşük voltaj uyarısı verir. Bu durumda güç kaynağınızı değiştirmeli veya kablo bağlantılarını kontrol etmelisiniz.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.tankado.com/durum-ledleri/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Raspberry Pi’ın Açılış Başarımını Analiz Etmek</title>
		<link>https://www.tankado.com/raspberry-piin-acilis-basarimini-analiz-etmek/</link>
					<comments>https://www.tankado.com/raspberry-piin-acilis-basarimini-analiz-etmek/#respond</comments>
		
		<dc:creator><![CDATA[Özgür Koca]]></dc:creator>
		<pubDate>Wed, 20 Dec 2023 09:49:15 +0000</pubDate>
				<category><![CDATA[Sorun Gidermek]]></category>
		<guid isPermaLink="false">https://www.tankado.com/?p=8903</guid>

					<description><![CDATA[Raspberry Pi bilgisayarının açılışı, çeşitli nedenler ile uzun sürebilir. Bu nedenler nadiren de olsa donanımsal olabileceği gibi genellikle yazılımsaldır. SD karttın arızalı olması veya son kapanışın ani enerji kesilmesi ile gerçekleşmesinden kaynaklanan veri hasarları açılış sürecini geciktirebilir. Bunun dışında Raspberry Pi’ın USB port’larına veya genişleme yuvalarına bağlı donanımlardan kaynaklanabilecek gecikmeler de yaşanabilir. Bir diğer unsur, &#8230; <a href="https://www.tankado.com/raspberry-piin-acilis-basarimini-analiz-etmek/" class="more-link">Okumaya devam et<span class="screen-reader-text"> "Raspberry Pi’ın Açılış Başarımını Analiz Etmek"</span></a>]]></description>
										<content:encoded><![CDATA[
<p>Raspberry Pi bilgisayarının açılışı, çeşitli nedenler ile uzun sürebilir. Bu nedenler nadiren de olsa donanımsal olabileceği gibi genellikle yazılımsaldır. SD karttın arızalı olması veya son kapanışın ani enerji kesilmesi ile gerçekleşmesinden kaynaklanan veri hasarları açılış sürecini geciktirebilir. Bunun dışında Raspberry Pi’ın USB port’larına veya genişleme yuvalarına bağlı donanımlardan kaynaklanabilecek gecikmeler de yaşanabilir. Bir diğer unsur, kalitesiz, düşük güçlü ya da arızalı bir güç kaynağından sağlanan temiz olmayan DC akımıdır. Bu durumda da sistem kararsız çalışabilir açılış gecikebilir.</p>



<span id="more-8903"></span>



<p>Raspberry Pi’ın ideal açılış süresi 25 saniye civarındadır. Bu sürede belirleyici olan ilk yazılımsal etken, açılışta otomatik olarak başlayan servislerdir. Hangi servisin açılışta ne kadar süre harcadığını görmek için systemd-analyze&nbsp;adlı araç oldukça faydalıdır. Aracı aşağıdaki gibi çalıştırdığınızda Linux çekirdeğinin ve çekirdek kapsamı dışında kalan servis ve programların (user space) açılışta ne kadar zaman harcadığını görüntüler.</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ systemd-analyze

Startup finished in 4.546s (kernel) + 27.254s (userspace) = 31.801s</pre>



<p>Yukarıdaki ekran çıktısında açılışın toplamda 31 saniyede gerçekleştiği görülebilir. Daha detaylı bir açılış raporu görüntülemek isterseniz aşağıdaki gibi blame seçeneğini kullanabilirsiniz:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ systemd-analyze blame

         15.440s dhcpcd.service

         15.327s hciuart.service

          8.274s mysql.service

          3.059s apt-daily.service

          1.585s raspi-config.service

          1.512s apt-daily-upgrade.service

          1.504s dev-mmcblk0p2.device

          1.024s ssh.service

           951ms Bluetooth.service

           605ms keyboard-setup.service

           505ms systemd-logind.service

           456ms networking.service</pre>



<p>blame çıktısında her bir açılış parçasının ne kadar sürede yüklendiği gözükmektedir. Burada dhcpcd.service&nbsp;adlı servisin başı çektiği görülmektedir. Bu otomatik IP yapılandırması içi çalışan bir servistir ve kullandığı sürenin çoğunu ağdaki bir DHCP sunucusundan IP yapılandırması beklemek için geçirir. Raspberry Pi’a yeni bir paket yüklediğinizde, paketin neden olacağı olası açılış gecikmelerini blame ile takip etmek iyi bir davranıştır. Diğer servisler ve açılış birimleri hakkında daha fazla bilgiyi Google&nbsp;üzerinden veya man sayfalarından edinmek de kullanmakta olduğunuz sistemi tanımak ve öğrenmek açısından faydalıdır.</p>



<p>Yukarıdaki ekran çıktısında dikkatinizi çekmek istediğim bir konu da listelenen açılış parçalarının (unit) sürelerinin toplamının, toplam açılış süresinden (systemd-analyze time) fazla olduğudur. Burada listelenen süreler ilgili parçaların toplam çalışma süreleridir. Açılış süresi boyunca birden fazla parça aktif olarak çalışır yani aynı anda birçok açılış süreci (process) birlikte çalışabilir. Bu nedenle parçaların her birinin çalışma süresi toplamı, toplam açılış süresinden fazladır. Hangi parçanın ne zaman çalışmaya başladığı (sistemin ilk enerjilenmesinden itibaren) ve ne kadar süreyle çalıştığını görmek açısından systemd-analyze aracının plot seçeneği çok kullanışlıdır. Bu seçenek kullanıldığında ekrana açılış sürecini görsel bir grafikle ifade eden bir SVG kodu basılır. Bu SVG&nbsp;kodunu görüntülemenin en güzel yolu ekran çıktısını dosyaya kaydederek bir web tarayıcısında görüntülemektir. Aşağıdaki açılış süreci grafiğinin bir örneğini görebilirsiniz:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ systemd-analyze plot

pi@raspberry:~ $ systemd-analyze > acilis_analiz.svg</pre>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="600" height="341" src="https://www.tankado.com/assets/2023/12/1-26.png" alt="" class="wp-image-8904"/></figure>



<p><br>systemd-analyze açılış süreci grafiği</p>



<p>Açılış sürecinin analizinde kullanabileceğiniz bir seçenek de critical-chain’dir. critical-chain seçeneği ile açılış sürecinin kritik süreçleri hakkında kullanışlı bir rapor görüntülenir. Bu raporda özellikle dikkat çekilmek istenen açılış süreçleri kırmızı ile renklendirilmiştir:</p>



<pre class="urvanov-syntax-highlighter-plain-tag">pi@raspberry:~ $ systemd-analyze critical-chain

The time after the unit is active or started is printed after the "@" character.

The time the unit takes to start is printed after the "+" character.

graphical.target @27.222s

└─multi-user.target @27.222s

  └─mysql.service @18.946s +8.274s

    └─network-online.target @18.940s

      └─network.target @18.916s

        └─dhcpcd.service @3.475s +15.440s

          └─basic.target @3.457s

            └─sockets.target @3.443s

              └─triggerhappy.socket @3.437s

                └─sysinit.target @3.416s

                  └─systemd-timesyncd.service @3.051s +356ms

                    └─systemd-tmpfiles-setup.service @2.912s +94ms

                      └─local-fs.target @2.851s

                        └─boot.mount @2.723s +117ms

                          └─fsck@disk-by\x2dpart\x2d01.service @2.336s +381ms

      └─dev-disk-by\x2dpart\x2d01.device @2.331s</pre>



<p>Süreler ifade edilirken kullanılan @ işareti ilgili sürecin Raspberry Pi’ın açılışından itibaren kaçıncı saniye de başladığını + işareti ise sürecin aktif çalışmasının kaç saniye sürdüğünü gösterir.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.tankado.com/raspberry-piin-acilis-basarimini-analiz-etmek/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>