c# linq ile asal sayı bulma

asal sayılar yanlış hatırlamıyorsam şifreleme(crypto) algoritmalarında yada çok nadir abuk gubik işlerde kullanılıyorlar. velhasılı bir vakit ihtiyaç olabiliyor kendileri asal 🙂 linq ile c#da asal sayı bulma yolları

var asallar = Enumerable.Range(1, 20)
.Where(i => i != 1 && !Enumerable.Range(2, i - 2).Any(j => i % j == 0));

bu yöntemde adım adım gidiliyor ve sayıya kadar bölme kontrolü yapılıyor. ikinci yöntemimiz biraz daha mantıklı bu sefer sayının kareköküne kadar bölme kontrolü yapılıyor. bu arada bölme kontrolü mod ile yapılıyor.

var asallar = Enumerable.Range(1, 20)
.Where(x => x != 1 &&
!Enumerable.Range(2, (int)Math.Sqrt(x)).Any(y => x != y && x % y == 0));

son adımda parallel olarak bu algoritmayı çalıştırmak. yapmamız gereken “AsParallel” eklemek:

var asallar = Enumerable.Range(1, 20).AsParallel()
.Where(x => x != 1 &&
!Enumerable.Range(2, (int)Math.Sqrt(x)).Any(y => x != y && x % y == 0));

ilk iki algoritmanın performans testleri

Döngü boyu adım adım algo kareköklü algoritma
2000 .011 saniye .001 saniye
200,000 31 saniye .2 saniye
2,000,000 2,400 saniye (40 dakika) 4.5 saniye

burda döngü boyu gidilen rakamlar demek yani 0 dan 2000 e kadar olan sayılardaki harcanan zaman saniye olarak. son olarakda paralel yapıda çalış dediğimizdeki performans testleri buyrun:

2000 .029 saniye
200,000 .155 saniye
2,000,000 2.6 saniye
20,000,000 65 saniye

rakamlar büyünce gerçekten fark eden bir performans farkı var.

linux kill ps bash script

testler sonucu bu iş apache tıkanıklığını açmıyor. sadece bash script benzerini yazmak isteyen olursa diye yazı yayında 🙂

başlık tam süper oldu 🙂 konu aslında basit linuxde process leri bulup killemek. öncelikle sebebimi anlatim. wordpress li serverımda bazen php bir patlıyorki sormayın habire php olmaya başlıyor roccess listesi. ama bunun bir sebebi yok yani nadiren nasıl bişey oluyorsa server kudurup bütün rame oturuyor bi noktadan sonrada non-responsive oluyor. ssh ile bi login olunmaz duruma geliyor. bu durumda apache restart etmeli veya php killemeli. php yi bi şekilde fastcgi ile apachenin altından çalışır duruma getirdim bu sayede ps -A dediğimde sistemde ki apache altındaki phpleri görebiliyorum. o zaman bunları öldürmem yeterli çünkü apache bir sonraki istekte nasılsa phpleri geri çalıştırıcak. sorun kaç php olursa killemeli. ortalama bir php processi % 1.5 ram yiyor 4gb dan hesaplarsak buda işte 7mb demek. 3gb boş ise 430 kadar process demek. o zaman crona ben 5dk da bir kontrol yapan ve php adedi 100 ü geçtiyse topuna kill çeken birşey yazmam servisi tıkanmasını kurtarmış oluyor. buda o işi yapan script.

#!/bin/bash
adet=`ps -A | grep "php" | grep -v grep | wc -l`
if [ $adet -ge 100 ] ; then
echo "killiall php"
`killall -9 php`
else
echo "long live php "
fi

nvelocity asp.net

velocity apache nin projelerinden birisi. ve birçok java projesi tarafından kod üretirken şablon benzeri bir yapıya oturan veri varsa kullanılır. en basit örnek spring framework. bütün velocity kullananları görmek için tıklayınız. şablon benzeri veri ne olabilir örnek. birçok sitede bir aktivasyon maili vardır siz üye olunca sadece size özel bir mail yazılır ve gönderilir yapısıda şuna benzer:

sayın kullanıcı

bikbik.com sitesine üye oldunuz onaylamak için şu linki tıklayın: bikbik.com/aktive/bişeybişey

bu bütün kullanıcılarına giden mailin şablonudur. ve “kullanıcı” stringi bide “bişeybişey” stringi gerçek veriyle yani kullanıcı yerine kullanıcı adı ve bişeybişey yerinede özel bir string(aktivasyon kodu) yazıp gönderilir. gelelim konumuza nvelocity bu velocity kütüphanesinin .net için olanı. eğer ararsanız google da bir sürü nvelocity bulcaksınız. codeplex de sourceforge da birer tane ben gördüm. onları denemedim çünkü castleproject de gördümki dedim hah bu proje canlıdır test edilmiştir 🙂 birçok opensource projenin derdi genelde yeterince teste tutulmamasıdır. sonra ben biyerde kullanırken pat diye elimde kalabilir diye korkuyorum.

neyse indirdim castleproject den ve ekledim asp.net projeme. okuduklarıma göre pat diye çalışması lazım ama bir türlü template i bulduramıyorum. ve basit bir kullanıcı profil oluşturma şablonum varki sitemde bi kaç sayfada gerekiyor. kalkıpda c# kodunun içine html sokmak istemiyorum en sevmediğim şey kodun içinde statik html görmek. şablonum:

<div>

<a href=”/profil/$user_id”>

<img width=”60″ height=”60″ alt=’üye $comProCommenter.Ad’ title=’üye $comProCommenter.Soyad’ src=’$resim’ />

</a>

</div>

<div class=”idy-img fl”>
<a href=”/profil/$user_id”>
<img width=”60″ height=”60″ alt=’üye $comProCommenter.Ad’ title=’üye $comProCommenter.Soyad’ src=’$resim’ />
</a>
</div>

velocity nin en beğendiğim özelliği şablone gönderdiğim objenin istediğim fonksiyon ve property sini çağırabilmem. $ işareti ile başlayan benim bu şablon koduna gönderdiğim değişkenler ve onları şu şekilde atıyorum.

public string getUserProfilePic(string user_id, ProfileCommon comProCommenter)
{
VelocityContext context = new VelocityContext();
context.Put("user_id", user_id);
context.Put("comProCommenter", comProCommenter);
context.Put("resim",VirtualPathUtility.ToAbsolute(comProCommenter.pic_path));
return VelocityManager.Instance.generateHtml("userPicture.vm", context);
}

fakat bu kod resourcenotfoundexception atıp duruyor ve ben her şekilde kontrol etmeme rağmen nvelocity nin setproperty sini kullanıp halledemiyorum. benim çözmem uzun sürdü. nvelocity deki velocityengine i init ederken vermeniz gereken ayarlar şöyle olması gerekiyor.

using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using NVelocity.App;
using Commons.Collections;
using NVelocity;
using System.IO;
using NVelocity.Runtime;
using System.Collections;

public sealed class VelocityManager
{
static readonly VelocityManager instance = new VelocityManager();
static readonly VelocityEngine engine = new VelocityEngine();

static VelocityManager()
{
string templatesPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "templates");

ExtendedProperties props = new ExtendedProperties();
props.AddProperty("file.resource.loader.path", new ArrayList(new string[] { ".", @".Templates", templatesPath }));
engine.Init(props);
}

public static VelocityManager Instance
{
get
{
return instance;
}
}

public string generateHtml(string templatePath,VelocityContext context ) {
Template template = engine.GetTemplate(templatePath);
StringWriter writer = new StringWriter();
template.Merge(context, writer);
return writer.GetStringBuilder().ToString();
}
}

koddan anlaşılacağı gibi benim vm dosyalarım(vm dosyası içinde şablon kodunu taşıyan dosyalardır.) templates klasörünün altında. umarım tıkanan olursa bulur uzun sürdü çözmesi. halbuki şunu web.config den ayarlasak ne güzel olurdu. ki ona bakındım ama öyle bi çözüm bulamadım. en azından nvelocitynin şuanki halinde yok.

php dir order

php de bir folderdaki dosyaları creation time a göre sıralamanız gerekiyorsa ve dir /tc kullanma şansınız yok ise bu kodu deneyebilirsiniz:


// dosyaları alır
$files = glob( 'c:/tmp/*.*' );

// creation time a göre sıralar. tersten. SORT_ASC ve SORT_DESC sıralamayı değiştirmenizi sağlar yani yeniden eskiye veya eskiden yeniye diye.
array_multisort(
array_map( 'filectime', $files ),
SORT_NUMERIC,
SORT_DESC,
$files
);

// print edelim
print_r( $files );

mysql select log

normalde gelen her sql in logu tutulmaz ama diyelimki bir uygulama geliştiriyorsunuz ve mysql’den sql hatası geliyor napcaz. o sql i görcez. bende limit ?limit dediğim yerde abuk bir hata geliyor. sonuçda limit ne kadar hata yapabilirimki. windowsda bu işlem biraz zahmetli ki ortamım linux değil.  general_log diye bir argüman var mysql dökümantasyonda ama bi türlü yerini gösteremiom windows 7 de log u conf dan veremedim. bu durumda şöyle yapıyoruz

SET GLOBAL general_log = ‘ON’; komutu ile çalışan mysql de sql logu aktif ediyoruz. sonra mysql administrator ile girip baktığımızda aynen sql leri görüyoruz.

bu arada benim hatam ?limit değişkenine string atıyormuşum oda tırnak içinde yazarmış limit ’12’ buda hatayı patlatırmış. neyse logda gördüm düzelttim tıkanana çare =)

windows ln -s

linux de ln diye bir komut var anlamı link demek bi sürü opsiyonu var genelde de ln -s ile kullanılır. bir dosyayı veya directory’e başka bi path ilede ulaşmanız gerektiğinde yapılır. windowsda bi site yazıyorum. aslında var olan bi sitenin design değişti onu yazmaya çalışıyorum. pathler karıştı tabi. ki şöyle bi durum var ilanresimleri diye bir folder var içinde 13 bin kadar folder ve resimler var. önce bi kısmını kopyaladım falan çalışıyorum ama server a attığımda kodları database taze olduğu için önyüzde bi sürü resim eksik kaldı falan filan bende başladım aranmaya windowsda ln -s yapılabilirmi yapılırsa nasıl yapılır. velhasılı mklink komutunu buldum.

windows xp den beri varmış sanırım bu komut yapısı basit

mklink gercek_path olusturulacak_link_path

hemen gerçek örneğide vereyim:

mklink c:inetpubvhostsmpazari.comilanresimleri c:inetpubvhostsbeta.mpazari.comilanresimleri

windows 7 de bi problem oldu oda admin olmanızı istiyor sistem. secpol.msc kurcaladım  ordan aslında Local Policies/User Rights Assignment/Create Symbolic Links özelliğine kendi kullanıcımı ekledim restart ettim falan yemedi neyse sonunda command prompt u run as administrator yaptım ordan bu komutları verdim. linkler oluştu ve sitem düzgün çalışmaya başladı. bu user rights konusu belki normal windows 7 lerde düzgün çalışır benimki RC versiyon.

hangi cdn microsoft mu google mı ?

CDN yani Content Delivery Network ün tam türkçe karşılığı içerik teslim ağı demek. internette webmasterların sıkça kullanması gereken bu işler youtube akamai ve yslow çıktıktan sonra ortaya çıkıyor. internet çok çok büyüdükten sonra artık bir kısım içeriğin aynı serverdan verilmesi siteleri yavaşlatır oldu. çünkü kullanıcı sayıları çok büyük rakamlara ulaştı ve basitçe var olan webserverlara bütün içeriği verdirmek ağır bir yük olmaya başladı.

dinamik oluşturulan içerik zorunlu ana serverlardan verilmeliydi ama statik bi çok içerikse bir sürü servera dağıtılabilir  ve ayrı ayrı serverlardan verilebilirdi. ki şu anda bütün büyük siteler bunu yapıyor google facebook bing.

dinamik içerik nedir ?

sayfanın istek başına değişmesi gereken içeriğe dinamik içerik denebilir. gerçek hayattan örnek verelim. http://www.youtube.com/watch sayfası aslında youtube ün video oynattığı sayfadır ve bu sayfaya bazı argümanlar gider bunlar soru işaretinden sonraki kısımlardır. örnek:?v=5PsnxDQvQpw&feature=channel asıl url http://www.youtube.com/watch?v=5PsnxDQvQpw&feature=channel. şimdi watch sayfası aldığı parametreler doğrultusunda değişicek ve hangi videoyu oynatması gerektiğini o video ya ait yorumları getirmesi gerektiğini bilicektir. bu her istek başına(aynı session’da) sabit bir web serverdan çıkması gereken html dir. çünkü az evel izlediklerinizi sonra izliceklerinizi tutması ve ona göre youtube ana sayfasında profilinize uygun videoları göstermek isticeklerdir. bunlar için IIS veya apache gibi bişey kullanılır.

statik içerik nedir ?

her sayfada aynı şekilde gelen içeriktir. bunlar neler olabilir örneğimiz youtube dan devam edelim. youtube logosu ve design için gereken css ler. javascriptler. bunlar her sayafaya girer ve hep aynıdır değişmeden gelirler. işte bu içerik bir sürü farklı serverdan gönderilebilir. ayrıca lokasyona göre kullanıcıya yakın olan yerden verilmesinde fayda vardır. yani türkiyeden google a bağlandığınızda google.com.tr nin gelmesi gibi düşünebilirsiniz. youtube’a türkiyeden bağlanıldığında CDN js ve css leri türkiyeye yakın olan serverdan verir buna CDN karar verir youtube ün orda bişey yapmasına gerek yoktur.

akamai ve limelight bu işte en ünlü olan firmalar. akamai internetin %20 si bizim üstümüzden gidiyor diyor ama bilemem. daha detaylı firma listesi ve CDN konusunun devamı için wiki ye bakınız.

yazımızın ana konusuna gelelim microsoftmu google mı?

küçük webciler yani ben CDN için para verip büyük büyük siteler kuramam. buna ne zamanım nede yeterince param var. fakat ufak işlerimde kullandığım jquery i herzaman google dan verirdim yani CDN olarak google tercih ediyordum en azından sadece jquery nin kendisini bile vermesi benim işimi/serverımı rahatlatıyordu. aslında benim microsoft cdn den haberim yoktu ki az evel okudum onlarda jquery veriyorlar. hemen aklıma iwebtools un speed testi geldi ve direk sınadım. sonuç biraz garip jquery mini 1.3.2 için microsoft 57.94kb veriyor ve bunu 0.32 saniyede veriyor. google ise 55.91kb ve bunu 0.07 saniyede veriyor. yani genel jquery CDN için google tercih etmek en mantıklısı.

sizde bakın hatta sonuçlar bu yazıdan farklıysa lütfen yorum bırakın.

utorrent torrent dosyalarını nerede tutuyor

quake 4 indirdim oynadım eskice bir oyun ama olsun quake always rocks. neyse arkadaşa indirde multiplayerdan kafana verim diodum torrenti vermem gerekti. ie ff veya chrome la çekin hepsi ayrı yerlere bırakıyor. bende genelde çalıştır diyorum torrent dosyaları için ve utorrent indirmeye başlıyor. peki bu torrent dosyaları nerde. windows 7 de şurda

C:UsersUSERNAMEAppDataRoaminguTorrent

diğer sistemlerde de benzeri appdata veya local datadadır bakınız……