Tuesday, December 3, 2013

clone js object (lazy way)

var ax = {};
var bx = jQuery.extend(true, {}, ax);

Friday, November 22, 2013

console.table

tabular veri veya benzer duzenli verileri isledigimiz uygulamarda debugging amacli console.log yerine console.table kullanmak daha mantikli azizim.
Bunu da bugun ogrenmem buyuk kayip.

Mesela verimiz

var data = [ {"name":"Bob Dylan","date":"1977-10-01"}, {"name":"Janis Joplin","date":"1978-03-01"} ];


console.log(data) su ciktiyi veriri consola :

Ama console.table(data) dersem :






Bunu da surdan okudum az evvel.

Friday, October 4, 2013

Scroble with python / scroble.py

#!/usr/bin/env python
"""
usage 
python scroble.py <artist> <song> <timestamp>
"""
 
import sys
import time
import pylast
 
API_KEY = "api-key";
API_SECRET = "api-secret"
USERNAME = "lastfm-username"
PASSWORD = "lastfm-password"
 
 
 
 
def main(): 
  artist = sys.argv[1] 
  title = sys.argv[2]
  song_started = sys.argv[3]
  network = pylast.LastFMNetwork(api_key = API_KEY, api_secret = API_SECRET, username = USERNAME, password_hash = pylast.md5(PASSWORD))
  network.scrobble(artist = artist, title = title, timestamp = song_started)
 
if __name__ == "__main__":
  main()

#https://gist.github.com/hasantayyar/6826107

Tuesday, March 26, 2013

Redis Transactions ve Rollback

Azizim transaction denildiğinde iki ana başlık temeldir "Rollback" ve "Rollforward" [1]. Hatta bana sorarsan en önemli olay rollbak olayıdır. Bir şeyler fena halde sarpa sararsa bir şeyler kötü giderse rollback eylersin. 
Lakin benim de pek sevdiğim Redis'de işler böyle yürümüyor. 
Redis özelliklerinni listelendiği sayfada "Transaction" da yer alıyor : 

Fakat redis transaction ile şunu kastediyor :
  1. Failsafe query
  2. Sorgularınızın ya tamamı çalışır ya da hiç biri çalışmaz.
Aklınızda olsun her transaction özelliği rollback özelliği var demek olmuyor. Redis'de kendiniz rollback yapacaksınız. 
Redisin bu duruma mantıklı bir açıklaması var tabi 

Why Redis does not support roll backs?
If you have a relational databases background, the fact that Redis commands can fail during a transaction, but still Redis will execute the rest of the transaction instead of rolling back, may look odd to you.
However there are good opinions for this behavior:
  • Redis commands can fail only if called with a wrong syntax (and the problem is not detectable during the command queueing), or against keys holding the wrong data type: this means that in practical terms a failing command is the result of a programming errors, and a kind of error that is very likely to be detected during development, and not in production.
  • Redis is internally simplified and faster because it does not need the ability to roll back.
An argument against Redis point of view is that bugs happen, however it should be noted that in general the roll back does not save you from programming errors. For instance if a query increments a key by 2 instead of 1, or increments the wrong key, there is no way for a rollback mechanism to help. Given that no one can save the programmer from his errors, and that the kind of errors required for a Redis command to fail are unlikely to enter in production, we selected the simpler and faster approach of not supporting roll backs on errors.


Konuyla ilgili diğer bağlantılar






[1] Transaction processing : http://en.wikipedia.org/wiki/Transaction_processing

Thursday, March 14, 2013

Google Reader'ın kapanması

Bir çok uygulamanın beslendiği ve en sevdiğim araçlardan olan google reader'ın kapanacak olması fena azizim.

Official Blog: A second spring of cleaning

Monday, March 11, 2013

MongoDB 2.4 ve GeoJSON desteği

Geospatial sorgulari MongoDb ile zaten keyifle yapabilmekteydiniz. Haberin yoksa hemen incele : http://docs.mongodb.org/manual/applications/geospatial-indexes/

MongoDb 2.4 versiyonunda ise GeoJSON desteği gelmiş oldu [docs]. 2.4 versiyonunda baska guzel seyler de var tabiki.


GeoJSON geometrik sekilleri json formatinda daha rahat tanimlamayi sagliyor.
Ornek bir cizgi

{ type: "LineString", coordinates: [ [0.0, 10.0], [10.0, 20.0] ] }
Bir polygon
{
  "type": "Polygon",
  "coordinates": [ [ [ 40, 5 ], [ 40, 6 ], [ 41, 6 ], [ 41, 5 ], [ 40, 5 ] ] ]
}

GeoJSON tanimlamarinin bir standarti var. Hepsi burda : http://www.geojson.org/geojson-spec.html

Daha cok ornek icin : http://www.geojson.org/geojson-spec.html#examples


Linkler

Monday, March 4, 2013

PyMongo ile çalışmak eğlenceli

http://blog.pythonisito.com/2012/01/moving-along-with-pymongo.html

Pymongo ile çalışmak inanılmaz eğlenceli.

pip install pymongo
veya
easy_install pymongo

Zaten yüklüyse güncellemek için
pip install --upgrade pymongo
veya
easy_install -U pymongo 

Yüklemede başka sorunlar yaşarsanız http://api.mongodb.org/python/current/ sayfasını inceleyin.

Hello world :

Tıpkı mongo konsolunda kullandığımız şekilde objeleri gönderebilmek harika. Nodejs dahil diğer hiç bir mongo driver'ı ile bu kadar rahat olmamıştı mongo sorguları.

import pymongo
con = pymongo.Connection()
# veya 
#from pymongo import Mongoclient
#con = MongoClient('localhost', 27017)
#bazı bağlantı parametreleri var. Şuradan görebilirsiniz : 
# http://api.mongodb.org/python/current/api/pymongo/mongo_client.html#pymongo.mongo_client.MongoClient

db = con.mytestdb
#veya 
#db = con['mytestdb']

db.testcollection.insert({"name":"hello"})
#Toplu insert işlemelrinde de objeleri array oalrak geçebilirsiniz
db.testcollection.insert([{"name":"hello"},{"name":"world"}])

#Şimdi eklediklerimizi listeleyelim
db.testcollection.find()
#Aslında bu sorgu tüm kayıtları getirmez ancak tüm kayıtları çekmeniz için size bir cursor objesi verir. 

list(db.testcollection.find())
#[{u'_id': ObjectId('51343ccd3a8c4a30eb2e01fe'), u'name': u'xyz'}, {u'_id': ObjectId('513448f73a8c4a366ad506d4'), u'name': u'hello'}, {u'_id': ObjectId('513448f73a8c4a366ad506d5'), u'name': u'world'}]

db.testcollecion.ensure_index('name')
#index oluşturma

db.testcollection.find({"name":"Hello"})

db.testcollection.find({"name":"Hello"}).explain()
#sorguyu çalıştırma mysql'deki "explain extended" gibi size sorguda indexin kullanılma durumunu verir.

db.testcollection.find({"name":"Hello"}).sort([ ('name', 1), ('otherfield', 1)])

# $set, $unset, $push, $pushAll, $addToSet, $pop,$pull, $pullAll, $rename, $bit gibi update operatorlerini rahatlıkla kullanabilirsiziniz. Bu operatorlerle ilgili detaylı bilgi http://docs.mongodb.org/manual/applications/update/#update-operators
db.testq.update({"name": "Hello"}, {"$set": {"name": "Updated"}})



pymongo tutorials : http://api.mongodb.org/python/current/tutorial.html
pymongo examples : http://api.mongodb.org/python/current/examples/index.html

Image publishing checklist

  1. Don't embed important text inside images
  2. Describe your image. Give a good description. Beware of long "alt" attibute values. Or google rank you as a spam because of "keyword stuffing".
  3. License your images. Add a small "Terms of Use". You will like Creative Commons.
  4. Generate your images different size formats for your needs.
  5. Specify your image dimensions in html.

future reading https://www.magic-picture.com/5-best-ways-to-optimize-images-for-seo/

Friday, March 1, 2013

MongoDb $in vs $or

Bir değer için $in ve $or arasında hangisinin daha performanslı olacağına karar veremdiyseniz rahatlıkla $in'i tercih edebilrisiniz.
$or birden farklı alanların sorgulanması sırasında tavsiye ediliyor.

http://docs.mongodb.org/manual/reference/operator/or/:

When using $or with <expressions> that are equality checks for the value of the same field, choose the $in operator over the $or operator.


Tuesday, February 26, 2013

Try Mongo-Hacker - a colorful and pretty mongo console

just a tiny mongorc.js -

For mongodb 2.0.x users remove or comment "setVerboseShell(true);" on line 34

clone mongo_hacker to your home dir
cd ~
mkdir .mongo
cd .mongo
git clone https://github.com/TylerBrock/mongo-hacker.git
cd mongo-hacker
#backup old mongorc 
cp ~/.mongorc.js ~.mongorc.js.backup 
#link new one 
ln -sf ~/.mongo/mongo-hacker/mongo_hacker.js ~/.mongorc.js 


Sunday, February 24, 2013

Vagrant Bridged Network

Uncomment this line from Vagrantfile

config.vm.network :bridged

Then

vagrant up

Vagrant will list you to select a network. That's all.


Friday, February 22, 2013

Noqsl Meta - Cassandra, Mongodb, CouchDB, Redis,ElasticSearch, Kyoto Tycoon, Neo4j

Cassandra, Mongodb, CouchDB, Redis,ElasticSearch, Kyoto Tycoon, Neo4j yeteneklerine pek değinmeden genel bilgilerini karşılaştırmalı sunan bir tablodur. Bir performans karsilastirmasi degildir!

MongoDB 

Yazıldığı Dil: C++
Lisans: AGPL
Veri İletişim Protokolü: binary (BSON)
En iyi kullanım örneği :  Dinamik veri yapisi ihtiyaclarinizda. Surekli yeni diskler ve makinelerle genisletmeniz gerekecek derecede fazla buyuyen veriniz oldugunda.  CouchDb nin cabuk buyuen ve kolay kontrol edilebilen bir haline ihtiyac duydugunuzda.

Redis

Yazıldığı Dil: C/C++
Lisans: BSD
Veri İletişim Protokolü: Telnet-like
En iyi kullanım örneği :  Disk-backed in-memory database en onemli ozelligi. MongoDb orneginden oldugu gibi surekli artan verilerde degil ancak surekli ve sikca degisen verilerde kullanilmasi onerilir..

CouchDB

Yazıldığı Dil: Erlang
Lisans: Apache
Veri İletişim Protokolü: HTTP/REST
En iyi kullanım örneği :  Bi-directional (!) replication en onemli ozelligi. MongoDb de belirtigi gibi cok ve surekli buyuen datalar olmadiginda ama yine esnek bir data yapisi ve ayni zamanda versiyonlama çok önemli oldugunda.

Cassandra (1.2)

Yazıldığı Dil: Java
Lisans: Apache
Veri İletişim Protokolü: Thrift & custom binary CQL3

En iyi kullanım örneği :  Write/Read orani çok çok yuksekse ve yazma hizi onemliyse (mesela loglar). Java ile cok iyi hider

All nodes are similar, as opposed to Hadoop/HBase
Cross-datacenter replication
Querying by column, range of keys (Requires indices on anything that you want to search on)
Can be used as a distributed hash-table, with an "SQL-like" language, CQL (but no JOIN!)



Neo4j (V1.5M02)

Yazıldığı Dil: Java
Lisans: GPL, some features AGPL/commercial
Veri İletişim Protokolü: HTTP/REST (or embedding in Java)

En iyi kullanım örneği :  Graph islemlerinizde harika cozum sunar!
Full ACID
For searching routes in social relations, public transport links, road maps, or network topologies.

ElasticSearch 

Yazıldığı Dil: Java
Lisans: Apache
Veri İletişim Protokolü: JSON over HTTP (Plugins: Thrift, memcached)
Stores JSON documents

En iyi kullanım örneği :  Esnek dokumanlariniz ve gelismis arma ihtiyaclariniz oldugunda. fuzzy search ihtiyaci. Geodistance ihtiyaci oldugunda.

Kyoto Tycoon (0.9.56)

Yazıldığı Dil: C++
Lisans: GPL
Veri İletişim Protokolü: HTTP (TSV-RPC or REST)

En iyi kullanım örneği :  Memcache'e alternatif daha yetenekli bir seyler aradiginizda cozum olacaktir.

Hot backup, asynchronous replication (MongoDb'de de gelismis olarak olan bir ozellik.)
background snapshot of in-memory databases
Auto expiration (can be used as a cache server) (Redis'de de olan bir ozellik)



Thanks to Kristóf

Friday, February 8, 2013

ffmpeg + youtube-dl + bash = automatic youtube music downloader

$ sudo apt-get install  ffmpeg libavcodec-extra-53
$ sudo youtube-dl
$ vim ~/.bashrc 
or for zshell users
$ vim ~/.zshrc 

add
mp3(){
    youtube-dl $1 --extract-audio --title --audio-format mp3

 usage

mp3 http://www.youtube.com/watch\?v\=cRbFP0oHmRc

it will download the video and convert it to mp3.


Thursday, February 7, 2013

php5 MongoClient 64bit integer problem

php-mongo ve long int değerlerle (tckn gibi) çalışırken sorun yaşamamak için php dosyanız içinde
ini_set('mongo.native_long', 1);

yapabilir veya php.ini içine
[mongodb]
mongo.native_long = 1


ekleyebilirsiniz

vsftp anonymous user

$ sudo  vim /etc/vsftpd.conf


anonymous_enable=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
no_anon_password=YES
local_root=/path/for/local/user
anon_root=/path/for/anon/user



"anon_root=/path/for/anon/user" değerini mutlaka eklemeniz gerek yoksa anonymous_enable olsa bile anonymous giriş yapamazsınız.

Monday, January 28, 2013

#tips for your search page/engine -2

Don't send the query to search engine as you get from user input. Check and validate. And remove unnecessary special symbols.

A * can break your site 



Or gets all document. If you don't have limited result set this may break your site, too. 



#tips for your search page/engine -1

Sanitize user inputs. Please do this. Or :


Thursday, January 10, 2013

MongoDb ve FullText Search

Gecen Kasim ayinda gerceklesen MongoSV konferansinda MongoDb ile bir fulltext search demosu yapilmisti.
Ve bir sure bu ozellik nightly buildlere eklenmedi fakat git uzerinden takip edilebiliyordu.
Ancak artik 2.3.2 unstable versiyonu ( http://www.mongodb.org/downloads ) ile mongodb fulltext deneyimini test edebilirsiniz.


Asil onemli olan 2.4 versioyununda Stemming, Turkce destegi ve stop-words gelecek olmasi.

Tabiki bir Solr veya Elasticsearch degil ancak zaten asil amac kapsamli bir search engine olmak da degil.

Bir collection'da fulltext search aktiflestirmek icin ilk komut
db.adminCommand( { setParameter : "*", textSearchEnabled : true } );
Arama yapmayi dusundugumuz attribute icin index olusturmaliyiz. Index tipi "text"

db.tests.ensureIndex( { "summary": "text" } );
Ve arama yapmak icin

db.tests.runCommand( "text", { search: "Lorem" } );

Wednesday, January 9, 2013

DotCloud Hemen Test Edip Kullanın

dotcloud.com

Heroku gibi node, python, ruby veya php uygulamalarinizi yukleyip yukunuze gore optimize edebileceginiz bir uygulama sunucusu.  Yine Heroku gibi eklentileri var. Mysql, redis, mongo, rabbitmq gibi

Hemen denemek icin CLI'ini indirmek gerek.
sudo pip install dotcloud
#belki oncesinde pip kurmaniz gerekebilir
#sudo easy_install pip
Ilk adim yeni bir proje dizini olusturun ve dotcloud bilgilerinizi girmek icin setup komutu verin
mkdir test1
dotcloud setup 
Tum ayarlari yml dosyalari uzerinden yapiyorsunuz. Ekleyeceginiz eklentileri veya uygulama turunu yml dosyasi ustunde yapiyorsunuz.

dotcloud create helloworldapp
calistirir calistirmaz dotcloud.yml dosyasinin olustugunu goreceksiniz
Ilk uygulamaniz icin http://docs.dotcloud.com/ adresinden konfigurasyon detaylarini gorebilirsiniz.
Ucretsiz olarak hemen deneyebilirsiniz.


Sunday, January 6, 2013

XtraFinder - tabbed finder window on mac

www.trankynam.com/xtrafinder/ kullanmaya başladım. Finder da tab daha verimli oluyor.


FindBigMail - gmail kotanız dolduysa

Evet 7Gb gibi bir kota da rahatlikla dolabilir. Siz de benim gibi aktif gmail kullaniyorsaniz ve dosya eklerini bazen abartiyorsaniz arada www.findbigmail.com kullanarak eskide kalmis ve mail kutunuzu sisiren mailleri gorebilirsiniz.



Taradiktan sonra solda etiketler olustugunu goreceksiniz.

Tuesday, January 1, 2013

Macports sucks, as always

Son Xcode guncellemelirinizden sonra siz de "ports selfupdate" sonucunda asagidaki gbi bir hata almis olabilirsiniz

Error: /opt/local/bin/port: port selfupdate failed: Error synchronizing MacPorts sources: command execution failed 

Sadece su komutlarinhem dogrudan hem de /usr/bin altinda calistirilabilr oldugundan emin olun. Eger /usr/bin altinda yoksalar /opt/local/bin/ altindan linkleyebilirsiniz.


  • rsync
  • tclsh
  • openssl
  • tar
  • chmod
  • chown