en sonunda biri yapmış gibi

uzun süredir open source ve iyi çalışan bir download manager arıyordum. ve bu uzun süre içinde flashget kullandım. şikayetçi değilim aslında flashgetde güzeldir. ama adam gibi open source bişey yoktu az evel freedownloadmanager diye bişey buldum sanırım windowsda bundan sonra fdm kullanabilirim. şimdiye kadar herhangi bir problem vermedi ve vmware serverı gayet hızlı biçimde indiriyor şu an. sizde denediyseniz yorum girerseniz haberimiz olur.

indirme yöneticisi kurulumda türkçe opsiyonuda var.

360 derecelik videolar

ben ilk defa gördüm haitideki deprem bölgesinde cnn böyle bir çekim yapmış. videoda böyle bişey hiç gelmezdi aklıma sonra araştırdım biraz olay panaromik fotoğrafdan geliyor. bu işi yapan kameranın sanırım 11 tane objektifi var ve bu kaynaklardan alınan resimler video üstünde birleştiriliyor sonuçta videoyu izlerken sağa sola tepeye aşağıya bakabiliyorsunuz.

cnn deki videoyu izlerken kendinizi oyunda geziyor gibi hissedebilirsiniz ilerde oyun sektörü bu işe bulaşır sanırım 🙂 bu iş için kullanılan cihaz buyrun

windows apache yavaş çalışması ve çözümü

benim başıma windows 2003(apache 2.2,php5) de geldi. apache işlemci yemiyor ram yemiyor ama bi şekilde çok geç cevap veriyor. baktım error log a

(OS 64)The specified network name is no longer available. : winnt_accept: Asynchronous AcceptEx failed.

bu ne ola diyip araştırdım. windowsa özel apache’ciler accept yerine acceptex diye bişey yazmışlar oda bazennedi patlarmış windowsda buda onun hatası. çözümü kolay httpd.conf dosyasına aşağıdaki satırları ekleyip restart edin.

EnableMMAP off
EnableSendfile off
Win32DisableAcceptEx

ben siteyi kontrol ettim çalışması hızlanmıştı. upload falan denemedim 🙂 bi patlak olursa o bölgede kullanıcılar nasılsa döner.

linuxde ram e göre servis kapatıp açmak

daha önceki yazımda php killemekden bahsetmiştim bunuda crona sokup apache nin gerekeni yapacağına inanıyordum lakin umduğum gibi olmadı kill i yiyen php bidaha gelmedi. bu durumda şişip duran ramı nasıl kurtarabilirim. tabiiki rame bakıp eğer şişen servisimi restart edersem olay tamamdır.

benim durumumda apache2 servisi bi şekil php nin stabilsizliğinden belirsiz bi yerden patlıyor ve şişmeye başlıyor bütün ramı doldurup sonunda linuxe ssh ile bağlanılamaz hale getiriyordu. öncelikle crontab komutumu göstereyim:


# m h dom mon dow command
*/1 * * * * /usr/bin/phpler

bu dakikada bir bunu çalıştır demek oluyor burayada “crontab -e” ile ulaşılıyor. şimdi phpler scriptimi gösterim:


#!/bin/bash
ramTotal=`free -mo | awk 'NR==2 {print $3}'`
if [ $ramTotal -ge 3600 ] ; then
echo "restart apache"
`/etc/init.d/apache2 restart`
`/usr/bin/mailgonder`
else
echo "long live php "
fi

buda özünde awk ve free komutuyla ne kadar ramın kullanıldığüını buluyor. benim serverımda 3969mb ram var ve 3600 den fazla ram kullanılıyorsa bu extrem bir durum linuxum için ve apache me restart veriyor. altındaki mailgonder ne olaki diyenler için buyrun:


#!/bin/bash
SUBJECT="siteismi restart oldu"
EMAIL="dont@spam.com"
tarih=`date`
EMAILMESSAGE="apache restart oldu $tarih"
echo "$EMAILMESSAGE" | mail -s "$SUBJECT" "$EMAIL"

buda apache restart olursa bana bir tane mail gönderiyor bu sayede bende olan bitenden haberdar olup durumu izleyebilirim.

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.