Ahmet Oğuz Koca

Sosyal olaylar.

Windows üzerinde node.js ile çalışma

 

Geçen ay Microsoft yazılım geliştirme bölümünün başkanı Scott Guthrie twitter’dan node.js takımı ile çalışmaya başladıklarını duyurmuştu. Node.js’in 0.5.2 versiyonu ile birlikte resmi sitede windows için çalıştırabilir uygulama (exe) dosyası yayınlandı. Buradan indirerek windows makinalarınızda node.js uygulamalarınızı çalıştırmaya başlayabilirsiniz.
 
Uygulama dosyasını indirdikten sonra basit bir 'hello world' uygulaması yazmak için şu adımları izleyebilirsiniz.
 
Öncelikle sunucu üzerinde belirli bir portu gelecek talepleri dinleyecek javascript kodumuzu yazıyoruz.
 
var http = require('http');
http
.createServer(function(req, res){
 res
.writeHead(200,{'Content-Type':'text/plain'});
 res
.end('Hello World\n');
}).listen(1337,"127.0.0.1");
console
.log('Server running at http://127.0.0.1:1337/');
 
Bu kodu server.js adıyla node.exe dosyasını indirdiğiniz dizine kaydedip daha sonra komut satırından

node.exe server.js

ile çalıştırıyoruz.
 
Daha sonra tarayıcınızdan yazdığımız kod ile gelen talepleri dinlemek istediğimiz porta talepte bulunuyoruz.

 

 

 

Node.js hakkında daha detaylı bilgi sahibi olmak ve daha spesifik uygulamalar yazmak için bu kaynaklara göz arabilirsiniz.
 
Node.js ücretsiz e-kitap => http://www.nodebeginner.org/
 
Node.js çeşitli uygulamalar => http://nodetuts.com/index.html

 

Veri tabanı tasarımı için 20 ipucu

1) Tutarlı ve iyi tanımlanmış tablo/sütun isimleri kullanın. ( Okul, Ogrenci, KursNO)

2) Tablo isimleri için çoğul isimler kullanmayın ( Ogrenci/Ogrenciler Student/Students) Tablolar zaten varlık koleksiyonlarını içerirler çoğul kullanmanıza gerek yoktur.

3) Tablo isimlerinde boşluk karakteri kullanmayın. Eğer kullanırsanız veritabanı sunucusu tipine göre sorgularınızda köşeli parantez, süslü parantez gibi ekstra ifadeler kullanmak zorunda kalabilirsiniz bu da kodlama sırasında hatalar yapmanıza sebep olabilir.

4) Tablo isimlendirirken gereksiz ön ek ve son eklerden kaçının (tblOgrenci, OgrenciTbl, OgrenciTablosu)

5) Şifre alanlarını kriptolayarak saklayın. (MD5, SHA1, bazı alanlar için base64 v.s.)

6) Bütün tablolarınıza sayı değeri barındıran bir kimlik sütunu bulundurun (Id alanı). Başlangıçta lazım olmasa bile ilerde lazım olma ihtimali yüksektir. Ayrıca bazı ORM araçlarının tablo üzerinde işlem yapmak için benzersiz bir ‘id’ alanına ihtiyaç duyduğunu aklınızda bulundurun.

7) Index oluşturmak için sayı (integer) tipli alanları tercih edin. Karakter (char/varchar) seçmeniz performans problemlerine neden olabilir.

8) Mantıksal (boolean) veri tipi için ‘bit’ tanımlaması kullanın. Karakter veya sayı kullanmanız gereksiz alan tüketimine sebep olur ayrıca bu alanlar için ‘Is’ öneki kullanabilirsiniz (İngilizce).

9) Veri tabanı için yetkilendirme sistemi kullanın, her kullanıcıya ‘yönetici’ admin rolü vermeyin.

10) Gerekmedikçe tablonuzdaki bütün sütunları seçen, ‘select *’ sorgusundan uzak durun. Sorgunuzda sadece gerekli sütunları isteyin.

11) Uygulamanız büyüdükçe ORM araçları kullanmaya yönelmeseniz. Başlangıçta performans kaybına neden olsa da ince ayar yaparak problemlerin üstesinden gelebilirsiniz.

12) Büyük ölçekli ve fazla kullanılmayan tabloları performans arttırmak amacıyla farklı disklerde tutmaya çalışın.

13) Büyük, hassas ve kritik önemi olan veritabanlarınız için yedekleme ve data güvenlik sistemleri kullanın (failover clustering, auto backups, replications)

14) Data bütünlüğünü sağlamak amacıyla alan kısıtlamalarını kullanın bütün denetleme işini uygulamanıza bırakmayın.

15) Varlık yapınızı, tablo ilişkilerinizi dokümente edin. Kullandığınız tetikleyicilerde (trigger) ve saklı prosedürlerde (stored procedures) yorum satırları ile yaptıklarınızı anlatın.

16) Büyük tablolar üzerinde çok kullandığınız sorgular için indexlemeye gidin. Analiz araçları hangi alanlarda indexlemeye gitmeniz gerektiği konusunda size yardımcı olabilir. Büyük çapta sonuç döndüren sorgular için ‘clustered index’ler, tekil sonuç döndürenler için ise ‘non-clustered’ indexler genellikle daha iyidir.

17) Veritabanı sunucusu ile web sunucusunu (uygulama sunucusu) farklı fiziksel makinalarda tutmaya çalışın. Bu hem performası (farklı cpu ve disk alanı kullanımından dolayı) artırır hem de daha fazla güvenlik sağlar (hack ataklarına karşı)

18) Sık kullanılan tablolarda resim (image) alanına yer vermeniz performans problemlerine sebep olabilir. Bu alanları farklı tablolarda tutmaya çalışın.

19) Gerektiğinde performansı arttırmak için normalizasyon (http://tr.wikipedia.org/wiki/Normalizasyon) yapmalısınız. Normalizasyonun az ya da çok olması performans problemlerine sebep olabilir.

20) Veritabanı modelleme ve tasarımı için daha fazla zaman ayırın. Eğer ayırmazsanız bu sizi bakım işlemleri sırasında aşırı vakit harcamak ve tablolarınızı yeniden dizayn etmek zorunda bırakabilir Orjinal Makale

 

 

Orjinal Makale 

 

20 Database Design Best Practices

 

http://codebalance.blogspot.com/2011/07/20-database-design-best-practices.html

 

 

 

 

 

Android üzerinde python ile basit kod denemeleri

Burdaki yazıda anlatılan android üzerinde python kurulumunu sorunsuz olarak tamamladıysak birkaç satır kod ile neler yapabileceğinizi göstermek faydalı olabilir

Python komut satırını açtıktan sonra bu ifadeleri girerek python ile twitter üzerine ufak bir arama işlemi yapabiliriz.

import urllib

f=urllib.urlopen("http://search.twitter.com/search.json?q=aokocax")

s=f.read()

f.close()

s

# :)

 

 

Android üzerinde python ile kodlama yapmak.

Friendfeed üzerinde birkaç arkadaşın ricası üzerine android işletim sistemine sahip telefonunuz üzerinde nasıl python scriptlerinizi çalıştırabileceğinizi anlatan bir yazı yazmam gerekti :).

Mümkün olduğu kadar basit olması için adım adım anlatma gereği duydum. Kendimde konunun uzmanı olmadığımdan dolayı hatalarım olmuş olabilir, mazur görmenizi diliyorum.

 

Öncelikle scriptlerimizi android telefonumuzda çalıştırmak için 

Scripting Layer for Android (sl4a) uygulamasını indirip kuruyoruz.

http://code.google.com/p/android-scripting/

 

Programı kurduktan sonra uygulamayı çalıştırdığınızda şöyle bir ekran ile karşılaşıyorsunuz.

 

 

Fazlası...

Twitlevel açıldı

Sosy.al altında geliştirdiğim uygulamalardan biri olan twitlevel hizmete girdi. Daha önce geliştirdiğim Sosy.al Değer'e ek olarak twitlevel'da ülke sıralamasına ek olarak dünya sıralaması özelliği de bulunuyor. Uygulama ayrıca twitter hesabınızın değerini level olarak görmenizi de sağlıyor.

http://twitlevel.com

 

Sosy.al çalışmalarına başladım

Sosyal medya projem sosy.al'in çalışmalarına başladım. Projede sosyal medyada ihtiyaç duyulan ama sitelerin sunmadığı bazı ek servisleri sunmayı planlıyorum.

Öncelikli olarak twitter, friendfeed ve facebook üzerine odaklanmayı planlıyorum ama sitenin çekeceği ilgiye göre diğer sosyal medya platformlarına da yönelebilirim.

Gelişmeleri blog'umdan takip edebileceğiniz gibi direkt olarak alanadından da projenin son halini görebilirsiniz.

http://sosy.al

 

Log dosyası silinen ms sql server veritabanını kurtarma

Dün gece sunucudaki web sitelerimden birine gelene brute-force şifre bulma saldırı ardından veritabanının log dosyasının 6 gb gibi bir rakama ulaştığını farkettim.
Saldırı için gerekli önlemleri aldıktan sonra .ldf uzantılı ilgili veritabanını log dosyasını sildim.
Daha sonra tekrar veritabanına bağlanmaya çalıştığımda Management Studio üzerindeki veritabanı ağacında veritabanının bütün işlemlere kapatıldığını gördüm.
Tabloyu silip tekrar oluşturur daha sonra .mdf dosyasını üzerine yazarım dedim ama malesef bu eski taktikte işe yaramadı.
Bir iki saat araştırmadan sonra bu kodla veritabanını onarabildim. Benzer durum yaşayabilecek arkadaşlar için paylaşayım istedim.

Not 1: Veritabanı sunucus MS Sql Server 2008 sp1

Not 2: Bu işlem sırasında veritabanınız hasar görebileceği için ilgili mdf dosyasınının mutlaka yedeğini alın.

1. ALTER DATABASE VeritabaniAdi
SET Emergency

2.ALTER DATABASE VeritabaniAdi
SET single_user

3. DBCC checkdb ('VeritabaniAdi', repair_allow_data_loss)

Eğer buraya kadar sıkıntı yoksa devam ediyoruz (bende basit bir hata verdi ama adımlara devam edip onarmayı tamamladım)

4. ALTER DATABASE VeritabaniAdi
SET multi_user

5. ALTER DATABASE VeritabaniAdi
SET online

TSQL ile uzak MsSql server'da sorgu çalıştırma

Bana sık sık lazım olunca blogumdan paylaşayım istedim

sp_configure 'show advanced options', 1;
RECONFIGURE;
GO
sp_configure 'Ad Hoc Distributed Queries', 1;
RECONFIGURE;
GO
Select * from opendatasource('SQLOLEDB','DATA SOURCE=ipadresi;UID=kullaniciadi;PWD=sifre').veritabaniadi.dbo.tabloadi

Adblock eklentisi kullanan tarayıcıları nasıl engelleyebilirsiniz?

Geçen günlerde firefox için bir e-posta eklentisi aramak amacıyla mozilla'nın sitesine uğramak durumunda kalmıştım, sitedeki popüler eklentilere baktığımda web sitelerindeki reklam alanlarını engelleyen "adblock" eklentisinin nerdeyse haftada 800.000 kez indirildiğini görünce oldukça şaşırdım.

Konunun derinlemesine tartışılacak bir çok yönü olmakla birlikte herhangi bir polemiğe meydan vermemek amacıyla direkt çözüme geçmeyi doğru buluyorum.

Bu eklentiyi kullanan taayıcılara karşı alınacak en basit yöntem bütün sitenizi veya sitenizdeki istediğiniz bölümü, adblock eklentisi tarafından reklam olarak algılatmaktan geçiyor.
Bu yöntemle siteye giren bu eklentiye sahip tarayıcılar siteniz yerine boş içeriği görmek durumunda olacaklar

Gelelim yönteme;

Sitenizde body etiketinin hemen altına veya istediğiniz içeriğin görüntülendiği tag'in hemen üstüne bu div etiketini yapıştırsanız adblock o bölgeyi reklam zannederek engelleyecek.

<div class="ads">

</div>


Adblock'un gelecek versiyonlarında bu yöteme karşı önlem alınacak olsa bile programın kendi algoritmasından faydalanarak yeni yöntemler üretebilirsiniz.