• 17-04-2013, 12:21:20
    #10
    fatihsarac adlı üyeden alıntı: mesajı görüntüle
    bu node.js ve benzerlerini açıkcası ben de merak ediyorum. fakat "türk" olduğumuz için işimiz düşmeden öğrenmiyoruz. benim de bu zamana kadar socket programlamaya ihtiyacım olmadığı için hiç araştırmadım. @OfisSoft gibi hakkında "nedir? ne değildir? neye yarar? yenilir mi? içilirse daha mı şifalı olur?" makalelere çok rastladım ve okudum.

    ama bu zamana kadar dikkatimi çeken bir şey var, bu node.js ve benzerleri hakkında "kod" haricinde her şey anlatılıyor. bence bilgisi olan birileri bu noje.js için örnek uygulama nasıl yazılır onu anlatmalı. gerçi büyük ihtimalle bir çok kaynak vardır ama dediğim gibi işimiz düşmeden araştırıp öğrenmiyoruz.
    Tutsplus'ta bir kaç örnek uygulama var.

    http://net.tutsplus.com/tag/node-js/
  • 17-04-2013, 20:24:30
    #11
    fatihsarac adlı üyeden alıntı: mesajı görüntüle
    ama bu zamana kadar dikkatimi çeken bir şey var, bu node.js ve benzerleri hakkında "kod" haricinde her şey anlatılıyor. bence bilgisi olan birileri bu noje.js için örnek uygulama nasıl yazılır onu anlatmalı. gerçi büyük ihtimalle bir çok kaynak vardır ama dediğim gibi işimiz düşmeden araştırıp öğrenmiyoruz.
    Konu Node.js ile uzmanlaşmak yerine öğrenmek ise, açıkçası çok fazla bir kaynağa ihtiyacınız olacağını düşünmüyorum. Node.js çok yabancı bir platform değil zira kodlarınızı Javascript ile yazıyorsunuz. Eğer Javascript biliyorsanız, ki pek çok PHP programcısının en azından temellerini bildiğini farz ediyorum, Node.js ile programlama yapamamak için hiç bir nedeniniz yok. Bilmiyor olsanız dahi öncelikli olarak öğrenmeniz gereken dil Javascript ve öğrenmesi çok zor olan bir dil değil. Gerekli olan bütün bilgi API dökümanlarında var;

    http://nodejs.org/api/

    Bir kaç farklı örnek istiyorsanız eğer, Node.js ve npm kurulumlarını bilgisayarınıza yaptıktan aşağıdaki paketleri de indirin.

    npm install coffee-script
    npm install felixge/node-mysql
    Aşağıdaki kodu 'simple_node_server.coffee' olarak kaydedin ve terminalde aynı dizinde aşağıdaki kodu çalıştırın.

    coffee simple_node_server.coffee
    http = require('http')
    
    server = http.createServer (request, response) ->
        response.writeHead 200, {'Content-Type': 'text/html; charset=utf-8'}
        response.end 'Merhaba Dünya'
    
    server.listen 5555
    
    console.log 'http://127.0.0.1:5555/ adresinde sunucu dinliyor'
    Yukarıdaki basit örnek bir sunucu oluşturuyor ve 5555 nolu port üzerinden dinliyor. Gelen isteklere response ile cevap veriyor. Ancak gelen istekler için uğraşmak biraz yorucu. Tabii bunları PHP ile yaparken sunucu işlemlerini genellikle Apache gibi bir web sunucusuna bırakıyorsunuz. Istek bilgilerine $_POST, $_GET, $_SERVER gibi değişkenler vasıtasıyla ulaşıyorsunuz. Geri göndereceğiniz cevabı pek çok etkeni düşünmek zorunda kalmadan basit bir 'echo "Merhaba Dünya"; ' ile yapabiliyorsunuz. İşin bu kısmı Node.js bilmekten çok web sunucuları hakkında bilgi sahibi olmanıza dayalı. Zira HTTP sunucu desteği sağlayan pek çok farklı platform buna benzer bir arayüzü size sunuyor.

    Biraz daha ayrıntılı bir örnek isterseniz;

    'test' adını vereceğiniz bir veritabanına aşağıdaki tabloyu ekleyin.
    CREATE TABLE IF NOT EXISTS `entries` (
      `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
      `subject` varchar(16) NOT NULL,
      `content` text NOT NULL,
      `created_at` int(11) NOT NULL,
      `updated_at` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    Bu kodu 'simple_node.coffee' adındaki bir dosyaya kaydedin ve aynı dizinde iken, terminalde aşağıdaki komutu çalıştırın. Node.js ile 5555 nolu port üzerinde bir web sunucusu kurmuş olacaksınız. Bu sunucu aynı zamanda '/', '/new' ve '/create' yollarına cevap veriyor. 'Başlık' ve 'mesaj'dan oluşan verilerinizi 'mysql'den okuyabilir ve yeni veriler kaydedebilirsiniz.

    coffee simple_node.coffee
    port = 5555
    db_host = 'localhost'
    db_username = 'root'
    db_password = ''
    db_name = 'test'
    
    puts = (obj) ->
      console.log obj
    
    zeroFill = (number) ->
      return '' + number if number > 9
      '0' + number 
    
    Date::formatted = ->
      zeroFill(@.getDate()) + '.' + zeroFill(@.getMonth() + 1)  + "." +  @.getFullYear();
    
    class Server
      constructor: () ->
        @db = new DB(db_host, db_username, '').connect(db_name)
    
        @server = require('http').createServer (@request, @response) =>
          @route request, (data) =>
            @response.end data
    
      route: (request, callback) ->
        switch request.url
          when "/" then @index (data) -> callback(data)
          when "/new" then @new (data) -> callback(data)
          when "/create" then @create (data) -> callback(data)
          else @response.end 'Sayfa bulunamadı. <a href="javascript:window.history.back()">Geri</a>'
    
    
      run: (@port) ->
        @server.listen @port
        console.log "http://127.0.0.1:#{@port}/ adresinde sunucu dinliyor"
    
      index: (callback) ->
        @db.query "SELECT * FROM entries", (results) =>
          @response.writeHead 200, {'Content-Type': 'text/html; charset=utf-8'}
          data += '<h3>Index</h3>'
          data = "<table>"
          data += "<tr><th>ID</th><th>Konu</th><th>Mesaj</th><th>Gönderme</th><th>Güncelleme</th>"
          data += @create_entry_row result for result in results
          data += "</table>"
          data += '<a href="/new">Ekle</a>'
          callback(data)
    
      create_entry_row: (result) ->
        created_at = new Date(result.created_at * 1000).formatted()
        updated_at = new Date(result.updated_at * 1000).formatted()
        "<tr><td>#{result.id}</td><td>#{result.subject}</td><td>#{result.content}</td><td>#{created_at}</td><td>#{updated_at}</td></tr>"
    
      new: (callback) ->
        @response.writeHead 200, {'Content-Type': 'text/html; charset=utf-8'}
        data = '<form action="/create" method="POST">'
        data += '<p><input type="text" placeholder="Konu" name="subject"></p>'
        data += '<p><textarea placeholder="Mesaj" name="content"></textarea></p>'
        data += '<p><input type="submit" value="Konu Ekle"></p>'
        callback(data)
    
      create: (callback) ->
        d = ''
    
        @request.on 'data', (data) ->
          d += data
    
        @request.on 'end', =>
          post = require('querystring').parse(d)
          now = Math.round(Date.now() / 1000)
          @db.query "INSERT INTO entries (subject, content, created_at, updated_at) VALUES ('#{post.subject}','#{post.content}', #{now}, #{now})", (results) =>
            @response.writeHead(302, { 'Location': '/' })
            callback('')
    
    class DB
      constructor: (host, username, password = '') ->
        @connection = require('mysql').createConnection
          host : host,
          user : username,
          password : password,
    
      connect: (database = 'test') ->
        @connection.connect()
        @connection.query 'USE ' + database, (err, rows, fields) ->
          throw "HATA: Veritabanı '#{database}' bulunamadı" if err
        @
    
      disconnect: ->
        @connection.end
    
      query: (string, callback) ->
        @connection.query string, (err, rows, fields) ->
          throw err if err
          callback(rows)
    
    s = new Server
    s.run(port)



    Eğer coffeescript hoşunuza gitmiyor ise aşağıdaki komutu çalıştırarak, coffeescript dosyasını bir javascript dosyasına çevirebilirsiniz.

    coffee -c simple_node.coffee
    Basit bir işlem için bayağı fazla bir kod. Hemen her şeyi kendiniz yapmak zorunda kalıyorsunuz. Bununla birlikte düşük seviyeli işlemleri yapabilmek uygulamanız üzerinde büyük bir kontrole sahip olmanızı sağlıyor ancak gerçekten başınızı ağrıtabilir. Bir framework kullanmadan Node.js ile web programlaması yapmak C ile bir site yazmak gibi. Dahası sürekli olarak asenkronize çalışan "callback" fonksiyonlarla uğraşmak başlangıçta aklınızı karıştırabilir. Samimi olmak gerekirse eğer bu örneği CoffeeScript ile hazırlama imkânım olmasaydı, bu kadar uğraşmazdım. Önceki mesajımda da belirttiğim gibi, bu işlemleri tam anlamıyla yerine getirebilecek bir framework olmadığı sürece, her ne kadar hızlı da olsa, Node.js ile web programcılığı yapmak pek mantıklı değil. Eğer araştırırsanız pek çok basit soket uygulaması bulabilirsiniz sanırım. Bu yüzden yazdığım örneğin bir web uygulaması üzerine olmasını tercih ettim. Uygulamanın detaylarını şu an anlatmayı gerekli görmüyorum. Araştırmak isteyen yazılımcılar zaten gerekli kaynakları bulabilir ve bu kodları da inceleyebilirler. Diğer yandan Node.js ile programlama yapmak istiyorsanız öncelikle gerekli Javascript bilgisine sahip olmalısınız. Bu açıdan zaten yeterli kaynağı bulabileceğinize inanıyorum.
  • 18-04-2013, 02:58:40
    #12
    artık eskisi gibi girmek nasip olmuyor bu aralar php kategorisine
    ama ne zaman gelsem! ibrahim hocam faydalı bilgiler sunmuş oluyorsunuz
    ellerinize sağlık... fırsat bulursak inceleriz
  • 22-04-2013, 05:20:04
    #13
    msgr adlı üyeden alıntı: mesajı görüntüle
    Bu konuda kafam çok karışık. Aşırı karışık. Yani işin içine veritabanı nasıl giriyor, doğru kullanımı nedir...
    Bir çok kütüphanesi var. MongoDB veritabanı için mongoose kütüphanesini kullanarak ilerleyebiliyorsunuz. Mysql vb. veritabanlarına bağlanmakta oldukça kolay.

    fatihsarac adlı üyeden alıntı: mesajı görüntüle
    bu node.js ve benzerlerini açıkcası ben de merak ediyorum. fakat "türk" olduğumuz için işimiz düşmeden öğrenmiyoruz. benim de bu zamana kadar socket programlamaya ihtiyacım olmadığı için hiç araştırmadım. @OfisSoft gibi hakkında "nedir? ne değildir? neye yarar? yenilir mi? içilirse daha mı şifalı olur?" makalelere çok rastladım ve okudum.

    ama bu zamana kadar dikkatimi çeken bir şey var, bu node.js ve benzerleri hakkında "kod" haricinde her şey anlatılıyor. bence bilgisi olan birileri bu noje.js için örnek uygulama nasıl yazılır onu anlatmalı. gerçi büyük ihtimalle bir çok kaynak vardır ama dediğim gibi işimiz düşmeden araştırıp öğrenmiyoruz.
    Şu an Global bir proje için NodeJS, MongoDb, Socket.io teknolojilerini kullanarak yazılım geliştiriyorum. Bu yoğun dönemi atlattığımda örnek uygulamaları kapsayan Türkçe kaynak üretmeye çalışacağım.

    ByTriSLaSiS adlı üyeden alıntı: mesajı görüntüle
    artık eskisi gibi girmek nasip olmuyor bu aralar php kategorisine
    ama ne zaman gelsem! ibrahim hocam faydalı bilgiler sunmuş oluyorsunuz
    ellerinize sağlık... fırsat bulursak inceleriz
    Teşekkürler Sabri. Doğrusu bende eskisi gibi çok fazla foruma uğrayamıyorum. Bulduğum boşluklara makaleler sıkıştırıp paylaşmaya çalışıyorum.
  • 28-06-2013, 00:34:50
    #14
    merhaba mongoose connect işlemini yaptığım yere domain name bilgisini nasıl ulaştırabilirim


    var mongoose = require('mongoose');
    mongoose.connect('mongodb:bağlantı bilgileri');
    module.exports = mongoose;

    böyle bir modulum var buraya domain name bilgilerini nasıl ulaştırabilirim ?
  • 28-06-2013, 01:47:32
    #15
    bjkasim adlı üyeden alıntı: mesajı görüntüle
    merhaba mongoose connect işlemini yaptığım yere domain name bilgisini nasıl ulaştırabilirim


    var mongoose = require('mongoose');
    mongoose.connect('mongodb:bağlantı bilgileri');
    module.exports = mongoose;

    böyle bir modulum var buraya domain name bilgilerini nasıl ulaştırabilirim ?
    Domain name bilgileri derken mevcut bir mongoDB sunucun var sanırım. Mongoose ile bu sunucuya nasıl bağlantı kurabileceğini soruyorsun anladığım kadarıyla. Aşağıdaki şekilde mongoDB bilgilerini tanımlayarak mongoose ile kullanabilirsin.

    var mongoose = require('mongoose');
    
    var host = '127.0.0.1';
    var database= 'veritabani_adi';
    var mongoUser = 'root';
    var mongoPass = 'password';
    
    var uri = 'mongodb://' + host + '/' + database;
    var options = {user:mongoUser,pass:mongoPass};
    var db = mongoose.connect(uri,options).connection;
    Ayrıca bu tarz soruların cevabı mongoose dokümanında yer alıyor zaten. http://mongoosejs.com/docs/connections.html buradan bakarak detaylara ulaşabilirdin. Benzer bir metod hakkında yardıma ihtiyaç duyduğunda dokümantasyonu inceleyebilirsin.
  • 30-06-2013, 11:42:10
    #16
    OfisSoft adlı üyeden alıntı: mesajı görüntüle
    Domain name bilgileri derken mevcut bir mongoDB sunucun var sanırım. Mongoose ile bu sunucuya nasıl bağlantı kurabileceğini soruyorsun anladığım kadarıyla. Aşağıdaki şekilde mongoDB bilgilerini tanımlayarak mongoose ile kullanabilirsin.

    var mongoose = require('mongoose');
    
    var host = '127.0.0.1';
    var database= 'veritabani_adi';
    var mongoUser = 'root';
    var mongoPass = 'password';
    
    var uri = 'mongodb://' + host + '/' + database;
    var options = {user:mongoUser,pass:mongoPass};
    var db = mongoose.connect(uri,options).connection;
    Ayrıca bu tarz soruların cevabı mongoose dokümanında yer alıyor zaten. http://mongoosejs.com/docs/connections.html buradan bakarak detaylara ulaşabilirdin. Benzer bir metod hakkında yardıma ihtiyaç duyduğunda dokümantasyonu inceleyebilirsin.

    o zaman şu şekilde düzelteyim

    req.headers.host bilgisini config dosyama nasıl çekebilirim mongoose connect işlemini module exports yaparak çekiyorum yani scripte her bağlantı yapan kişiye farklı db den hizmet vermek istiyorum
  • 06-11-2013, 09:36:18
    #17
    zee adlı üyeden alıntı: mesajı görüntüle
    teknolojiler ve platformlar inanılmaz bir çeşitlilik sunmaya başladı. python, ruby, nodjs, scala aldı başını gitti. hepsinin bazı konularda avantajları olsa da tıpkı serverlar ve frameworkler gibi bazı eklentilerle bu avantaj farkları azaltılabiliyor.

    Bu noktada "Ölçmediğin bilgi senin değildir" demek lazım. İşini ölçüp biçip zamanlayıp bunların hangisini nerede nasıl kullanacağını anlamak lazım. Bunun yanında birini kullanırken olmazsa olmaz mı ? Kullanma maliyetini kurtarıyor mu kavramak gerek.

    Bu noktada benim görüşüm en az birinde profesyonel olmak, diğerlerinin nerede ne işe yaradığını iyi anlamak ve eğer yapabiliyorsanız iş sürecinizde kullandığınız programların frameworklerin alternatiflerinden en az birini öğrenip ilerlemek.

    Örnek yolllardan biri, HTML5, CSS3, jQuery, jQuery UI, jQuery Mobile ( alternatif örnek ext js ama paralı, dojo ama plugini az ) , AngularJS ( backbone.js, knockout.js alternatifleri ama angular google destekli ) , CodeIgniter ( Symfony ama o büyük projelerde mantıklı, Laravel ama onu henüz tek kişi geliştiriyor ) , Sphinx ( alternatif solr ve elastic search ama sphinx daha kolay solr daha kapsamlı işlerde ) MySQL ( MariaDB ama biraz yol alması lazım ve mysql hala bedava ve çözülmüş sorun çok fazla ) , MongoDB ( redis vb. alternatifler var ama cache mekanizmaları mongoda daha iyi ) gibi bir kaç soruya cevap vererek ilerlenebilir.

    Mesela araya PHP yerine Ruby, Pyhton alabilirsiniz. Fakat PHPden iyi olsalar bile TR de yeterince iş yok. Hatta dünyada da o kadar olduğunu sanmıyorum. Ama bilimsel araştırma yapıyorsanız Python mecburi gibi birşey. Yok startup global ise Ruby On Rails bence doğru seçim.

    Konuyu genişletip Heroku mu kullanayım yoksa eclipse yerine c9.io mu yapalım ? Git mi Mercual mi yoksa SVN mi daha iyi düşünebilirsiniz de. Fakat yolu çizmenizi sağlayan bir seriniz varsa hemen onu kullanın !

    Çünkü esas olan sonuçtur.
    buralarda bu tarz teknolojilerden haberdar olan developerlar olduğunu görmek güzel