Kod Panosu

Kopyala, Yapıştır, Hatırla, Kodla..

Monthly Archives: Temmuz 2012

Elemanların Tarayıcı Tarafından Hesaplanmış Yüksekliklerini Çekmek

jQuery‘nin innerHeight ve outerHeight fonksiyonlarını kullanarak örneğin bir div’in browser tarafından hesaplanmış dinamik yükseklik değerlerini çekebilirsiniz.

JavaScript: Unary + Operator

Eğer siz de benim gibi JavaScript’te string’leri integer’a çevirmek için parseInt fonksiyonuna alternatif bir yazım arıyorsanız tek taraflı (unary) + operatörünü kullanabilirsiniz.

Örnek:

var nums = ['100','300','400','60','40'], 
    num = 0;

for (var i = 0; i < nums.length; i++) {
    num += +nums[i];
}

alert(num);  // 900

Ayrıntılı bilgi: http://xkr.us/articles/javascript/unary-add/

Thanks to: Vitaliy Petrychuk

Node.JS: NPM ile Kurduğunuz Modülleri package.json Dosyasına Kaydettirmek

Node.JS projenize NPM kullanarak dahil etmek istediğiniz modülleri

npm install <moduladi> --save

veya

npm install <moduladi> -S

şeklinde kurarsanız kurduğunuz modüller package.json dosyasındaki dependencies bölümüne kaydolur.

Böylece node_modules klasörünü hariç tutup sadece projenize ait olan kodu başka bir kaynağa taşımanız durumuna sadece

npm install

komutuyla projenizde kullandığınız tüm modülleri tek seferde çekmiş olursunuz.

Github Hesabınızla HTTP Üzerinden Clone ve Push İşlemleri Yapmak

Eğer internete okuldan veya işyerinden bağlanıyorsanız ve SSH ve/veya HTTPS ile ilgili kısıtlamalar mevcutsa GitHub hesabınızla ilgili işlemlerinizi HTTP üzerinden gerçekleştirebilirsiniz.

Repository’nizi Clone ederken GitHub’ın size verdiği

https://github.com/snowy73/HelloGit.git

formatındaki adresteki https’i http’ye çevirip

http://github.com/snowy73/HelloGit.git

formatında bir adres kullanırsanız, Push işlemi esnasında git client’ı size GitHub kullanıcı adınızı ve şifrenizi sorar. Bu bilgileri doğru bir şekilde girdiğiniz takdirde Repository’nize başarılı bir şekilde Push işleminde bulunursunuz.

Kaynak: Smart HTTP Support – Github Blog

Çalışan BAT Dosyasının Diskte Bulunduğu Yolu Bilmesi

Çalışmakta olan bir BAT dosyasının disk üzerinde nerede bulunduğunu %~dp0 değişkeniyle çekebilirsiniz.

%~dpI değişkeni %I’ıncı argümanın sürücü harfinin (d) ve yolunun (p) birleştirilmiş halidir. Her BAT dosyasının ilk argümanı da kendisi olduğundan dolayı %~dp0 terimi BAT dosyasının kendi yolunu temsil eder.

Aşağıdaki örnek nmp.cmd örnek alınarak hazırlanmıştır. Önce BAT’ın bulunduğu klasörde node.exe’nin bulunup bulunmadığı test edilir. Yoksa node.exe ortam değişkenlerinin yardımıyla çalıştırılır. Varsa doğrudan çalıştırılır. %* ise BAT dosyasına gönderilen diğer argümanları node.exe’ye paslamak için kullanılmaktadır.

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe" "%~dp0\.\node_modules\nodemon\nodemon.js" %*
) ELSE (
  node "%~dp0\.\node_modules\nodemon\nodemon.js" %*
)

Ayrıntılı bilgi için:

for /?

FlexMobile: SQLite’dan Gelen Tarih Verisini DataGrid İçinde İstenilen Formatta Göstermek

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" title="HomeView"
    creationComplete="creationComplete(event)">
  <fx:Script>
    <![CDATA[
      import mx.collections.ArrayCollection;
      import mx.events.FlexEvent;
      import mx.formatters.DateFormatter;
      
      protected function creationComplete(event:FlexEvent):void
      {
        var conn:SQLConnection = new SQLConnection();
        var dbFile:File = File.applicationDirectory.resolvePath('assets/test.db');
        var dbAppFile:File = File.applicationStorageDirectory.resolvePath('assets/test.db');
        
        if(!dbAppFile.exists)
          dbFile.copyTo(dbAppFile);
        
        conn.openAsync(dbAppFile, SQLMode.READ, new Responder(function success(event:SQLEvent):void{
          /* var update:SQLStatement = new SQLStatement();
          update.sqlConnection = conn;
          update.text = "UPDATE mytable SET dob = :dob WHERE name = :name"
          update.parameters[':dob'] = new Date()
          update.parameters[':name'] = 'Test';
          update.execute(-1, new Responder(function success(event:SQLResult):void{
            trace(event.rowsAffected);
          },
          function error(event:SQLError):void{
            trace(event.toString());
          })); */
          
          
          var select:SQLStatement = new SQLStatement();
          select.sqlConnection = conn;
          select.text = "SELECT name, dob FROM mytable";
          select.execute(-1, new Responder(function success(event:SQLResult):void{
            trace("OK");
            list.dataProvider = new ArrayCollection(event.data); 
          },
          function error(event:SQLErrorEvent):void{
            trace(event.error.toString());
          }));
        },
        function error(event:SQLError):void{
          trace(event.toString());
        }));
      }
      
      private var _dateformatter:DateFormatter = new DateFormatter();
      
      private function formatDate(item:Object,column:GridColumn):String
      {
        _dateformatter.formatString = "DD/MM/YYYY";
        return _dateformatter.format(item[column.dataField]);
      }
      
    ]]>
  </fx:Script>
  <fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
  </fx:Declarations>
  <s:DataGrid id="list" left="0" right="0" top="0" bottom="0" >
    <s:columns>
      <s:ArrayCollection>
        <s:GridColumn dataField="name" />
        <s:GridColumn dataField="dob" labelFunction="formatDate" />
      </s:ArrayCollection>
    </s:columns>
  </s:DataGrid>
</s:View>

Node.JS: Express Session’larını Socket.IO ile Paylaşmak

// Dependencies
var express = require('express')  //express@2.5.11
  , connect = require('express/node_modules/connect')
  , sessionStore = new connect.middleware.session.MemoryStore()
  , io = require('socket.io') // socket.io@0.9.6
  , routes = require('./routes');

var app = module.exports = express.createServer();

// Configuration
app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'ejs');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(express.cookieParser());
  app.use(express.session({ 
      secret: 'your secret here'
    , key:  'express.sid'
    , store: sessionStore
  }));
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Routes
app.get('/', routes.index);

app.listen(3000, function(){
  console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);
});

// Sockets
var sio = io.listen(app)

sio.set('authorization', function (data, accept) {
  if (!data.headers.cookie) 
    return accept('No cookie transmitted.', false);
    
  data.cookie = connect.utils.parseCookie(data.headers.cookie);
  data.sessionID = data.cookie['express.sid'];
  data.sessionStore = sessionStore;
  sessionStore.get(data.sessionID, function (err, session) {
    if (err || !session) {
        accept('Error: No such session', false);
    } else {
        data.session = new connect.middleware.session.Session(data, session);
        accept(null, true);
    }
  });
});

sio.sockets.on('connection', function (socket) {
  var hs = socket.handshake;
  var session = hs.session;
  
  console.log('A socket with sessionID ' + hs.sessionID + ' connected!');
  
  var intervalID = setInterval(function () {
    hs.session.reload( function () { 
      hs.session.touch().save();
    });
  }, 60 * 1000);
  
  socket.on('setVal', function(data){
    session.val = data.value;
    session.save();
    console.log('changeVal:' + data.value);
  });
  
  socket.on('getVal', function(){
    console.log('getVal:' + session.val);
    socket.emit('response', session.val)
  });
  
  socket.on('disconnect', function () {
    console.log('A socket with sessionID ' + hs.sessionID + ' disconnected!');
    clearInterval(intervalID);
  });
});
<script>
  var socket = io.connect('/');
  socket.emit('setVal', { value: 'test' });
  socket.emit('getVal');
  socket.on('response', function(data){
    console.log(data);
  })
</script>

Kaynak: http://www.danielbaulig.de/socket-ioexpress

Flash Builder ile Android Emulator İçin APK Üretmek

http://www.youtube.com/watch?v=WHzZHrqBs9Q&t=4m41s

adt -package -target apk-emulator -storetype pkcs12 -keystore cert.p12 AppName.apk AppName-app.xml AppName.swf

JavaScript’te Class Inheritance

Hazır kod kullanmayı sevmeyenler için javascript’te en kolay class inheritance yöntemi şu şekilde olur sanırım:

function Person(isDancing){
  this.dancing = isDancing;
  this.dance = function(){
    return this.dancing;
  }
}

function Ninja(){
  this.Person = Person;
  this.Person(false);
  this.swingSword = function(){
    return true;
  }
}

Bu yöntem aşağıdaki testlerden geçer:

var p = new Person(true);
p.dance(); // => true

var n = new Ninja();
n.dance(); // => false
n.swingSword(); // => true

p instanceof Person // => true
n instanceof Ninja  // => true

Ancak bu yöntem prototype chaining’i göz önünde bulundurmadığından polymorphism’i tam olarak desteklemez ve örnek olarak aşağıdaki testten geçemez.

n instanceof Person // => false

Class inheritance’i tam anlamıyla kullanmak ama prototype chaining ile de uğraşmamak istiyorsanız jQuery’nin geliştiricisi John Resig’in “Class” adlı projesini kullanabilirsiniz.

/* Simple JavaScript Inheritance
 * By John Resig http://ejohn.org/
 * MIT Licensed.
 */
// Inspired by base2 and Prototype
(function(){
  var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;

  // The base Class implementation (does nothing)
  this.Class = function(){};
 
  // Create a new Class that inherits from this class
  Class.extend = function(prop) {
    var _super = this.prototype;
   
    // Instantiate a base class (but only create the instance,
    // don't run the init constructor)
    initializing = true;
    var prototype = new this();
    initializing = false;
   
    // Copy the properties over onto the new prototype
    for (var name in prop) {
      // Check if we're overwriting an existing function
      prototype[name] = typeof prop[name] == "function" &&
        typeof _super[name] == "function" && fnTest.test(prop[name]) ?
        (function(name, fn){
          return function() {
            var tmp = this._super;
           
            // Add a new ._super() method that is the same method
            // but on the super-class
            this._super = _super[name];
           
            // The method only need to be bound temporarily, so we
            // remove it when we're done executing
            var ret = fn.apply(this, arguments);       
            this._super = tmp;
           
            return ret;
          };
        })(name, prop[name]) :
        prop[name];
    }
   
    // The dummy class constructor
    function Class() {
      // All construction is actually done in the init method
      if ( !initializing && this.init )
        this.init.apply(this, arguments);
    }
   
    // Populate our constructed prototype object
    Class.prototype = prototype;
   
    // Enforce the constructor to be what we expect
    Class.prototype.constructor = Class;

    // And make this class extendable
    Class.extend = arguments.callee;
   
    return Class;
  };
})();

Örnek:

var Person = Class.extend({
  init: function(isDancing){
    this.dancing = isDancing;
  },
  dance: function(){
    return this.dancing;
  }
});

var Ninja = Person.extend({
  init: function(){
    this._super( false );
  },
  dance: function(){
    // Call the inherited version of dance()
    return this._super();
  },
  swingSword: function(){
    return true;
  }
});

var p = new Person(true);
p.dance(); // => true

var n = new Ninja();
n.dance(); // => false
n.swingSword(); // => true

// Should all be true
p instanceof Person && p instanceof Class && 
n instanceof Ninja && n instanceof Person && n instanceof Class

Kaynak: http://ejohn.org/blog/simple-javascript-inheritance/

Ubuntu: NodeJS’yi Kurarken OpenSSL Bulunamadı Hatası

Ubuntu üzerinde NodeJS’yi kurarken ilk aşamada çalıştırdığınız

./configure

komutu eğer size OpenSSL’i bulamadığını söylüyorsa ilgili paketleri sisteminize kurmak için aşağıdaki komutu yönetici olarak (sudo ile) çalıştırın.

apt-get install libssl-dev openssl