Dec 17, 2013

IAB Taksonomisi

Merhaba,
 
IAB, internetteki herhangi bir sayfayı sınıflandırabilmek için "Quality Assurance Guidelines (QAG) Taxonomy" denen en az iki seviyeli bir kategori listesi öneriyor.

Listenin uzun haline buradan erişebilirsiniz:

http://www.iab.net/QAGInitiative/overview/taxonomy

Listede 24 Ana Kategori, 380 tane alt kategori var. Evet, epey detaylı bir liste.
Liste akademik olarak taksonomiyle uğraşan uzmanlar, reklam ölçüm firmaları ve IAB üyesi diğer üyelerce oluşturulmuş. Contextual denilen ve sayfanın "bağlamını" ya da içeriğinin anlamını sınıflandırmaya yarayan bu kategorilerden ana kategorilere "Tier 1" kategorileri, alt kategorilere ise "Tier 2" kategorileri deniyor.

20'den fazla alt kategorisi olan Tier 1 kategorileri şu şekilde:
  1. Sağlık (45)
  2. Spor (44)
  3. Teknoloji (38)
  4. Hobiler (31)
  5. Seyahat (27)
  6. Otomotiv (21)
Listenin Türkçe versiyonunu hiç bir yerde bulamadığım için oturup sizler için çevirdim.

ANA KATEGORİALT KATEGORİ
HaberUlusal haberler
HaberYerel haberler
HaberUluslararası haberler
Hukuk SiyasetSiyaset
Hukuk SiyasetYorum / Tartışma
Hukuk SiyasetResmi kaynaklar
Hukuk SiyasetYasal sorunlar
Hukuk SiyasetGöçmenlik
SporFutbol
SporBasketbol
SporVoleybol
SporTenis
SporMasa tenisi
SporYüzme
SporOlimpiyat oyunları
SporAraba yarışı
SporBisiklet
SporVücut geliştirme
SporAt yarışı
SporAt binme
SporDövüş sanatları
SporMotorsiklet
SporYürüyüş
SporKoşu / jogging
SporPaintball
SporAvcılık ve atıcılık
SporGolf
SporBalık tutma
SporOltayla avlanma
SporTüplü dalış
SporYelkencilik
SporBoks
SporTırmanış
SporKano / kayaking
SporKaykay
SporKayak
SporSnowboard
SporSörf
SporDünya futbolu
SporDağ bisikleti
SporTatlı su balıkçılığı
SporTuzlu su balıkçılığı
SporBuz hokeyi
SporBeyzbol
SporAmigoluk
SporKriket
SporArtistik patinaj
SporTekerlekli paten
SporNascar
SporRodeo
SporRugby
SporSu kayağı
Sanat EğlenceTelevizyon
Sanat EğlenceSinema
Sanat EğlenceMüzik
Sanat EğlenceMizah
Sanat EğlenceKitap ve edebiyat
Sanat EğlenceGüzel sanatlar
Sanat EğlenceMagazin
Eğitimİngilizce
EğitimDil öğrenimi
EğitimOkul öncesi
Eğitimİlkokul
EğitimÜniversite hayatı
EğitimYüksek lisans
EğitimÖdev / Çalışma tavsiyesi
EğitimYetişkin eğitimi
EğitimÖzel okullar
EğitimÖzel eğitim
EğitimUzaktan öğrenim
EğitimAkademik yönetim
EğitimEvde eğitim
EğitimSanat tarihi
Eğitimİşletme
Yiyecek İçecekMekan önerileri
Yiyecek İçecekTürk mutfağı
Yiyecek İçecekÇay ve kahve
Yiyecek İçecekTatlılar
Yiyecek İçecekSağlıklı pişirme
Yiyecek İçecekIzgara
Yiyecek İçecekAlkollü içecekler
Yiyecek İçecekVejetaryen
Yiyecek İçecekÖzel mutfaklar
Yiyecek İçecekÇin mutfağı
Yiyecek İçecekFransız mutfağı
Yiyecek İçecekŞarap
Yiyecek İçecekBesin alerjileri
Yiyecek İçecekİtalyan mutfağı
Yiyecek İçecekMeksika mutfağı
Yiyecek İçecekJapon mutfağı
Yiyecek İçecekVegan
Yiyecek İçecekCreole mutfağı
ToplumEvlilik
ToplumArkadaşlık
ToplumEtnik azınlıklar
ToplumDüğünler
ToplumBoşanma
ToplumYaşlılık hayatı
ToplumErgenlik
ToplumEşcinsellik
SağlıkBeslenme
SağlıkZayıflama
SağlıkEgzersiz
SağlıkCinsel sağlık
SağlıkKadın sağlığı
SağlıkErkek sağlığı
SağlıkKısırlık
SağlıkKolesterol
SağlıkKalp hastalıkları
SağlıkBaş ağrısı / migren
SağlıkKanser
SağlıkBeyin hastalıkları
SağlıkMide sağlığı
SağlıkYorgunluk
SağlıkKronik ağrılar
SağlıkAlerji
SağlıkNezle ve soğuk algınlığı
SağlıkDiş sağlığı
SağlıkDepresyon
SağlıkPsikoloji / Psikiyatri
SağlıkHiperaktivite / Dikkat eksikliği
SağlıkPanik / Anksiyete
SağlıkÇocuk doktoru / Pediyatri
SağlıkFizik tedavi
SağlıkOrtopedi
SağlıkSigara bağımlılığı
SağlıkMadde kullanımı
SağlıkUyku bozuklukları
SağlıkDiyabet / Şeker hastalığı
SağlıkDermatoloji
SağlıkEpilepsi
SağlıkOtizim
SağlıkAstım
SağlıkAlternatif tıp
SağlıkŞifalı bitkiler
SağlıkGeriatri / Yaşlı sağlığı
SağlıkTiroid rahatsızlıklar
Sağlıkİdrar kaçırma
SağlıkİBS Bağırsak sendromu
SağlıkSağırlık
SağlıkDüşünsel şifa
SağlıkTaciz sonrası destek
SağlıkBipolar bozukluk
SağlıkAIDS
SağlıkArtrit / Eklem sorunları
Moda StilModa
Moda StilGiyim
Moda StilGüzellik
Moda StilAksesuar
Moda StilTakı
Moda StilVücut sanatı / body art
FinansFinansal haberler
FinansYatırım önerileri
FinansYatırım
FinansSigorta
FinansKredi / borçlanma
FinansBireysel emeklilik / BES
FinansHisse senetleri
FinansVergi
FinansYatırım fonları
FinansFinansal planlama
FinansKatılım fonu
FinansOpsiyonlar
Aile ÇocukHamilelik
Aile ÇocukÇocuk yetiştirme
Aile ÇocukBebek bakımı
Aile ÇocukKreş ve okul öncesi
Aile ÇocukAile ve internet
Aile ÇocukErgen yetiştirme
Aile ÇocukYaşlı bakımı
Aile ÇocukEvlat edinme
Aile ÇocukÖzel ihtiyaçlı çocuklar
AlışverişKarşılaştırma
AlışverişKupon
AlışverişYarışma ve hediyeler
EmlakEv alım satımı
EmlakDaire
EmlakMimarlık
OtomotivAlış satış
OtomotivMotorsiklet
OtomotivAraç kültürü
OtomotivGarantili ikinci el
OtomotivTamir
OtomotivYedek parça
OtomotivYol yardım
OtomotivEski araçlar
OtomotivDizel
OtomotivStation wagon
OtomotivSedan
OtomotivLüks araç
OtomotivHatchback
OtomotivÜstü açılır
OtomotivCoupe
OtomotivCrossover CUV
OtomotivElektrikli araç
OtomotivHibrit
OtomotivMini van
OtomotivOffroad araçlar
OtomotivPerformans araçları
OtomotivPikap
OtomotivKamyon ve kamyonet
KurumsalDevlet
Kurumsalİnşaat
KurumsalReklamcılık
KurumsalPazarlama
Kurumsalİnsan kaynakları
KurumsalKurumsal yazılım
KurumsalLojistik
KurumsalMadencilik
KurumsalBiyoteknoloji / Biyomedikal
KurumsalTarım
KurumsalOrmancılık
KurumsalYeşil çözümler
Kariyerİş arama
KariyerÜniversite
KariyerKariyer destek
KariyerBurslar
Kariyerİş fuarları
KariyerÖzgeçmiş yazımı
KariyerKariyer planlama
KariyerMali yardım
KariyerUzaktan çalışma
KariyerBakıcılık
KariyerAskeriye
Ev ve Bahçeİç dekorasyon
Ev ve BahçeAraç gereç
Ev ve BahçeTamirat
Ev ve BahçeTadilat / İnşaat
Ev ve BahçePeyzaj
Ev ve BahçeBahçe işleri
Ev ve BahçeEğlence
Ev ve BahçeEv sineması
Ev ve BahçeÇevre güvenliği
SeyahatOteller
SeyahatBalayı ve kısa tatiller
SeyahatUcuz seyahat
Seyahatİş seyahati
SeyahatHavayolu
SeyahatMacera yolculuğu
SeyahatAmerika
SeyahatKampçılık
SeyahatGemi yolculuğu
SeyahatSpa / Masaj salonları
SeyahatKonaklama ve kahvaltı
SeyahatAvrupa
SeyahatGüney Amerika
Seyahatİngiltere
SeyahatMeksika ve Orta Amerika
SeyahatJaponya
Seyahatİtalya
SeyahatYunanistan
SeyahatFransa
SeyahatDoğu Avrupa
SeyahatKarayipler
SeyahatKanada
SeyahatAvustralya ve Yeni Zelanda
SeyahatAfrika
SeyahatÇocuklu seyahat
SeyahatMilli parklar
SeyahatTema parklar
TeknolojiCep telefonları
TeknolojiFotoğraf Makineleri ve Kameralar
TeknolojiÜcretiz yazılımlar
TeknolojiEğlence
TeknolojiDonanım yorumları
TeknolojiDVD ve Video
TeknolojiAntivirüs
TeknolojiMP3 ve müzik
Teknolojiİnternet rehberi
TeknolojiWeb tasarımı / HTML
TeknolojiPC destek
TeknolojiArama
TeknolojiWindows
TeknolojiProgramlama
TeknolojiUnix
TeknolojiVeritabanı
Teknolojiİnternet teknolojileri
TeknolojiJava
TeknolojiJavascript
TeknolojiLinux
TeknolojiMac ve Macintosh
TeknolojiTaşınabilir bilgisayarlar
TeknolojiE-posta
TeknolojiAnimasyon
TeknolojiBilgisayar ağları
TeknolojiÇevre birimler
TeknolojiDatacenter
TeknolojiMasaüstü yayıncılık
TeknolojiMasaüstü videoculuk
TeknolojiMac OS
TeknolojiTelekonferans
TeknolojiAğ güvenliği
TeknolojiPDA
TeknolojiVisual Basic
TeknolojiClipart
TeknolojiGrafik yazılımı
TeknolojiSertifikasyon
Teknoloji3D Grafikler
HobilerSatranç
HobilerGitar
HobilerBulmaca / Masa oyunları
HobilerFotoğrafçılık
HobilerVideo oyunları
HobilerTakı tasarımı
HobilerÖrgü
HobilerÇizim
HobilerEl sanatları
HobilerKoleksiyonculuk
HobilerÇizgi roman
HobilerKağıt oyunları
HobilerKuş
HobilerResim
HobilerRadyo
HobilerBilim kurgu
HobilerAmatör kayıt
HobilerAmatör yazarlık
HobilerBoncuk işi
HobilerSihir ve ilüzyon
HobilerRol oyunları / Roleplaying
HobilerPul ve para
HobilerAhşap oymacılık
HobilerSenaristlik
HobilerFoto albüm / Scrapbooking
HobilerYatırımcı ve patentler
HobilerSanat ve teknoloji
HobilerMum ve sabun
HobilerPuro
HobilerSoyağacı araştırma
HobilerSerbest yazı
Evcil HayvanKedi
Evcil HayvanKöpek
Evcil HayvanKuş
Evcil HayvanAkvaryum
Evcil HayvanSürüngenler
Evcil HayvanVeterinerlik
Evcil HayvanBüyük hayvanlar
BilimHava durumu
BilimAstroloji
BilimDoğaüstü olaylar
BilimFizik
BilimBiyoloji
BilimKimya
BilimUzay ve astronomi
BilimCoğrafya
BilimBotanik
BilimJeoloji
Dinİslamiyet
DinAteizm ve Agnostiklik
DinAlternatif inançlar
DinHristiyanlık
DinYahudilik
DinBudizm
DinHinduizm
DinKatoliklik
DinPaganlık
DinMormonlar
DİĞERSINIFLANDIRILMAMIŞ
Aynı listenin ingilizce orijinalini de aşağıda bulabilirsiniz:

ANA KATEGORİALT KATEGORİ
NEWSNational News
NEWSLocal News
NEWSInternational News
LAW, GOVERNMENT & POLITICSPolitics
LAW, GOVERNMENT & POLITICSCommentary
LAW, GOVERNMENT & POLITICSU.S. Government Resources
LAW, GOVERNMENT & POLITICSLegal Issues
LAW, GOVERNMENT & POLITICSImmigration
SPORTSFootball
SPORTSPro Basketball
SPORTSVolleyball
SPORTSTennis
SPORTSTable Tennis/Ping-Pong
SPORTSSwimming
SPORTSOlympics
SPORTSAuto Racing
SPORTSBicycling
SPORTSBodybuilding
SPORTSHorse Racing
SPORTSHorses
SPORTSMartial Arts
SPORTSPower & Motorcycles
SPORTSWalking
SPORTSRunning/Jogging
SPORTSPaintball
SPORTSHunting/Shooting
SPORTSGolf
SPORTSGame & Fish
SPORTSFly Fishing
SPORTSScuba Diving
SPORTSSailing
SPORTSBoxing
SPORTSClimbing
SPORTSCanoeing/Kayaking
SPORTSSkateboarding
SPORTSSkiing
SPORTSSnowboarding
SPORTSSurfing/Bodyboarding
SPORTSWorld Soccer
SPORTSMountain Biking
SPORTSFreshwater Fishing
SPORTSSaltwater Fishing
SPORTSPro Ice Hockey
SPORTSBaseball
SPORTSCheerleading
SPORTSCricket
SPORTSFigure Skating
SPORTSInline Skating
SPORTSNASCAR Racing
SPORTSRodeo
SPORTSRugby
SPORTSWaterski/Wakeboard
ARTS & ENTERTAINMENTTelevision
ARTS & ENTERTAINMENTMovies
ARTS & ENTERTAINMENTMusic
ARTS & ENTERTAINMENTHumor
ARTS & ENTERTAINMENTBooks & Literature
ARTS & ENTERTAINMENTFine Art
ARTS & ENTERTAINMENTCelebrity Fan/Gossip
EDUCATIONEnglish as a 2nd Language
EDUCATIONLanguage Learning
EDUCATION7-12 Education
EDUCATIONK-6 Educators
EDUCATIONCollege Life
EDUCATIONGraduate School
EDUCATIONHomework/Study Tips
EDUCATIONAdult Education
EDUCATIONPrivate School
EDUCATIONSpecial Education
EDUCATIONDistance Learning
EDUCATIONCollege Administration
EDUCATIONHomeschooling
EDUCATIONArt History
EDUCATIONStudying Business
FOOD & DRINKDining Out
FOOD & DRINKAmerican Cuisine
FOOD & DRINKCoffee/Tea
FOOD & DRINKDesserts & Baking
FOOD & DRINKHealth/Lowfat Cooking
FOOD & DRINKBarbecues & Grilling
FOOD & DRINKCocktails/Beer
FOOD & DRINKVegetarian
FOOD & DRINKCuisine-Specific
FOOD & DRINKChinese Cuisine
FOOD & DRINKFrench Cuisine
FOOD & DRINKWine
FOOD & DRINKFood Allergies
FOOD & DRINKItalian Cuisine
FOOD & DRINKMexican Cuisine
FOOD & DRINKJapanese Cuisine
FOOD & DRINKVegan
FOOD & DRINKCajun/Creole
SOCIETYMarriage
SOCIETYDating
SOCIETYEthnic Specific
SOCIETYWeddings
SOCIETYDivorce Support
SOCIETYSenior Living
SOCIETYTeens
SOCIETYGay Life
HEALTH & FITNESSNutrition
HEALTH & FITNESSWeight Loss
HEALTH & FITNESSExercise
HEALTH & FITNESSSexuality
HEALTH & FITNESSWomen's Health
HEALTH & FITNESSMen's Health
HEALTH & FITNESSInfertility
HEALTH & FITNESSCholesterol
HEALTH & FITNESSHeart Disease
HEALTH & FITNESSHeadaches/Migraines
HEALTH & FITNESSCancer
HEALTH & FITNESSBrain Tumor
HEALTH & FITNESSGERD/Acid Reflux
HEALTH & FITNESSChronic Fatigue Syndrome
HEALTH & FITNESSChronic Pain
HEALTH & FITNESSAllergies
HEALTH & FITNESSCold & Flu
HEALTH & FITNESSDental Care
HEALTH & FITNESSDepression
HEALTH & FITNESSPsychology/Psychiatry
HEALTH & FITNESSA.D.D.
HEALTH & FITNESSPanic/Anxiety Disorders
HEALTH & FITNESSPediatrics
HEALTH & FITNESSPhysical Therapy
HEALTH & FITNESSOrthopedics
HEALTH & FITNESSSmoking Cessation
HEALTH & FITNESSSubstance Abuse
HEALTH & FITNESSSleep Disorders
HEALTH & FITNESSDiabetes
HEALTH & FITNESSDermatology
HEALTH & FITNESSEpilepsy
HEALTH & FITNESSAutism/PDD
HEALTH & FITNESSAsthma
HEALTH & FITNESSAlternative Medicine
HEALTH & FITNESSHerbs for Health
HEALTH & FITNESSSenior Health
HEALTH & FITNESSThyroid Disease
HEALTH & FITNESSIncontinence
HEALTH & FITNESSIBS/Crohn's Disease
HEALTH & FITNESSDeafness
HEALTH & FITNESSHolistic Healing
HEALTH & FITNESSIncest/Abuse Support
HEALTH & FITNESSBipolar Disorder
HEALTH & FITNESSAIDS/HIV
HEALTH & FITNESSArthritis
STYLE & FASHIONFashion
STYLE & FASHIONClothing
STYLE & FASHIONBeauty
STYLE & FASHIONAccessories
STYLE & FASHIONJewelry
STYLE & FASHIONBody Art
PERSONAL FINANCEFinancial News
PERSONAL FINANCEBeginning Investing
PERSONAL FINANCEInvesting
PERSONAL FINANCEInsurance
PERSONAL FINANCECredit/Debt & Loans
PERSONAL FINANCERetirement Planning
PERSONAL FINANCEStocks
PERSONAL FINANCETax Planning
PERSONAL FINANCEMutual Funds
PERSONAL FINANCEFinancial Planning
PERSONAL FINANCEHedge Fund
PERSONAL FINANCEOptions
FAMILY & PARENTINGPregnancy
FAMILY & PARENTINGParenting - K-6 Kids
FAMILY & PARENTINGBabies & Toddlers
FAMILY & PARENTINGDaycare/Pre School
FAMILY & PARENTINGFamily Internet
FAMILY & PARENTINGParenting teens
FAMILY & PARENTINGEldercare
FAMILY & PARENTINGAdoption
FAMILY & PARENTINGSpecial Needs Kids
SHOPPINGComparison Engines
SHOPPINGCouponing
SHOPPINGContests & Freebies
REAL ESTATEBuying/Selling Homes
REAL ESTATEApartments
REAL ESTATEArchitects
AUTOMOTIVEBuying/Selling Cars
AUTOMOTIVEMotorcycles
AUTOMOTIVECar Culture
AUTOMOTIVECertified Pre-Owned
AUTOMOTIVEAuto Repair
AUTOMOTIVEAuto Parts
AUTOMOTIVERoad-Side Assistance
AUTOMOTIVEVintage Cars
AUTOMOTIVEDiesel
AUTOMOTIVEWagon
AUTOMOTIVESedan
AUTOMOTIVELuxury
AUTOMOTIVEHatchback
AUTOMOTIVEConvertible
AUTOMOTIVECoupe
AUTOMOTIVECrossover
AUTOMOTIVEElectric Vehicle
AUTOMOTIVEHybrid
AUTOMOTIVEMiniVan
AUTOMOTIVEOff-Road Vehicles
AUTOMOTIVEPerformance Vehicles
AUTOMOTIVEPickup
AUTOMOTIVETrucks & Accessories
BUSINESSGovernment
BUSINESSConstruction
BUSINESSAdvertising
BUSINESSMarketing
BUSINESSHuman Resources
BUSINESSBusiness Software
BUSINESSLogistics
BUSINESSMetals
BUSINESSBiotech/Biomedical
BUSINESSAgriculture
BUSINESSForestry
BUSINESSGreen Solutions
CAREERSJob Search
CAREERSCollege
CAREERSCareer Advice
CAREERSScholarships
CAREERSJob Fairs
CAREERSResume Writing/Advice
CAREERSCareer Planning
CAREERSFinancial Aid
CAREERSTelecommuting
CAREERSNursing
CAREERSU.S. Military
HOME & GARDENInterior Decorating
HOME & GARDENAppliances
HOME & GARDENHome Repair
HOME & GARDENRemodeling & Construction
HOME & GARDENLandscaping
HOME & GARDENGardening
HOME & GARDENEntertaining
HOME & GARDENHome Theater
HOME & GARDENEnvironmental Safety
TRAVELHotels
TRAVELHoneymoons/Getaways
TRAVELBudget Travel
TRAVELBusiness Travel
TRAVELAir Travel
TRAVELAdventure Travel
TRAVELBy US Locale
TRAVELCamping
TRAVELCruises
TRAVELSpas
TRAVELBed & Breakfasts
TRAVELEurope
TRAVELSouth America
TRAVELUnited Kingdom
TRAVELMexico & Central America
TRAVELJapan
TRAVELItaly
TRAVELGreece
TRAVELFrance
TRAVELEastern Europe
TRAVELCaribbean
TRAVELCanada
TRAVELAustralia & New Zealand
TRAVELAfrica
TRAVELTraveling with Kids
TRAVELNational Parks
TRAVELTheme Parks
TECHNOLOGY & COMPUTINGCell Phones
TECHNOLOGY & COMPUTINGCameras & Camcorders
TECHNOLOGY & COMPUTINGShareware/Freeware
TECHNOLOGY & COMPUTINGEntertainment
TECHNOLOGY & COMPUTINGComputer Reviews
TECHNOLOGY & COMPUTINGHome Video/DVD
TECHNOLOGY & COMPUTINGAntivirus Software
TECHNOLOGY & COMPUTINGMP3/MIDI
TECHNOLOGY & COMPUTINGNet for Beginners
TECHNOLOGY & COMPUTINGWeb Design/HTML
TECHNOLOGY & COMPUTINGPC Support
TECHNOLOGY & COMPUTINGWeb Search
TECHNOLOGY & COMPUTINGWindows
TECHNOLOGY & COMPUTINGC/C++
TECHNOLOGY & COMPUTINGUnix
TECHNOLOGY & COMPUTINGDatabases
TECHNOLOGY & COMPUTINGInternet Technology
TECHNOLOGY & COMPUTINGJava
TECHNOLOGY & COMPUTINGJavaScript
TECHNOLOGY & COMPUTINGLinux
TECHNOLOGY & COMPUTINGMac Support
TECHNOLOGY & COMPUTINGPortable
TECHNOLOGY & COMPUTINGEmail
TECHNOLOGY & COMPUTINGAnimation
TECHNOLOGY & COMPUTINGComputer Networking
TECHNOLOGY & COMPUTINGComputer Peripherals
TECHNOLOGY & COMPUTINGData Centers
TECHNOLOGY & COMPUTINGDesktop Publishing
TECHNOLOGY & COMPUTINGDesktop Video
TECHNOLOGY & COMPUTINGMac OS
TECHNOLOGY & COMPUTINGNet Conferencing
TECHNOLOGY & COMPUTINGNetwork Security
TECHNOLOGY & COMPUTINGPalmtops/PDAs
TECHNOLOGY & COMPUTINGVisual Basic
TECHNOLOGY & COMPUTINGWeb Clip Art
TECHNOLOGY & COMPUTINGGraphics Software
TECHNOLOGY & COMPUTINGComputer Certification
TECHNOLOGY & COMPUTING3-D Graphics
HOBBIES & INTERESTSChess
HOBBIES & INTERESTSGuitar
HOBBIES & INTERESTSBoard Games/Puzzles
HOBBIES & INTERESTSPhotography
HOBBIES & INTERESTSVideo & Computer Games
HOBBIES & INTERESTSJewelry Making
HOBBIES & INTERESTSNeedlework
HOBBIES & INTERESTSDrawing/Sketching
HOBBIES & INTERESTSArts & Crafts
HOBBIES & INTERESTSCollecting
HOBBIES & INTERESTSComic Books
HOBBIES & INTERESTSCard Games
HOBBIES & INTERESTSBirdwatching
HOBBIES & INTERESTSPainting
HOBBIES & INTERESTSRadio
HOBBIES & INTERESTSSci-Fi & Fantasy
HOBBIES & INTERESTSHome Recording
HOBBIES & INTERESTSGetting Published
HOBBIES & INTERESTSBeadwork
HOBBIES & INTERESTSMagic & Illusion
HOBBIES & INTERESTSRoleplaying Games
HOBBIES & INTERESTSStamps & Coins
HOBBIES & INTERESTSWoodworking
HOBBIES & INTERESTSScreenwriting
HOBBIES & INTERESTSScrapbooking
HOBBIES & INTERESTSInvestors & Patents
HOBBIES & INTERESTSArt/Technology
HOBBIES & INTERESTSCandle & Soap Making
HOBBIES & INTERESTSCigars
HOBBIES & INTERESTSGenealogy
HOBBIES & INTERESTSFreelance Writing
PETSCats
PETSDogs
PETSBirds
PETSAquariums
PETSReptiles
PETSVeterinary Medicine
PETSLarge Animals
SCIENCEWeather
SCIENCEAstrology
SCIENCEParanormal Phenomena
SCIENCEPhysics
SCIENCEBiology
SCIENCEChemistry
SCIENCESpace/Astronomy
SCIENCEGeography
SCIENCEBotany
SCIENCEGeology
RELIGION & SPIRITUALITYIslam
RELIGION & SPIRITUALITYAtheism/Agnosticism
RELIGION & SPIRITUALITYAlternative Religions
RELIGION & SPIRITUALITYChristianity
RELIGION & SPIRITUALITYJudaism
RELIGION & SPIRITUALITYBuddhism
RELIGION & SPIRITUALITYHinduism
RELIGION & SPIRITUALITYCatholicism
RELIGION & SPIRITUALITYPagan/Wiccan
RELIGION & SPIRITUALITYLatter-Day Saints
UNCATEGORIZEDUNCATEGORIZED

Jun 14, 2012

VAST Nedir?

Biraz ön bilgi:
IAB: (Interactive Advertising Bureau) IAB ABD'deki online reklam trafiğinin %86'sını işleyen 500 öncü medya ve teknoloji firmasının ortak oluşturduğu bir platformdur.

VAST: (Digital Video Ad Serving Template) Herhangi bir video player uygulamasının içeriğini göstermeden önce reklam bilgisini isteyebilmesi için geliştirilmiş bir şablondur.

Adobe Flash Player kullanılarak yazılmış bir video player bir reklam sunucusundan reklam isteğinde bulunduğunda geriye dönen cevap ActionScript dilinde olsa, bu kendisi için anlamlı olsa da aynı cevap Silverlight'la yazılmış bir video player için uygun olmayacaktır. XML tabanlı bu yeni reklam formatı sayesinde gerçek zamanlı video uygulamaları, indirilebilen video player'lar gibi bir çok player türü için reklam sunucu tarafında ek bir geliştirme yapmaya gerek kalmadan video içi reklam gösterimi mümkün olabilmektedir.

Başlangıç noktası olarak, IAB reklam dünyasında reklamveren, reklam firmaları ve video player geliştiricilerinin her birinin ayrı ayrı kendi teknolojilerini implemente ettiğini ve bu yüzden teknolojiler arası uyumsuzluk ve işgücü kaybı olduğunu farketti. Bu sırada ortaya çıkan video player'lardan bazıları piyasada çok hızlı tutuldu ve büyük pazar paylarına ulaştı. Bunu takiben IAB VAST 1.0 formatıyla ortaya çıktı ve piyasaya dönemin ihtiyaçlarını karşılayan, XML tabanlı, farklı video player'lar ve reklam platformları arasındaki iletişimi ekstra bir formata ihtiyaç duymadan karşılayabilecekleri önemli bir araç sağladı. Bu versiyon hızla 2.0'a yükseldi. Daha uzunca bir aradan sonra ise Nisan 2012 itibariyle 3.0 versiyonu piyasaya sunuldu.


Peki bir VAST dokümanı nasıl görünüyor?

Şuraya tıklayın ve güzelliği kendi gözlerinizle görün.

Evet, yalan söylüyorum. VAST formatı gayet çirkin ve karmaşık görünüyor. Ama yazılım dünyasının işi de çoğunlukla çirkin görünen karmaşık şeyleri çözmek değil mi? :)

Bazı kaynaklar:

İlerleyen yazılarda, VAST içerisindeki tag'lerden ve ne işe yaradıklarından bahsedeceğim.

Jun 12, 2012

HyperLogLog C# implementation

Hi,

Ever wanted to count distinct things with small amounts of ram? Well the guys found an algorithm and called it "LogLog". Furthermore, a newer version called HyperLogLog arrived with some additional goodies. Pros: Speed and minimum use of Ram, Cons: The output is not exact, rather approximate.

I met LogLog and HyperLogLog while searching for the distinct problem here:
http://stackoverflow.com/questions/5990713/loglog-algorithm-for-counting-of-large-cardinalities

The js version of the user @actual was nice and clean, so I tried to convert it into C#. Tested with real life data of size ~1.2 million, the result was 91 to 99 percent correct. But with amazing speed!

Sample usage (Windows forms):
string[] words = {"sample","keywords"}; // 1.200.000 other strings.

foreach (string word in words)
    log_log.Add(word);
this.Text = string.Format("{0} calculated distinct items. ", log_log.Count());


public class HyperLogLog 
    { 
        private double mapSize, alpha_m, k; 
        private int kComplement; 
        private Dictionary<int, int> Lookup = new Dictionary<int, int>(); 
        private const double pow_2_32 = 4294967297; 
 
        public HyperLogLog(double stdError) 
        { 
            mapSize = (double)1.04 / stdError; 
            k = (long)Math.Ceiling(log2(mapSize * mapSize)); 
 
            kComplement = 32 - (int)k; 
            mapSize = (long)Math.Pow(2, k); 
 
            alpha_m = mapSize == 16 ? (double)0.673 
                  : mapSize == 32 ? (double)0.697 
                  : mapSize == 64 ? (double)0.709 
                  : (double)0.7213 / (double)(1 + 1.079 / mapSize); 
            for (int i = 0; i < mapSize; i++) 
                Lookup[i] = 0; 
        } 
 
        private static double log2(double x) 
        { 
            return Math.Log(x) / 0.69314718055994530941723212145818;//Ln2 
        } 
        private static int getRank(uint hash, int max) 
        { 
            int r = 1; 
            uint one = 1; 
            while ((hash & one) == 0 && r <= max) 
            { 
                ++r; 
                hash >>= 1; 
            } 
            return r; 
        } 
        public static uint getHashCode(string text) 
        { 
            uint hash = 0; 
 
            for (int i = 0, l = text.Length; i < l; i++) 
            { 
                hash += (uint)text[i]; 
                hash += hash << 10; 
                hash ^= hash >> 6; 
            } 
            hash += hash << 3; 
            hash ^= hash >> 6; 
            hash += hash << 16; 
            
            return hash; 
        } 
 
        public int Count() 
        { 
            double c = 0, E; 
 
            for (var i = 0; i < mapSize; i++) 
                c += 1d / Math.Pow(2, (double)Lookup[i]); 
 
            E = alpha_m * mapSize * mapSize / c; 
 
            // Make corrections & smoothen things. 
            if (E <= (5 / 2) * mapSize) 
            { 
                double V = 0; 
                for (var i = 0; i < mapSize; i++) 
                    if (Lookup[i] == 0) V++; 
                if (V > 0) 
                    E = mapSize * Math.Log(mapSize / V); 
            } 
            else 
                if (E > (1 / 30) * pow_2_32) 
                    E = -pow_2_32 * Math.Log(1 - E / pow_2_32); 
            // Made corrections & smoothen things, or not. 
 
            return (int)E; 
        } 
 
        public void Add(object val) 
        { 
            uint hashCode = getHashCode(val.ToString()); 
            int j = (int)(hashCode >> kComplement); 
 
            Lookup[j] = Math.Max(Lookup[j], getRank(hashCode, kComplement)); 
        } 
    }

Oct 24, 2009

Problems getting Telerik, UrlRewriting.Net, Ajax and Validators all working at once

Hello all.

It all started with me deciding to aggree with a friend of mine, who wanted some guy he could trust to develop a games portal for him.

After some analysis on what he needs, I have decided to use the following:

1.    UrlRewriter.NET (or Intelligencia as I prefer naming it), for URL rewriting obviously and Search Engine Optimization.

2.    Telerik for the great flexibility on reporting, custom controls and Ajax implementations.

3.    Simple custom validators to fulfill the specific kind of globalization / multilanguage support. (Just deriving their ErrorText properties from some cached Database source.)

4.    Masterpages for simplicity during client customization and ease of use in custom web controls. Such as header, footer, basket, titles, etc.

Sounds yummy, yeah? Well, it all started that way. Until some conflicts started occurring between the components I have choosen.

Here are the problems and solutions I have managed to compile:

1.    On an Ajax enabled page listing types of games that could be added to basket (call it GameDetail.Aspx), the basket container resided in a user control in the masterpage; while the “add to basket” buttons resided within the page that inherits that masterpage.

Running some tests, I found a solution to provide that.

    • In the page needing the ability to change the contents of the basket box, I added a reference to the the basket control:

      <%
      @ Reference VirtualPath="~/UserControls/BasketBox.ascx" %>
    • This way, I could access the user control within the masterpage from the page that inherited that masterpage as follows:

      UserControls_BasketBox objBox = this.Master.FindControl("ucBasketBox1") as UserControls_BasketBox;
      objBox.AddToBasket(ProductID, Count);


      You can see for yourselves that you can not access the same user control without the Reference.

2.    Solving the access issue, I thought I could ajax add the games to the basket without any postback (and errors to come!). But this wasn’t the case again.

To solve the unwanted postback issue, there was one more thing I had to do:

    • I moved the RadAjaxPanel of Telerik from the page to a temporary masterpage that would only be used by this page. I moved the AjaxPanel up to a level that it could contain both the basket box user control and the ContentPlaceHolder. (This could have been solved in other way[s] I assume, I’m just too lazy to read the Telerik samples.)
      I later added a RadScriptManager to the top of the masterpage, above the AjaxPanel I just mentioned.

      Testing the page by calling say localhost:1000/myGamez/GameDetail.aspx, all seemed fine. “Add to basket” buttons worked without postbacks, and I could update the BasketBox.ascx ajaxifically (yeah, new word).

      However, when I tested the rewritten url which is something like localhost:1000/myGamez/GameList/SeoFriendlyGameNameAndStuff_123 using Httpwatch, I saw that the “action” property of the one-and-only runat=server form on my page changed from that fancy seo-friendly name to the original GameDetail.aspx during ajax partial postbacks. It was still fine with me as long as it caused no errors. It actually didn’t cause any errors, not on this page at least!

3.    Real Problem: Solving the ajax-enabled basket issues, the client could now buy games. And I had to create a page in which the client could see his/her (well, not “her” actually, no girl pays money for games in my world) previous orders. This was supposed to be a simple page. I named it MyOrders.aspx, and created a rewrite rule that let me access it like “localhost:1000/myGamez/Financial/MyOrders”.

I used a Telerik RadGrid with its MasterTableView showing one specific Order summary in a row, while the only DetailTable showed the Product related sub-items within the Order Summary row. That is, I wanted the client to have the ability to first see previous orders in a neat page and later “click to expand” the order to see its contents if he needs to.

I handled the
grdOrders_DetailTableDataBind of the RadGrid to bind a DataSource to the DetailTable. This event was triggered by the default “expand” arrows of the RadGrid.
I continued adding some more orders to the application, and then decided it was time to implement paging as well as using Ajax for all the expand/collapse/paging stuff.
I handled the
grdOrders_PageIndex event again to do the paging as needed. And added a RadAjaxPanel to the page that encapsulated the Telerik RadGrid.
I tested the page and saw everyting working fine in peace by visiting
localhost:1000/myGamez/MyOrders.aspx.

Then I decided to visit the same page with the rewritten url,
localhost:1000/myGamez/Financial/MyOrders.

Data bound nicely, Ajax worked nicely, expand/collapse worked nicely, paging worked nicely. But these nicely tested events started failing randomly when they were fired for the second / third / some random number of time!

The error I received was a javascript alert window, saying:

Sys.WebForms.PageRequestManagerServerErrorException:
An unknown error occurred while processing the request on the server. The status code returned from the server was: 404


I then used HttpWatch and some javascript to see what might have caused the 404, namely “File Not Found” error.

I examined the page source, posted and received ajax contents and noticed two problems with this specific page:

    • The “action” property of the only form on the page wasn’t rendered to be “myGamez/Financial/MyOrders” on the page load as rewritten.
      It was rendered to be “../MyOrders.aspx”.

      To get this rendered correctly, I overrided the Render function of the page and interfere when the form was being rendered. I also used a CustomHtmlWriter class implementing HtmlTextWriter that the overridden Render function needed to call.

      MyOrders.aspx.cs:

protected override void Render(HtmlTextWriter writer)

{

writer = new CustomHtmlWriter(ref writer, " ", Request.RawUrl);

        base.Render(writer);
}

CustomHtmlWriter.cs:

public class CustomHtmlWriter : HtmlTextWriter

{

    private string _actionURL;

    public string ActionURL

    {

        get { return _actionURL; }

        set { _actionURL = value; }

    }

 

    public CustomHtmlWriter(ref HtmlTextWriter writer, string tabstring, string RewrittenAction)

        : base(writer, tabstring)

    {

        this.ActionURL = RewrittenAction;

    }

 

    public override void WriteAttribute (string name, string value, bool fEncode)

    {

        if (string.Compare(name, "action", true) == 0)

            value = ActionURL;

        base.WriteAttribute(name, value, fEncode);

    }
}

Before this fix, the form rendered:
<form name="Form1" method="post" action="
.. /MyOrders.aspx" onsubmit="javascript:return WebForm_OnSubmit();" id="Form1">

After, the form rendered:
<form name="Form1" method="post" action="
/myGamez/Financial/MyOrders" onsubmit="javascript:return WebForm_OnSubmit();" id="Form1">

Important note for this solution:
If you decide to use the form control within the UrlRewriter.net dll instead of what I explained above, you will get two new headaches: You will lose the ability to see your web pages during design time (some fancy conversion / cast error and all your controls are invisible but just a red error title).

And your validators will start working after the whole page posting back!
Well, I did test that too before overriding Render.

    • The so-hardly-rendered-correctly “action” property of the only form on the page was changing between these Ajax calls!
      This process took me really a long time, for not being sure what component caused the issue. After the tracking process, I found out that the javascript functions doing that was delivered from “
      localhost:1000/myGamez/Telerik.Web.UI.WebResource.axd?...”
      ...
      if(formActionNode){this._form.action=formActionNode.content;this._form._initialAction=this._form.action}
      ...

      After any Ajax postback occurs, I had to find a way to change the “action” and “_initialAction” of the form back to the original form. I noticed that the RadAjaxPanel had two methods that were suitable for this: ClientEvents-OnRequestStart and ClientEvents-OnResponseEnd.

      So I have handled these two client-side events:

<script type="text/javascript" language="javascript">

var _oldAction;

function reqStart(){_oldAction=document.forms[0].action;}

function reqEnd(){document.forms[0].action=document.forms[0]._initialAction=_oldAction;}

</script>

And:

<telerik:RadAjaxPanel ID="RadAjaxPanel1" runat="server" .... ClientEvents-OnRequestStart="reqStart" ClientEvents-OnResponseEnd="reqEnd">

 

You have read all my problems within the project and my ways to solve them.

These are the steps to replicate the problems:

1.    Create a new Web Project, call it testApplication.

2.    Download and implement UrlRewriter.net component / dll in the project following the samples on their web site.

3.    Create a master page (say it testMaster) and put some non-html text to show it comes from the master (i.e. "Rendering Master")

4.    Put a ContentPlaceHolder to the testMaster.

5.    Create a mastered web page using testMaster within a folder named “testFolder” and name this new page “test.aspx”.

6.    Create a corresponding rewriting rule which does not reside on the same level with the page according to the root.
Something like
:
<rewrite url="~/TestTime"  to="~/testFolder/test.aspx"/>

7.    Put some non-html text to show it comes from the page (i.e. "Rendering test.aspx")

8.    (Automatically) edit Web.config to get things working properly. Check both localhost:someport/testApplication/testFolder/test.aspx and localhost:someport/testApplication/TestTime both working as intended.

9.    Add a Telerik RadScriptManager, RadAjaxPanel and RadGrid to the page. Enable paging on the grid and  set PageSize of the RadGrid to a small number like 10.

10.  On the PageLoad of test.aspx.cs, checking "if (!Page.IsPostback)", bind some random data to the radgrid which is longer than 10 objects. This will force the RadGrid to have more than 1 pages and have ajax enabled postbacks. Implement the Grid’s paging event as well to actually see the paging working as intended. You should have some kind of input that triggers the grid to ajax-postback.

11.  First checkpoint: Your paging will start raising errors at random times (not random indeed, whenever the action property changes).
To get rid of that error, override the page’s Render method as explained in the way above in “MyOrders.aspx.cs”. This way your form’s action will render pointing to the rewritten url.

12.  Put the following javascript declaration which displays the html form's action property in a certain time interval (10 milliseconds in this example) on test.aspx:
<script type="text/javascript">
window.setInterval("window.status=document.forms[0].action;", 10);
</script

13.  This should display something like "/testApplication/TestTime" in this phase.

14.  Now keeping an eye on the left-bottom corner on your window’s status, navigate to the page 2 of the RadGrid.

15.  Second checkpoint: See the window.status changing from "/testApplication/ TestTime " to something like "../test.aspx".
Now if you try to navigate back to page 1, you get an error indicated by an alert message (404).
Weird observation: If the real page and the redirected page resides on the same conceptional folder level, this causes a full page postback and validators to mulfunction. If they are not, it causes an error. Neither of which is desired.
To get rid of that error, implement the ClientEvents-OnRequestStart and ClientEvents-OnResponseEnd functions as explained above.

16.  Finally: You should now have Telerik RadGrid, Ajax Postbacks, UrlRewriting and Validators all working at the same time!

I hope you don’t spend so much time like me to figure all those stuff out.

Happy programming!