Kod Panosu

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

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

CloudFoundry Caldecott: Bağlantı Hatası Çözümü

CloudFoundry’nin bulut servislerine erişmek için tünel olarak Caldecott adlı uygulamayı kullanıyor ama “Ruby Interpereter..” hatası alıyorsanız Ruby v.1.9.3-p0‘ı kurmalısınız.

Denenmiş bir çözümdür.

Update: Windows üzerinde Caldecott’u kurarken (gem install caldecott) “ERROR: Failed to build gem native extension” şeklinde bir hata alıyorsanız DevKit-tdm-32-4.5.2‘yi sisteminize kurun. Arşivi açtığınız yerde komut satırını açıp sırasıyla “ruby dk.rb init” ve “ruby dk.rb install” komutlarını çalıştırın. Caldecott artık sorunsuz bir şekilde kurulacaktır.

FlexMobile Uygulamaları İçin Örnek IconItemRenderer

<s:List id="list" creationComplete="onCreate(event)" itemRenderer="renderers.MyIconItemRenderer">
    <s:AsyncListView list="{getAllPersonelResult.lastResult}"/>
</s:List>
<?xml version="1.0" encoding="utf-8"?>
<s:IconItemRenderer xmlns:fx="http://ns.adobe.com/mxml/2009" 
                    xmlns:s="library://ns.adobe.com/flex/spark"
                    labelFunction="getLabel"
                    messageFunction="getMessage"
                    iconFunction="getIcon">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[            
            import spark.primitives.BitmapImage;
            
            import valueObjects.Personel;
            
            [Embed(source="assets/departman/Dogu.png")]
            private var iconDogu:Class;
            
            [Embed(source="assets/departman/Bati.png")]
            private var iconBati:Class;
            
            [Embed(source="assets/departman/Kuzey.png")]
            private var iconKuzey:Class;
            
            [Embed(source="assets/ayripasif/ayri.png")]
            private var iconAyri:Class;
            
            [Embed(source="assets/ayripasif/pasif.png")]
            private var iconPasif:Class;
            
            [Embed(source="assets/ayripasif/aktif.png")]
            private var iconAktif:Class;
            
            override public function set data(value:Object):void{
                var p:Personel = value as Personel;
                if(value == null)    return;
                super.data = value;
                this.decorator = getDecorator(p);
                
            }
            
            private function getLabel(p:Personel):String{
                return p.adi + " " + p.soyadi;
            }
            
            private function getMessage(p:Personel):String{
                return p.goryer;
            }
            
            private function getIcon(p:Personel):Class{
                switch(p.rutbesi)
                {
                    case "Kuzey":    return iconKuzey;
                    case "Batı" :    return iconBati;
                    case "Doğu" :    return iconDogu;
                    default     :    return null;
                }
            }
            
            private function getDecorator(p:Personel):Class{
                if(p.ayriseb != null && p.ayriseb != "")    return iconAyri;
                if(p.passeb != null && p.passeb != "")    return iconPasif;
                return iconAktif;
            }
        ]]>
    </fx:Script>
</s:IconItemRenderer>

Ubuntu’da Terminal İçin Kalıcı Alias’lar Tanımlama

Bir terminal açın ve şu kodu girin:

gedit ~/.bash_aliases

veya “Home” klasörünün altında “.bash_aliases” adlı bir dosya oluşturun ve dosyayı açın.

Açılan dosyanın içine alias’larınızı yazın. Örnek:

alias cls='clear'
alias l='ls -l'
alias ..='cd ..'
alias ...='cd ../..'

Dosyayı kaydedin.

Artık açtığınız her yeni terminal alias’larınızı hatırlayacaktır.

Ücretsiz ve Online Node.JS IDE’si: Cloud9

Cloud9 IDE (http://c9.io/) Node.JS ile kod geliştirmek isteyenler için inanılmaz bir editör!

  • Github ve Bitbutcket hesabınızla entegre çalışabiliyor,
  • NPM kullanmanıza izin veriyor,
  • Visual Studio’dan alışık olduğumuz kod tamamlama özelliğini barındırıyor,
  • kodunuzu bulut hostalarınıza direkt olarak deploy edebiliyor
  • ve en önemlisi Node.JS uygulamanızı debug edebilme imkânı sağlıyor.

Node.JS’ye merakı olan herkesin bir şans vermesi lâzım.

Ücretsiz MongoDB Sunucusu – MongoHQ

Ücretsiz ve kullanışlı bir mongodb host arayanlara MongoHQ‘yu şiddetle tavsiye ediyorum. Ücretsiz hesap ile 64MB alan ve birden fazla database/kullanıcı (yetkili/yetkisiz) oluşturma seçenekleri sunuluyor. MongoDB’ye merhaba demek için çok iyi bir fırsat.