HttpContext altında sayfayı ziyaret edenin gerçek bir ziyaretçi mi yoksa bir crawler (örümcek) mi olduğunu anlayabilmemiz için bir property var. Request.Browser.Crawler şeklinde ulaşılabilen ve boolean bir değeri olan bu özellik hakkında nedense yeterli bilgi yok ve kullanıldığında sürekli false değeri dönüyor. Bunu düzeltmenin sihirli yolu ise web.config ya da machine.config dosyasında ufak bir değişiklik. Yapmanız gereken <system.web> bölümü altına aşağıda örneği bulunan <browsercaps> bölümünü eklemek.
<browserCaps>
<filter>
<!-- Google (Yahoo uses this as well) -->
<case match="^Googlebot(\-Image)?/(?'version'(?'major'\d+)(?'minor'\.\d+)).*">
browser=Google
version=${version}
majorversion=${major}
minorversion=${minor}
crawler=true
</case>
<!-- Googlebot -->
<case match="Googlebot">
browser=Googlebot
crawler=true
</case>
<!-- Google Adsense -->
<case match="Mediapartners-Google">
browser=GoogleAdsense
crawler=true
</case>
<!-- Alta Vista (Scooter) -->
<case match="^Scooter(/|-)(?'version'(?'major'\d+)(?'minor'\.\d+)).*">
browser=AltaVista
version=${version}
majorversion=${major}
minorversion=${minor}
crawler=true
</case>
<!-- Alta Vista (Mercator) -->
<case match="Mercator">
browser=AltaVista
crawler=true
</case>
<!-- Slurp (Yahoo uses this as well) -->
<case match="Slurp">
browser=Slurp
crawler=true
</case>
<!-- MSN Bot -->
<case match="MSNBOT">
browser=MSN
crawler=true
</case>
<!-- Excite -->
<case match="ArchitextSpider">
browser=Excite
crawler=true
</case>
<!-- Twiceler -->
<case match="Twiceler">
browser=Twiceler
crawler=true
</case>
<!-- Lycos -->
<case match="Lycos_Spider">
browser=Lycos
crawler=true
</case>
<!-- Ask Jeeves -->
<case match="Ask Jeeves">
browser=AskJeaves
crawler=true
</case>
<!-- Alexa Crawler -->
<case match="ia_archiver">
browser=AlexaCrawler
crawler=true
</case>
</filter>
</browserCaps>
etiketler :
.net
Geçtiğimiz günlerde üzerinde çalıştığım bir projede elimdeki generic bir listenin
içerisindeki elemanları rassal olarak sıralamam gerekti. Biraz uğraş ve
denemeden sonra gayet güzel ve hızlı çalışan bir kod ortaya çıktı
sizlerle de paylaşmak istedim.
Bu işi yaparken asıl sorun rassal ama
tutarlı olmak, daha doğrusu benim kaygım bu idi ama karşılaştırılan iki
elemanın eşit olduğunu söylemediğimiz sürece burada sorun çıkmıyor.
Çünkü 1 2'den, 2 de 3'ten büyük dediğimizde 1'in 3'ten de büyük olduğu
sonucuna ulaşılabiliyor. Neyse fazla uzatmadan kodu vereyim :
Random _Randomizer = new Random();
private int listRandomizerComparison(object x, object y)
{
if ((x == null && y == null) || x == y)
{
return 0;
}
if (x == null || y == null)
{
return (x == null) ? -1 : 1;
}
return (_Randomizer.Next(10) > 5) ? 1 : -1;
}
Bu sıralamayı yapan methodumuz, şimdi de gelelim nasıl kullanacağımıza :
System.Collections.Generic.List<string> listToRandomize =
new System.Collections.Generic.List<string>();
for (int i = 0; i < 1000; i++)
{
listToRandomize.Add(i.ToString());
}
listToRandomize.Sort(listRandomizerComparison);
Burada 1000
elemanlı bir string listesi yapıyorum ve rassal olarak sıralıyorum,
listeniz çok büyükse bile endişeniz olmasın zira benim bilgisayarımda
1.000.000 (bir milyon) elemanlı bir string listesi için yaklaşık 3,5
saniyede işlem tamamlanıyor.
etiketler :
.net
Transparent backgroundu olan png formatlı imajlar internet explorer'in 7.0 öncesi sürümlerinde sorun çıkartır, saç baş yoldurur. Gri bir arka planda render edilerek iğrenç görüntülere sebebiyet verebilir. Bob Osola isimli bir arkadaş javascript ile ile bir çözüm bulmuş. Daha doğrusu msdn'de microsoft'un önerdiği
iğrenç çözümü biraz otomatikleştirmiş. Kullanımı da gayet basit; arkadaşın hazırlamış olduğu
pngfix.js dosyasını
<!--[if lt IE 7.]>
<script defer type="text/javascript" src="pngfix.js"></script>
<![endif]-->
şeklinde include ediyoruz ve sorunumuz çözülüyor. :-) Map ve rollover için de ayrıca çözümler mevcut...
Ayrıntılı bilgi için :
http://homepage.ntlworld.com/bobosola/
etiketler :
.net
Klasik programlama dillerinden sıkılanlara farklı bir dil. Teorik olarak mümkün olacak en küçük compiler'e sahip çünkü sadece ve sadace 8 komutu var ve bu konutlar tek karakterden oluşuyor.
Detaylı bilgi için :
http://en.wikipedia.org/wiki/Brainfuck İşte tüm komutları ve c'deki karşılıkları :
| brainfuck command | C equivalent |
> | ++ptr; |
< | --ptr; |
+ | ++*ptr; |
- | --*ptr; |
. | putchar(*ptr); |
, | *ptr=getchar(); |
[ | while (*ptr) { |
] | } |
Bu komutlar dışındaki her karakter comment olarak algılanıyor. :-) Hello World örneği uzun ve anlaşılmaz olmasına rağmen bu dille yazılmış bir kaç basit oyun bile var. Eğer bu dil yeterince kafanızı karıştırmamışsa eksinin artı, büyüktürün küçüktür demek olduğu
ReverseFuck diline de bir göz atabilirsiniz...
:-)
etiketler :
brainfuck .net