Mert Salık Kişisel Web Sayfası
Bir bilgisayar mühendisi adayının maceraları…
Hoşgeldiniz!
Simspark On Ubuntu
Installing Simspark in source code is very exhausting, so synaptic is the assistant which makes us very happy at this moment. Finding lost libraries and latest packages is very easy in synaptic. We can install Simspark in three step:
1 ) Open the Software Sources (system->administration->software sources), then chose correct ubuntu release and add lines related it,
Hardy Heron:
deb http://ppa.launchpad.net/gnurubuntu/rubuntu/ubuntu hardy main
deb-src http://ppa.launchpad.net/gnurubuntu/rubuntu/ubuntu hardy main
Inrepid Ibex:
deb http://ppa.launchpad.net/gnurubuntu/rubuntu/ubuntu intrepid main
deb-src http://ppa.launchpad.net/gnurubuntu/rubuntu/ubuntu intrepid main
Jaunty Jackalope:
deb http://ppa.launchpad.net/gnurubuntu/rubuntu/ubuntu jaunty main
deb-src http://ppa.launchpad.net/gnurubuntu/rubuntu/ubuntu jaunty main
Karmic Koala:
deb http://ppa.launchpad.net/gnurubuntu/rubuntu/ubuntu karmic main
deb-src http://ppa.launchpad.net/gnurubuntu/rubuntu/ubuntu karmic main
Lucid Lynx:
deb http://ppa.launchpad.net/gnurubuntu/rubuntu/ubuntu lucid main
deb-src http://ppa.launchpad.net/gnurubuntu/rubuntu/ubuntu lucid main
2) Add the OpenPGP Keys related sources above:
sudo apt-key adv –keyserver keyserver.ubuntu.com –recv-keys 02516F74
3) Update your source depo and Install them:
sudo apt-get update
apt-get install simsaprk rcssserver3d rcsoccersim rcssserver rcssmonitor rcsslogplayer
Thats all floks! You have Simpark 0.2 , Rcssserver 0.63 , Rcssserver 14.0.2 , Rcssmonitor 14.0.0 , Rcsslogplayer 0.2 in your Ubuntu.
Thanks to Hossein Ansari
İşletim Sistemlerinin Açılma Süreçleri
Merhaba arkadaşlar,
Bu yazımda bilgisayar açılırken, linux ve microsoft windows işletim sistemi yüklü makinalarda sırasıyla hangi işlemlerin gerçekleştiğini anlatacağım.
LINUX
- Bios MBR’yi RAM’e yükler.
- MBR’deki makine kodları önyükleyicilerin (ör: GRUB) disk üzerindeki yerini belirler ve RAM’e yükler.
- Önyükleyici, disk üzerindek önceden yapılandırılan işletim sistemi veya sistemlerinin olup olmadığını kontrol eder. Birden fazla varsa hangisinin yükleneceğini kullanıcıya sorar. Disk üzerindeki Linux çekirdeği, boot dizini altında vmlinuz-<kernel-versiyonu> adıyla yer alır.
- Önyükleyici seçili işletim sisteminin çekirdeğini RAM’e yükler.
- Önyükleyici, initrd olarak adlandırılan başlangıç RAM disk imajını RAM’e yükler. initrd, sistemin açılış için gerekli olan sürücüleri yüklemek üzere çekirdek tarafından kullanılır.
- Çekirdeğin ve initrd’nin yükleme işleminin bitiminin ardından, artık ön yüklenici sistem açılışının kontrolünün işletim sisteminin çekirdeğine devrederek aradan çekilir. Bu noktadan itibaren GRUP veya LILO gibi önyükleyicilerin görevi başarı ile tamamlanmıştır. Artık çekirdek kendi marifetini göstermelidir.
- Kontrolü eline alan çekirdek, bellek de dahil olmak üzere işlemci, giriş çıkış birimleri ve disk ünitelerini yapılandırmaya koyulur.
- Çekirdekle birlikte yüklenmiş olan initrd sisteme bağlanır ve gerekli tüm sürücüler ona yüklenir.
- Kendisine root sanal aygıtını oluşturan çekirdek, onu root bölümü olarak sisteme sadece okunur biçimde bağlar.
- Bu noktaya kadar, çekirdek sisteme yüklenmiştir ve çalışabilir durumdadır. Ancak henüz hiçbir kullanıcı uygulaması ortada yoktur.
- Dosya sistemi bağlandıktan sonra çekirdek, /sbin/init programını çalıştırarak, kullanıcı ortamının yapılandırılmasını başlatır. Artık /sbin/init başlatılacak diğer tüm işlemlerin atasıdır. ve işlem ID numarası (PID: Process IDentifier) her zaman 1 ‘ dir.
- /sbin/init sistemin hangi çalışma seviyesinde (runlevel) açılacağını belirleyen /etc/ inittab programını çalıştırır.
- Daha sonra, /etc/inittab belirtilen çalışma seviyesine göre /etc/rc.d klasörü içerisindeki hangi rc dizini seçeceğine karar verir. Zira her bir rc dizini içerisindeaçılış sırasında çalıştırılması gereken programlarının linkleri yer almaktadır. Böylece /sbin/init hangi işlemleri başlatacağını bulmuş olacaktır. İşlemler de başladıktan sonra açılış süreci tamamlanmış olacaktır
MICROSOFT
- Bilgisayarın güç düğmesine basıldığı anda cihaza elektrik sağlanmış olunur ve ilk olarak anakart üzerinde çalışan BIOS yazılımını devreye alınır.
- Bios (Basic Input Output System – Temel Giriş Çıkış Sistemi)
Anakart üzerinde gömülü olan bir yazılımdır. BIOS başlatıldığında bilgisayarda bulunan donanımı kontrol ederek başlatır. Bu işleme POST (Power on Self Test – Güç Testi) denilmektedir. POST işlemi tamamlandıktan sonra BIOS MBR (Master Boot Record – Ana Önyükleme Kaydı)’ı başlatır. - MBR (Master Boot Record – Ana Önyükleme Kaydı)
MBR harddiskin ilk sektörüdür ve sektörde bilgisayarın adreslemesi bulunur, yani hangi bilginin nerede olduğu bir tablo halinde bu bölümdedir. Burada ufak bir program sayesinde açılışta hangi işletim sisteminin hangi bölümden başlatacağı belirlenir. Tek bir işletim sistemi kullanılıyorsa sistem hemen açılacaktır ancak hem Windows hem de Linux kullanılıyorsa bir seçim ekranı ile karşılaşılacaktır. - PBR (Partition Boot Record – Bölüm Açılış Kaydı)
Sabit disk üzerinde hangi bölümlerin olduğu bilgisi MBR’de tutulur. Her bölüm üzerinde de o bölüm hakkındaki bilgileri tutan bir bölüm açılış kaydı bulunur.
BIOS, MBR’den aktif bölüm bilgisini aldıktan sonra ilgili bölüme geçer ve oradaki PBR’yi okur. PBR’de o bölüm hakkında bilgiler yer alır. Bölümün büyüklüğü, kullanılan dosya sistemi, küme büyüklüğü ve çalıştırılacak olan ilk dosyanın adı ki bu dosya da NTLDR dosyasıdır. - NTLoader
İşlem sırasınına göre ilk olarak BIOS MBR’den hangi bölümün aktif olduğunu bulur ve PBR’ye gider. PBR’den ilk başlatılacak olan dosya NTLDR bilgisini alır. - Boot Menüsü
Bu aşamaya kadar BIOS PDR’deki ntldr dosyasını okur. Ntldr dosyası BOOT.INI dosyasına erişimi sağlar. BOOT.INI’de işletim sistemi seçenekleri ve bu işletim sistemlerinin nerelerden yükleneceği bilgisi vardır. Önyükleme ekranını getiren dosyadır. Buradan başlatılmak istenilen işletim sistemi seçilir. - Ntdetect
Ntdetect.com bilgisayardaki standart donanımları kontrol eder ve bunları registry(kayıt defteri)’ye yazar. Bu dosyanın olmadığı veya zarar gördüğü durumlarda NTDETECT failed mesajı alınır. - Kernel/HAL
Windows çekirdeğinin ve tüm donanım desteğinin yüklendiği kısımdır. Mavi ekran hataları bu kısımda alınmaktadır. Donanımda bir sorun varsa bilgisayar bir mavi ekran hatası verecektir. - Sürücü Yükleme
XP bilgisayarda bulunan tüm aygıtların sürücülerini yükler ve bunları kayıt defteri altına aktif olarak geçirir. Bu aşamada alınan hata ise bilgisayarın mavi bir ekran göstererek kitlenmesidir. Mavi ekranda hata iletisi olarak IRQ_LESS_OR_EQUAL alınabilir. - Kernel’i Başlatmak
Ntloader komut yetkisini Windows Kernel’e devreder. Burada karşılaşılan problem ise bilgisayarın “Windows Başlatılıyor” ekranında donup kalmasıdır. Burada birden fazla hata mesajı alınabilir. Bunlardan en sık karşılaşılanları:- Winnt_root\System32\Ntoskrnl.exe dosyasının eksik veya hatalı olduğunu belirten hata mesajı.
- Tek İşlemcili sistemler için: expand D:\i386\ntoskrnl.exe C:\Windows\system32
Çok İşlemcili sistemler için: expand D:\i386\ntkrnlmp.exe C:\Windows\system32\ntoskrnl.exe - Winnt_root\System32\Hal.dll dosyasının eksik veya hatalı olduğuna dair hata mesajı.
- Windows Hizmetlerinin Başlatılması
Hizmetlerin başlaması için gerekli olan Smss.exe, winlogon.exe, Isass.exe ,services.exe dosyaları yüklenir. Burada birçok mavi ekran hatası veya sık sık sistemde duraksama olayları gözlenebilir. Bu durumda mavi ekranda görünen hata koduna göre araştırma yapılıp çözüm üretilebilir. Bir diğer sık karşılaşılan problem ise truva atlarıdır. - Oturum Açılması
Bu kısımda eğer tanımlanmışsa Windows kullanıcı adı ve parola talep edecektir. Bilgilerin yanlış olması durumda Erişim yok hata mesajı alınır. Bu sık karşılaşılan ve parolanın unutulmasından kaynaklanan bir problemdir. - XP’nin Başlatılması
Son aşama olarak masaüstü, simgeler, otomatik başlatılan yazılımlar yüklenir. İşletim sistemi kullanıma hazır hale gelir. İşletim sistemi başladıktan sonra donanımsal ve yazılımsal yapılandırmalara bağlı olarak birçok hata ile karşılaşılabilir. Bunun detaylı olarak incelenmesi gerekmektedir.
Kaynakçalar:
- Linux Sistem ve Ağ Yönetimi [Alper Özbilen]
- ITU Bidb Destek Sayfaları – Microsoft Açılış Süreçleri
Microsoft açılış süreçleri hakkında bizleri bilgilendiren Murat Selçuk Karalar arkadaşıma teşekkür ederim.
Veri Yapıları Ödev ve Projeleri
Merhabalar, bölümümde 2. dönemimi bitirmemin ardından sene içinde veri yapıları ile uğraştığım ödev ve projeleri buradan paylaşmaya karar verdim. Sırasıyla açıp inceleyebilir, çözümlerinizi paylaşabilir, soru sorabilirsiniz. Umarım faydalı olur.
- Birinci Ödev
- İkinci Ödev
- Üçüncü Ödev
- Proje Çalışması
İTÜRO 2010 Yaklaşıyor!
İTÜRO 2010 HAZIRLAN!
İTÜ Kontrol ve Otomasyon Kulübü tarafından Nisan 2010’da dördüncüsü düzenlenecek olan İTÜ Robot Olimpiyatları, robotik alanında çalışma yapmakta olan öğrencileri, akademisyenleri ve endüstri temsilcilerini düzenlenecek etkinlikler aracılığıyla bir araya getirmeyi hedefleyen ve meydana gelen teknolojik gelişmeler ışığında bu alanda yapılan çalışmaları sorgulamayı planlayan bir oluşumdur.
Her yıl Türkiye’nin dört bir yanından binlerce lise ve üniversite öğrencisi İTÜRO’ya yarışmacı veya izleyici olarak katılmaktadır. Proje kayıtlarının internet üzerinden yapıldığı İTÜRO’da robotlar Mini Sumo, Basit Çizgi İzleyen, Gelişmiş Çizgi İzleyen, Süpürge, Yangın Söndüren, Kendini Dengeleyen Robot ve Serbest Kategori gibi değişik yarışmalarda yer almakta, aynı zamanda organizasyon katılımcıları Süleyman Demirel Kültür Merkezi’nde kurulan masalarda robotlarını sergileme fırsatı bulmaktadır. İTÜ Robot Olimpiyatları kapsamında akademisyenler, sanayi katılımcıları ve deneyimli öğrenciler tarafından, robotik ve kontrol bilimi gibi alanlarda seminerler, söyleşiler, paneller ve sergiler düzenlenmektedir. Yarışmalarla eş zamanlı olarak düzenlenen bu etkinlikler, bu alanda çalışmalar yapmakta olan katılımcılara yol göstermekte ve katılımcıların bakış açılarını genişletmektedir.
Yenilikçi, ilgi çekici ve alanında uzman kişiler tarafından verilecek seminerlere katılanların sertifika alacağı İTÜRO 2010’da ayrıca söyleşiler, Türkiye’de robotiği sorgulayan, sorunlara çözüm üretmeye çalışan paneller ve sergiler sizleri bekliyor olacak.
Kendini geliştirmek, robotlarını yarıştırmak ya da sergilemek mi istiyorsun? Hazırlan, İTÜRO 2010 çok yakında…
İturo: Facebook
İturo: Web
Google Pagerank Hakkında
Bugün google pagerank hakkında çok güzel bir yazıya rastladım, yazı R10 forumunun adminlerinden radmin tarafından yazılmış, ve R10′da Pagerank konu başlığı altında bulunuyor. Webmasterların ya da kendini webmaster sananların aklındaki soru işaretlerine bir cevap sunmuş arkadaşımız, gerçekten de işin mühendisliğinden, Google’ın amacından ve dünyanın gerçeklerinden bahsetmiş, değiştirmeden burada yayınlamak istiyorum buyrun:
Bazı arkadaşlarımız pagerankı sihirli bir değnek sanıyor çoğu zaman yani bir pagerank pr5 olursam birinci çıkarım gibi bir beklenti içindeler sürekli.
Pagerank ile yatıp pagerank ile kalkıyorlar. Oysa pagerank tek başına bişey ifade etmeyen Toolbara yansıyan yeşil renkli eğlence çubugunun adıdır. Ve bir kaç büyük blog sitesindede yazıldıgına göre yakın bir zamanda artık toolbardan pagerank ifadesini tamaman kaldıracak Google. Çünkü tabir-i caiz ise sokaktaki adam için bişey ifade etmiyor toolbardaki yeşil çubuklu pagerank olayı.
Webmasterlarda o yeşil çubuktaki rakam için milyonlarca dolarlık bir link satış borsası dogmasına yol açıp pagerank algoritmasını bozdu.Pagerank iyikide tek başına bişey ifade etmeyen bir olgu…
Arama motoru Google’da sonuç sıralamasında etkili oldugu söylenen 75 kadar kriter vardır. İşte pagerank bu kriterlerden biridir sadece.
Peki nedir bu kriterler?
Bu sıralama kriterlerinden bazılarını, insanlar çeşitli denemeler, testler, deneme-yanılma yöntemleri yada tesadüfler sonucu keşfetmişler. Hala sıralamada etkili olduğu düşünülen, onlarca kriteri insanların keşfetmesini istemiyor google mühendisleri…
Olayın dahada açığı ve özeti, insanların tam olarak google un sıralama mantığını çözmesini istemiyorlar. Olayı örneklemek gerekirse “Tıpkı Coca cola özütünün formülü gibi”. Binlerce cola türevi içecek var ama coca colanın tadı hiç birinde yok. Colanın gizli formülü bulunursa bu Coca Cola Co. şirketinin sonu olur. Formül bulunsa, en basitinden biz niye milyon dolar verip amerikadan cola özütü alalım ki kendimiz yaparız. işte şirketlerin gelecegi için sırlı formülleri keşfedilmemelidir felsefesinin mantığı bu”
Bu sebeble Google çok sık olarak sonuç sıralama algoritmasını değiştiriyor. Bugün dogru olan şey yarın yanlış çıkartıyor.A sitenizde uyguladığınız taktik, B sitenizde işe yaramıyorun sebebi işte bundan kaynaklanmaktadır.
insanların daha dogrusu webmasterların, dev rakipleri microsoftun ve yahoo’nun google sıralama sonuç algoritmasını keşfetmesini engellemek.
Eger insanlar google u tam olarak keşfedebilirlerse örnegin ***** siteler, spam siteler,terör siteleri, ilk sıralarda çıkmaya başlar ve google kalitesini düşürüp yok olmaya mahkum olur. Düşünsenize, google amcanın tüm sırları iyice keşfedilse ve mesela ermeniler “turkish yada alanya, antalya” diye yapılan bir arama sonucunda ermeni soykırımı diye yaptıkları sayfaları çıkartabilirlerdi.Bir anda milyonları Türkiye düşmanı haline getirebilirlerdi.
Ayrıca Google amcanın en büyük iki rakibi, microsoft ve yahoo nun google u çözüp karşılarına rakip olarak çıkmasını istemiyor google patronları ve mühendisleri.
Pagerank sıralama kriterlerinden sadece biri. 100 puanlık bir sınav kağıdındaki 20 puanlık bir soru gibi düşünülebilir. Sınavda başarılı olabilmeniz için çözmeniz gereken sorulardan biri gibide düşünebiliriz…
Eger pr6 ve üzerinde degilseniz pekte önemli olan bir kriter degildir pagerank sizin siteniz için.
Hemen hemen pr3=pr4=pr5 aynı degere sahiptir. Eskiden belki aynı degildi ama artık bu 3 degerde hemen hemen aynı google amcanın gözünde.
insanlar sahte pagerank anlaşmaları yaparak bu pagerank degerlerine çok rahat ulaşabildiginden dolayı sıralamada bu degerleri işin içine katmak pek mantıklı degil diye düşünüyorlar.
Google da onbinlerce dolar maaş alan dünyanın en iyi mühendisleri ve zeki adamları çalışmakta, tek işleri Google arama sonuçlarını daha isabetli hale getirmek, insan faktörünü en aza indirip dogal sonuçları üste çıkartmak.
Link verdiğiniz site, size link veriyorsa pagerank için bir katkı beklemeyin bu link degişiminden.
Pagerankın ilk çıkış mantığı şu:
“ insanların link verdiği site kötü site olamaz. İnsanlar faydalı olmayan bir siteye link vermezler. İnsanların link verdiği bu iyi siteyi belli kriterler çerçevesinde üst sıraya taşıyalım.”
Bir makaleden alıntı:Alıntı:
1998 yılından itibaren google popüler olmaya başladıkça, bir çok webmasterın hedefi haline gelmeye başladı. Amerikalıların daha dogrusu biz Texsaslıların meşhur bir sözü vardır ” Boynuna kement geçirilemeyecek ve binilemeyecek At yoktur.” Google’unda boyuna kement geçirilip uysallaşıtırmalıydı bir an önce ve sömürülmeliydi. Ama google’un kurucuları oldukça zeki adamlar çıktı. insanlar sırlarını çözdükçe google sıralama algoritması degiştirdi hep. Hala Texsas’ın bozkırlarında dolaşan ve binilemeyen bir attır Google
Yukarıdaki alıntıda bahsedildiği gibi, insanlar link degişimleri yaparak pagerank kazanıyor ama bu pagerankın ruhuna aykırıydı. Pagerank dogal yollardan artmalıydı.
Eger bir siteye link verirseniz, link verdiğiniz sitede sizin siteye link veriyorsa burada dogal olmayan bir link degişim anlaşması olduğunu 6 yaşındaki çocuk bile anlar. Pagerankın çıkış mantığına ters bir durum oldugundan bu tür anlaşmalar her iki siteyede fayda yerine zarar getirmektedir.Bunu aklımızdan çıkartmamamız gerek.
Gerçek pagerank olayının mantığı şudur ve özellikle yabancı sitelerde görülen bir durumdur,
diyelim ki veritabanları üzerine bir makale yazdınız ve makalenizde tanıttığınız mysql veritabanı içinde mysql.com adresine link verdiniz. Bu durumda,
hem makalenizi okuyan bir ziyaretçiyi dogru yere yönlendirmiş olduğunuz için , hemde bu makaleyi indexlemeye gelen arama motoru örümceğini konuyla ilgili dogru yere yönlendirdiğiniz için, mysql.com pagerank kazanıyor.
Burada mysql.com bana link verin demedi ama insanlığa faydalı bir iş yapmış oldugundan dolayı bizden karşılıksız link aldığından dolayı pr degeri yükseliyor.
Toolbar pagerank ise normal internet kullanıcılarına ziyaret ettikleri siteler hakkında onlara çok yüzeysel bilgi verme niteliğinde ve google amcanın onların ziyaret ettiği siteler hakkında bilgi toplamaya yönelik bir aracı. Dünyadaki tüm sitelerin matematiksel olarak pagerank degeri toplamı 1 sayısına eşittir.
Şu an 20milyar sayfa oldugu tahmin edilmekte. Bu da demek oluyorki matematiksel olarak pagerankın gerçek degeri 1/20milyar yani bol sıfırlı bir rakam.
işte insanların algılaması kolaylaşsın diye 0,00545457878781878781787 gibi bir rakamı sembolize olarak pr4 ile göstermiş google ve bunu toolbara basıyor. Gerçek matematiksel degeri asla yansıtmaz.
Şöyle bir matematiksel yaklaşımıda düşünebiliriz:
0,00545457878781978781787<pr4 <0,00545457878781979781787 bu iki rakam arasındaki degerlere biz pr4 olarak kabul edelim ve toolbara yansıtalım.
her pr4 ‘ün gerçek matematiksel degeri farklıdır.
Boşuna toolbar güncellemesini beklemenize gerek yok.Şu an ki sıralamanız neyse 1 saat sonra pagerank güncellense yine aynı sıralama degerindesinizdir. Pagerankın gerçek degeri kesirli bir ifade oldugunu yukarıda bahsetmiştim. Pay ve Paydaya sürekli yeni siteler girip çıktıgından dolayı, her sitede matematiksel pagerank kesir degerinin bir parçası oldugundan anlık olarak pagerankımız sürekli degişiyor. Ama bu toolbara 3 ayda bir yansıyor.
Madem pr3=pr4=pr5 ise bizim Pagerank 6 olmak için ne yapmamız gerekirir sorusunun cevabı ise özetle şu:
Google kurucusu Sergey Brin ‘in pagerank hakkındaki şu sözü bize olayı özetliyor
“İnsanlığa faydalı her sitenin pagerankı yüksek olmalıdır.”
Bizim yapmamız gereken şey insanlığa faydalı bir site yapmak. Yani Türkçe içerikli siteler ile bunu yapmak çok zor.
Cem yılmaz doritos reklamı, temel fıkraları, flash oyunlar, Tckimlik, vergi no,sohbet, liseli kızlar,çiceklerin dili… gibi konuların insanlığa pek bir faydası olmayacağından dolayı maksimum pr5 almakta Türk siteleri.
Pr5 bir siteninde pageranktan pek bir fayda beklememesi gerek.
İnsanlığa faydalı bir site yaparsanız (hotscripts.com, phpbb.com gibi firefox) gibi pr7 bile olmak çok zor degil.
Bakınız yüzlerce Türk flash oyun sitesi var. Ama kaç tane actionscript ile flash oyun yazıp insanlara kodlarını sunan Türk sitesi var. Cevap sıfır…. Bu yazdığım tarz bişeyi yaparsanız, meksikadanda link alırsınız, japonyadanda link alırsınız , insanlar sizi takdir eder ve link verir…
unutmamak gerek ki Pagerank ile ilgilenen sadece webmasterlardır.
Sokaktaki adama sorsan pagerank nedir desen adam “Bana küfür mü ediyor acaba diye düşünür”
Normal internet kullanıcıları yani bizim ziyaretçilerimiz kategorisine giren kesim için pagerank bişey ifade etmiyor. Şu site pr6 diye o siteye girelim demez kimse. Herkez aradığı bilgiye ulaştığı siteye girer.
Örnegin hotmail.com isterse pr0 olsun. biz ona pr için degil içeriginden faydalanıyoruz diye giriyoruz.
Pageranka genellikle yeni açılan siteler muhtaçtır. ( Google mühendisleride bunu çok iyi bildiğinden, yeni açılan sitelerin pr almasını zorlaştırıyorlar.)
Pageranka çok fazla kafanızı takmayın.
insanlarda kolay kolay google toolbar kurmaz. En azından Türkler pek kurmuyor.Türkiyede internet kullanma oranı %10 şu an.
10 kişiden 1 kişi internet kullanıyor o bir kişininde Allah bilir kaçı google toolbar kurar ki.
insanlar, hepsiburada.com, download.com, itiraf.com, siberalem.com, hotmail.com, hotscripts.com, internethaber.com gibi adreslere pr degerleri yüksek diye girmez, içerikleri var diye giriyor…
Eger sitenin içeriği iyiyse bir gelen bir daha geliyorsa, insanlar siteni sık kullanılanlarına ekliyorsa zaten senin sitenin pageranka falan ihtiyacı yoktur.
Sitenin içerigi gerçekten kaliteliyse zaten sana başka insanlar link verirler ve pagerankında yükseliyor.
Pek akıcı bir yazı olmadı konudan konuya atladım kusura bakmayın
Tamamen alıntıdır.
Sample Binary Search Tree Functions

Trees are very important in data structures and algorithms topics, as an introduction of trees here i write some BST (Binary Search Trees) functions for find max depth, numbers of nodes, minimum value etc… I try to use less input variable and make the solutions recursive, if you find better solutions you can share it on your commands or post me for change the current one.
/*
FINDS THE NUMBER OF NODES IN A TREE
*/
int size(struct node* node) {
if (node==NULL) {
return(0);
} else {
return(size(node->left) + 1 + size(node->right));
}
}
/*
FINDS THE MAX DEPTH OF A TREE
*/
int maxDepth(struct node* node) {
if (node==NULL) {
return(0);
}
else {
int lDepth = maxDepth(node->left);
int rDepth = maxDepth(node->right);
// use the larger one
if (lDepth > rDepth) return(lDepth+1);
else return(rDepth+1);
}
}
/*
FINDS THE MIN VALUE DATA
*/
int minValue(struct node* node) {
struct node* current = node;
// loop for find the leftmost leaf
while (current->left != NULL) {
current = current->left;
}
return(current->data);
}
/*
CHANGES THE TREE LIKE MIRROR
*/
void mirror(struct node* node) {
if (node==NULL) {
return;
}
else {
struct node* temp;
// do the subtrees
mirror(node->left);
mirror(node->right);
// swap the pointers
temp = node->left;
node->left = node->right;
node->right = temp;
}
}
/*
CHECKS IF THE TREES THE SAME
*/
int sameTree(struct node* a, struct node* b) {
if (a==NULL && b==NULL) return(true);
else if (a!=NULL && b!=NULL) {
return(
a->data == b->data &&
sameTree(a->left, b->left) &&
sameTree(a->right, b->right)
);
}
else return(false);
}
/*
RETURNS TRUE IF THE TREE IS BST AND min>=VALUES<=max */
int isBST(struct node* node) {
return(isBST_(node, INT_MIN, INT_MAX));
}
int isBST_(struct node* node, int min, int max) {
if (node==NULL) return(true);
if (node->datadata>max) return(false);
return
isBST_(node->left, min, node->data) &&
isBST_(node->right, node->data+1, max)
);
}
Sample Recursion Problems
Here are some sample recursion problems written by Phillip T. Conrad
(Assistant Professor, Dept. of Computer and Information Sciences, University of Delaware).
PROBLEMS
And here i try to solve them. I recommend that check the codes, if you find any error or different easy solution, you can command it or contact me (=
I’m very sorry that legibility of my code is very bad, because wordpress plugin, which i’m using, doesn’t show the tabs.
Solution 1
#include <iostream>
#include <cstdlib>
using namespace std;
int sumOfDigits(int num);
int main () {
int number,sum;
cout<<"Please enter your number."<<endl<<"....:";
cin>>number;
if(number<0){number=number*(-1);}
sum=sumOfDigits(number);
system("cls");//clear for Linux and Unix OS
cout<<endl<<"Sum of digits is "<<sum<<" ."<<endl<<endl;
system("PAUSE");
return 0;
}
int sumOfDigits(int num){
if(num<10 && num>=1){
return num;
}
else{
return sumOfDigits((num-num%10)/10) + num%10;
}
}Solution 2
#include <iostream>
#include <cstdlib>
#define LEN 5
using namespace std;
void array_printer(int a[], int size);
int main (){
int numbers[LEN];
cout<<"Please, enter your integer array, than i'll write it recursively."
<<endl;
for(int i=0; i<LEN;i++){
cout<<".....:";
cin>>numbers[i];
}
array_printer(numbers, LEN-1);
system("PAUSE");
return 0;
}
void array_printer(int a[], int size){
if(size>=0){
cout<<endl<<"item: "<<a[size];
array_printer(a,(size-1));
cout<<endl;
}
else return;
}Solution 3
#include <iostream>
#include <cstdlib>
#define LEN 5
using namespace std;
void array_printer(int a[], int size);
int main (){
int numbers[LEN];
cout<<"Please, enter your integer array, than i'll write it recursively."
<<endl;
for(int i=0; i<LEN;i++){
cout<<".....:";
cin>>numbers[i];
}
array_printer(numbers, LEN-1);
system("PAUSE");
return 0;
}
void array_printer(int a[], int size){
if(size>=0){
array_printer(a,(size-1));
cout<<"item: "<<a[size]<<endl;
}
else return;
}Solution 4
#include <iostream>
#include <cstdlib>
using namespace std;
int sumOfNumbers(int num);
int main(){
int number,sum;
cout<<"Please, Enter the number which"<<endl
<<"will be last value of sum."<<endl
<<".....:";
cin>>number;
sum=sumOfNumbers(number);
cout<<endl<<endl<<"Sum of numbers is "<<sum<<" ."<<endl;
system("PAUSE");
return 0;
}
int sumOfNumbers(int num){
if(num!=1){
return (sumOfNumbers(num-1) + num);
}
else{
return 1;
}
}Solution 5
#include <iostream>
#include <cstdlib>
using namespace std;
int productOfNumbers(int num);
int main(){
int number,product;
cout<<"Please, Enter the number which"<<endl
<<"will be last value of product, below 17."<<endl
<<".....:";
cin>>number;
product = productOfNumbers(number);
cout<<endl<<"Product of numbers is "<<product<<" ."<<endl;
system("PAUSE");
return 0;
}
int productOfNumbers(int num){
if(num!=1){
return (productOfNumbers(num-1) * num);
}
else{
return 1;
}
}Solution 6
#include <iostream>
#include <cstdlib>
#define LEN 5
using namespace std;
int zeroCounter(int num[], int size);
int main(){
int numbers[LEN],zeros;
cout<<"Please, enter your integer array, than i'll count zeros in array"
<<endl<<"using the recursion"<<endl;
for(int i=0; i<LEN;i++){
cout<<".....:";
cin>>numbers[i];
}
zeros = zeroCounter(numbers, LEN);
cout<<endl<<endl<<"Number of zeros in this array is "<<zeros<<" ."<<endl;
system("PAUSE");
return 0;
}
int zeroCounter(int num[], int size){
if(size>=0){
if(num[size]==0) return 1 + zeroCounter(num,size-1);
else return zeroCounter(num,size-1);
}
else return 0;
}Solution 7
#include <iostream>
#include <cstdlib>
#define LEN 5
using namespace std;
int minElement(int num[], int size);
int main(){
int numbers[LEN],minimum;
cout<<"Please, enter your integer array, than i'll find minimum element"
<<endl<<" in array by using the recursion"<<endl;
for(int i=0; i<LEN;i++){
cout<<".....:";
cin>>numbers[i];
}
minimum = minElement(numbers,LEN);
cout<<endl<<endl<<"Minimum element of this array is "<<minimum<<" ."<<endl;
system("PAUSE");
return 0;
}
int minElement(int num[], int size){
if(size>=0){
if(num[size]<=num[size-1]){
num[size-1]=num[size];
return minElement(num,size-1);
}
else return minElement(num,size-1);
}
else return num[0];
}Mercurial (Komut Satırında) Kullanımı
Mozilla, Netbeans, OpenSolaris gibi projelerde adını duyduğumuz, distributed version control system diye tabir edilen bir sürüm denetim sistemidir. Güzelliği merkezden ayrı olarak (local olarak) kendi bilgisayarınızda proje üstünde çalışabilmemiz, diğer insanlardan (farklı repositorylerden) veyahut merkezden dosya çekme (pull) ve gönderme (push) özellikleri ile kullanımının rahat olmasıdır. Kendi makinamızdan (projenin local kopyasından ) commit, update vs. gibi komutları kullanarak projeyi takip ve control edebilmekteyiz. Geliştirilen projenin farklı kişiler tarafından özel çalışma kopyalarının çıkartılıp, geliştirmeler-düzeltmeler vebenzeri işlemler yapıp, yine merkeze (ana repository) yada bir başka kullanıcının kopyasına birleştirebilme özelliği özgür yazılım için çok güzel bir nimettir. =)
Gelelim fasulye ve faydalarına , kurulumu şahsen Ubuntu (Karmic) üzerinde komut satırından yaptım, ve küçük bir ödevde yine komut satırı üzerinden işlerimi hallettim, bu yüzden kullanımın Linux üzerinden nasıl olduğunu anlatıyorum:
- sudo apt-get install mercurial (apt-get install yine işbaşında) ile kurulumu tamamlıyoruz =)
Kurulumu bu kadar basit olan mercurial’ın kullanımında:
- hg clone http://mertsalik.com/mercurial-örnekrepo
komutu ile örnek projenin bir kopyasını adresinden bilgisayarımıza alıyoruz.
- hg rollback
komutu ile projeye yaptığımız değişikliği (ör:pull) geri alabiliyoruz.
- hg commit
yerel klasörümüzde yaptığımız değişiklikleri (changeset) changelog dosyasına kaydeder
- hg add
proje klasörüne eklediğimiz dosya ve klasörleri kayıt altına alma (projenin öğesi haline getirme) işini yapar
- hg init
Yeni bir mercurial projesi yaratır, ve ” .hg ” dosyasını oluşturur.
- hg parents
Hangi revisionda çalıştığımızı Projenin son halini (merkez + local changesets) gösterir.
- hg pull
bir başka repodan (adresten ya da klasörden) projemize öğe çeker.
- hg push
Yapılan değişiklikleri belirtilen repoya gömer. (ekler diyelim)
- hg merge
Diyelim ki revision 2 de bir hata bulduk,
“hg update 2 ” diyerek, projemizin kodlarını revision 2 deki hale getirdik,
– hatayı düzelttik —
” hg commit ” diyerek de yapılan değişikliği history’ye ekledik, şimdi yapmamız gereken bu düzeltmeyi projenin son haline dahil etmek. işte burada ” hg merge ” komutunu kullanıyoruz.
- hg status
Projede yapılan değişiklikleri, ekleme çıkarma yapılan veya kayıt altına alınmayan dosyaları gösterir.
- hg outgoing
Projemizi push edeceğimizde hangi değişikliklerin push edileceğini gösterir.
- hg help
Yardım komutudur. Komutlar ve kullanımları hakkında bilgi alabiliriz.
- hg update
Local çalışmamızı (alt projemizi) bir revision haline getirip ona bir id verebilmemizi sağlar (Ör: hg update 3)
- hg log
History kayıtlarının tümünü görüntüler. Kayıt altına alınmış tüm olayları listeler.
Burada yazdığım komutlar gerçeklerinin çok yalın halleridir, ek komut satırı argumanları alarak daha spesifik görevleri gerçekleştirebilirler. Bu paylaşımdaki amacım süper bir mercurial anlatımı değildir, aksine kullanımının görsel olarak olabileceği gibi (Bilgilendirdiği için Akçura’ya teşekkürler Bakınız) komut satırından da yapılabileceğidir. Komutları belirli bir sıraya göre yazmamamdaki sebep; daha çok araştırılıp, örnekler üzerinde ezbere değil, hangisinin hangi işi yaptığını deneyerek bulunmasını tavsiye etmemdendir.
Posterleri Parçalamak (A1 to A4)
Büyük boyutta (A1, A0 vebenzeri) grafiklerimizi, poster veya resimlerimizi basmak için pahalı basımevlerine gitmemize ya da bir şekilde bastırdığımız bu büyük boyutlu posterleri taşımak için en azından eni uzunluğunda bir rulo taşımak zorunda değiliz. Çözüm olarak posterimizi daha küçük parçalara bölmeyi düşünebiliriz. Bunu yapmak için çok güzel iki program bulunmakta:
Bu iki program herhangi bir boyuttaki bir resmi istenilen sayıda ya da istenilen boyutlarda küçük parçalara ayırabilmekte, özellikle PosteRazor sonuç olarak küçük parçaları PDF (portable document file) olarak kaydedebilmekte.
PosteRazor Linux,Windows ve Mac‘te; Rasterbator ise sadece Windows ortamında çalışabilmekte fakat Rasterbator programı kendisini biraz daha aşıp işi webe dökmüş. Bu adresten Rasterbator’un resmi sitesine girerek aynı işlemleri herhangi bir kurulumun yapmadan gerçekleştirebilmekteyiz.
Ben bu iki programı A1 büyüklüğündeki posteri A4 lere bölmekte kullandım, sizlere de faydası dokunmasını diliyorum.
Optimizasyon Fonksiyonları
QtiPlot programını kulanırken Turgut Hocamızın örnek fonksiyon olarak denememizi önerdiği bazı fonksiyonları çok ilginç buldum.
Bu fonksiyonlar matematiksel olarak belli aralıklarda çok farklı grafikler elde etmemizi sağladı , ufak bir araştırma ile bu fonksiyonların Global Optimizasyonda kullanıldığını öğrendim. Bu fonksiyonlardan bazıları:
- Ackley Function
- Beale Function
- Bohachevsky Function
- Booth Function
- Branin Function
- Colville Function
- Dixon & Price Function
- Griewank Function
- Shekel Function
- Sphere Function
- Power Sum Function
- Schwefel Function
- Salomon Funciton
Daha fazla bilgi için bkz: Google
Sitemi takip ettiğiniz için teşekkür ederim. İyi çalışmalar.






