#script
18 catatan
Fri, 3 Jul 2015 11:40 am
Anonymous function PHP are awesome, contohnya seperti ini :

<?php
$mobil = array(
  "jalan" => function($nomor_sim){
      if($nomor_sim){
            return "Caaw !";
      }else{
            return "Anda tidak punya SIM !";
      }
  },
  "berhenti" => function(){
      return "Matikan mesin ...";
  }
);

echo $mobil['jalan']();                // Anda tidak punya SIM
echo $mobil['jalan']("SIM123"); // Caaw !
echo $mobil['berhenti']();          // Matikan mesin ...
?>

#php #nice #enlightenment #script
Thu, 26 Mar 2015 12:48 am
sms-server.go
package main

  import (
      "fmt"
      "github.com/gorilla/mux"
      "github.com/gorilla/sessions"
      // "github.com/fzzy/radix/redis"
      // "github.com/fatih/structs"
      "net"
      "net/http"
      "html/template"
      "gopkg.in/mgo.v2"         
      "gopkg.in/mgo.v2/bson"
      "regexp"
      "strings"
      "crypto/rand"
      "time"
      "strconv"
      // "encoding/json"
      // "reflect"
  )

  var (
      // MongoDB
      mongoConfig       = "mongodb://localhost:27017/admin"
      MongoSession, err = mgo.Dial(mongoConfig)
      MDB               = MongoSession.DB("admin")
      BlogCol           = MDB.C("blog")
      UserCol           = MDB.C("user")

      // Session
      store             = sessions.NewCookieStore([]byte("something-very-secret"))

      // Blog
      skipHome          = 0
      limit             = 10
      rowsNum           = 10

      // Tag Factory
      tagPattern        = "#([a-z]|[A-Z]|[_])+"

      // Path
      templatePath      = "D:\\PROJECTS\\GO-APP\\webkoe\\templates\\"
      publicPath        = "D:\\PROJECTS\\GO-APP\\webkoe\\public\\"
  )

  func cekKodeJabatan(r *http.Request) string {
      session,_       := store.Get(r, "session-name")
      kode_jabatan    := fmt.Sprintf("%s", session.Values["kode_jabatan"])
      return kode_jabatan  
  }

  func SmsHomeHandler(w http.ResponseWriter, r *http.Request) {

      if cekKodeJabatan(r) == "" {
          http.Redirect(w, r, "/login", 301)
          fmt.Println(cekKodeJabatan(r))
          fmt.Println("*** @home -> No Data ")
      }else{
          templates := template.Must(template.New("").ParseFiles(templatePath + "sms-base.html", templatePath + "sms-home.html"))
          err := templates.ExecuteTemplate(w, "base", cekKodeJabatan(r))
          if err != nil {
              http.Error(w, err.Error(), http.StatusInternalServerError)
          }        
      }
  }

  func SmsLoginFormHandler(w http.ResponseWriter, r *http.Request) {

      if cekKodeJabatan(r) == "" {
          templates := template.Must(template.New("").ParseFiles(templatePath + "sms-base.html", templatePath + "sms-loginform.html"))
          err := templates.ExecuteTemplate(w, "base", nil)
          if err != nil {
              http.Error(w, err.Error(), http.StatusInternalServerError)
          }
      }else{
          http.Redirect(w, r, "/", 301)
      }
  }  

  func SmsPostLoginHandler(w http.ResponseWriter, r *http.Request) {
      
      if cekKodeJabatan(r) == "" {
          username          := r.FormValue("username")
          password          := r.FormValue("password")

          var results map[string]interface{}
          err = UserCol.Find(bson.M{"username": username, "password" : password}).One(&results)
          if err != nil {
              http.Redirect(w, r, "/#error", 301)
          }else{
              kode_jabatan, _ := results["kode_jabatan"]
              session, _                     := store.Get(r, "session-name")
              session.Values["kode_jabatan"]  = kode_jabatan
              session.Save(r, w)
              http.Redirect(w, r, "/", 301)
          }
      }else{
          http.Redirect(w, r, "/", 301)
      }
  }

  func SmsLogoutHandler(w http.ResponseWriter, r *http.Request) {
      
      session, _                     := store.Get(r, "session-name")
      session.Values["kode_jabatan"]  = ""
      session.Save(r, w)

      http.Redirect(w, r, "/", 301)
  }

  func safehtml(text string) template.HTML { 

      text = text + " "
      text = strings.Replace(text, "<", "<", -1)   
      text = strings.Replace(text, ">", ">", -1) 
        
      text = strings.Replace(text, "", "
", -1) text = strings.Replace(text, "", "", -1) text = strings.Replace(text, "", "", -1) text = strings.Replace(text, "", "", -1) text = strings.Replace(text, "", "", -1) text = strings.Replace(text, "", "", -1) text = strings.Replace(text, "", "", -1) text = strings.Replace(text, "=", "=", -1) text = strings.Replace(text, "<a href=", "", "", -1) text = strings.Replace(text, "<img src=", "", ">", -1) regexPagar, _ := regexp.Compile(tagPattern) tags := regexPagar.FindAllString(text, -1) for _ , value := range tags { tagAscii := strings.Replace(value, "#", "#", 1) tagOnly := strings.Replace(value, "#", "", 1) text = strings.Replace(text, value, "" + tagAscii + "", 1) } return template.HTML(text) } func timeFormatter(text string) template.HTML { text = strings.Replace(text, " ", "-", -1) text = strings.Replace(text, ":", "-", -1) split := strings.Split(text, "-") tahun, _ := strconv.Atoi(split[0]) bulan, _ := strconv.Atoi(split[1]) tanggal, _ := strconv.Atoi(split[2]) jam, _ := strconv.Atoi(split[3]) menit, _ := strconv.Atoi(split[4]) detik, _ := strconv.Atoi(split[5]) var _bulan time.Month if bulan == 1 { _bulan = time.January }else if bulan == 2 { _bulan = time.February }else if bulan == 3{ _bulan = time.March }else if bulan == 4{ _bulan = time.April }else if bulan == 5{ _bulan = time.May }else if bulan == 6{ _bulan = time.June }else if bulan == 7{ _bulan = time.July }else if bulan == 8{ _bulan = time.August }else if bulan == 9{ _bulan = time.September }else if bulan == 10{ _bulan = time.October }else if bulan == 11{ _bulan = time.November }else if bulan == 12{ _bulan = time.December } // const layout = "Mon Jan 2, 2006 at 3:04pm (MST)" (MST) --> WITA const layout = "Mon, 2 Jan 2006 3:04 pm" t := time.Date(tahun, _bulan, tanggal, jam, menit, detik, 0, time.Local) return template.HTML(t.Format(layout)) } func randStr(strSize int, randType string) string { var dictionary string if randType == "alphanum" { dictionary = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" } if randType == "alpha" { dictionary = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" } if randType == "number" { dictionary = "0123456789" } var bytes = make([]byte, strSize) rand.Read(bytes) for k, v := range bytes { bytes[k] = dictionary[v%byte(len(dictionary))] } return string(bytes) } func GetIP(r *http.Request) string { if ipProxy := r.Header.Get("X-FORWARDED-FOR"); len(ipProxy) > 0 { return ipProxy } ip, _, _ := net.SplitHostPort(r.RemoteAddr) return ip } func main() { mx := mux.NewRouter() // *** home *** mx.HandleFunc("/", SmsHomeHandler) // *** login *** mx.HandleFunc("/login", SmsLoginFormHandler).Methods("GET") mx.HandleFunc("/login", SmsPostLoginHandler).Methods("POST") // *** logout *** mx.HandleFunc("/logout", SmsLogoutHandler).Methods("GET") // *** static server *** mx.PathPrefix("/").Handler(http.FileServer(http.Dir( publicPath ))) http.ListenAndServe(":80", mx) } #go #script
Mon, 23 Mar 2015 3:46 pm
func safehtml di List dan TagView di sederhanakan jadi satu fungsi tersendiri #webkoe #go
      func safehtml(text string) template.HTML { 

          text = text + " "
          text = strings.Replace(text, "<", "<", -1)   
          text = strings.Replace(text, ">", ">", -1) 
            
          text = strings.Replace(text, "
", "
", -1) 
          text = strings.Replace(text, "
", "
", -1) regexPagar, _ := regexp.Compile(tagPattern) tags := regexPagar.FindAllString(text, -1) for _ , value := range tags { tagAscii := strings.Replace(value, "#", "#", 1) tagOnly := strings.Replace(value, "#", "", 1) text = strings.Replace(text, value, "" + tagAscii + "", 1) } return template.HTML(text) }
dan ini yang memanggil
      func WkListHandler(w http.ResponseWriter, r *http.Request) {
          funcMap := template.FuncMap{
              "safehtml": safehtml ,
          }
          templates := template.Must(template.New("").Funcs(funcMap).ParseFiles(templatePath + "webkoe-base.html", templatePath + "webkoe-list.html"))
          
          var results []Blog
          err = MCol.Find(bson.M{}).Sort("-date").Limit(1000000000000).All(&results)
          if err != nil {
              panic(err)
          }

          // var finalResult []tagView
          // fmt.Println(reflect.TypeOf(results))
          err := templates.ExecuteTemplate(w, "base", results)
          if err != nil {
              http.Error(w, err.Error(), http.StatusInternalServerError)
          }
      }
#script #webkoe #go #enlightenment #nice
Sun, 22 Mar 2015 1:58 am
Menambah Environment Variable di Ubuntu dan Windows
- Ubuntu :
  Awal    PATH="/root/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
  
  root@webkoe:~# export PATH=$PATH:/root/go/bin
  
  Menjadi PATH="/root/local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/root/go/bin"

- Windows :
  Awal Path=C:\Python27\;C:\Python27\Scripts;D:\oracle\product\11.1.0\db_1\bin;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;
  C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\PROJECTS\NODEAPP\Nodejs\;D:\PROJECTS\WEB\xampp\php;
  C:\Program Files\MongoDB 2.6 Standard\bin;C:\ProgramData\ComposerSetup\bin;C:\dart\dart-sdk\bin;D:\PROJECTS\GO\bin;
  C:\Program Files (x86)\Git\cmd;C:\Ruby21-x64\bin;C:\Users\lou\AppData\Roaming\npm
  
  C:\Users\lou>set PATH=%PATH%;D:\PROJECTS\GO\bin

  Menjadi Path=C:\Python27\;C:\Python27\Scripts;D:\oracle\product\11.1.0\db_1\bin;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;
  C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\PROJECTS\NODEAPP\Nodejs\;D:\PROJECTS\WEB\xampp\php;
  C:\Program Files\MongoDB 2.6 Standard\bin;C:\ProgramData\ComposerSetup\bin;C:\dart\dart-sdk\bin;D:\PROJECTS\GO\bin;
  C:\Program Files (x86)\Git\cmd;C:\Ruby21-x64\bin;C:\Users\lou\AppData\Roaming\npm;D:\PROJECTS\GO\bin

#script #setting #go
Sun, 22 Mar 2015 12:29 am
Membuat service di Ubuntu ternyata sangat mudah ... Kita bisa membuatnya dengan Upstart
- Bikin file .conf baru di /etc/init
- Ketikkan perintahnya, misalnya service untuk server-gorilla

  # /etc/init/server-gorilla.conf
  start on filesystem or runlevel [2345]
  stop on runlevel [06]

  script
     exec /go-app/webkoe/server-gorilla      
  end script
- lalu SAVE
- untuk start service cukup dengan perintah "service server-gorilla start"
- untuk stop servicenya "service server-gorilla stop"

dengan upstrat memory lebih ringan, ketimbang menggunakan forever ... dan lagi upstart bisa melakukan exec sepuasnya, bahkan seperti contoh .conf diatas tadi, upstart menjalankan executable file ... #nice bukan ? #webkoe #script #enlightenment
Sun, 22 Mar 2015 12:17 am
Ane awalnya rumit sekali mikirnya ... syukurlah ketemu link ini 
http://stackoverflow.com/questions/17306358/golang-removing-fields-from-struct-or-hiding-them-in-json-response

Ternyata cukup serahkan pada map[string]interface{}, sudah bisa kirim variable apapun, sepuasnya ke templates

  func WkTagViewHandler(w http.ResponseWriter, r *http.Request) {
          
          tagName := mux.Vars(r)["tag"]
          
          funcMap := template.FuncMap{
              "safehtml": func(text string) template.HTML { 

                  text = text + " "
                  text = strings.Replace(text, "<", "<", -1)   
                  text = strings.Replace(text, ">", ">", -1) 
                    
                  text = strings.Replace(text, "
", "
", -1) 
                  text = strings.Replace(text, "
", "
", -1) regexPagar, _ := regexp.Compile(tagPattern) tags := regexPagar.FindAllString(text, -1) for _ , value := range tags { tagAscii := strings.Replace(value, "#", "#", 1) tagOnly := strings.Replace(value, "#", "", 1) text = strings.Replace(text, value, "" + tagAscii + "", 1) } return template.HTML(text) }, } templates := template.Must(template.New("").Funcs(funcMap).ParseFiles(templatePath + "webkoe-base.html", templatePath + "webkoe-tagview.html")) var results []Blog err = MCol.Find(bson.M{"tag": tagName}).Sort("-date").Limit(1000000000000).All(&results) if err != nil { panic(err) } finalResult := map[string]interface{}{ "tagName" : tagName, "tagList" : results, } err := templates.ExecuteTemplate(w, "base", finalResult) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } }
#webkoe #go #script
Sat, 21 Mar 2015 6:19 am
server-gorilla.go
package main

    import (
        "fmt"
        "github.com/gorilla/mux"
        "github.com/gorilla/sessions"
        "github.com/fzzy/radix/redis"
        "net"
        "net/http"
        "html/template"
        "gopkg.in/mgo.v2"         
        "gopkg.in/mgo.v2/bson"
        "regexp"
        "strings"
        "crypto/rand"
        "time"
        // "reflect"
    )
    
    var (
        // MongoDB
        mongoConfig       = "mongodb://***usermongo***:***passmongo***@localhost:***portmongo***/***dbmongo***"
        MongoSession, err = mgo.Dial(mongoConfig)
        MDB               = MongoSession.DB("admin")
        MCol              = MDB.C("blog")

        // Session
        store             = sessions.NewCookieStore([]byte("something-very-secret"))

        // Tag Factory
        tagPattern        = "#([a-z]|[A-Z])+"
    )

    type Blog struct {
      Id string
      Things string
      Date string
      Ip string
      Agent string
      Tag []string
    }

    // type tagView struct {
    //   tagName string
    //   tagList []main.Blog
    // }

    func WkHomeHandler(w http.ResponseWriter, r *http.Request) {
        err := template.Must(template.ParseFiles("templates/webkoe-home.html")).Execute(w, nil) 
        if err != nil { 
           http.Error(w, err.Error(), http.StatusInternalServerError) 
        } 
    }

    func WkTagViewHandler(w http.ResponseWriter, r *http.Request) {
        
        tagName := mux.Vars(r)["tag"]
        
        funcMap := template.FuncMap{
            "safehtml": func(text string) template.HTML { 

                text = text + " "
                text = strings.Replace(text, "<", "<", -1)   
                text = strings.Replace(text, ">", ">", -1) 
                  
                text = strings.Replace(text, "
", "
", -1) 
                text = strings.Replace(text, "
", "
", -1) regexPagar, _ := regexp.Compile(tagPattern) tags := regexPagar.FindAllString(text, -1) for _ , value := range tags { tagAscii := strings.Replace(value, "#", "#", 1) tagOnly := strings.Replace(value, "#", "", 1) text = strings.Replace(text, value, "" + tagAscii + "", 1) } return template.HTML(text) }, } templates := template.Must(template.New("").Funcs(funcMap).ParseFiles("templates/webkoe-base.html", "templates/webkoe-tagview.html")) var results []Blog err = MCol.Find(bson.M{"tag": tagName}).Sort("-date").Limit(1000000000000).All(&results) if err != nil { panic(err) } err := templates.ExecuteTemplate(w, "base", results) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } func WkCreateHandler(w http.ResponseWriter, r *http.Request) { blog_id := randStr(7, "alphanum") session, _ := store.Get(r, "session-name") session.Values["blog_id"] = blog_id session.Save(r, w) templates := template.Must(template.New("").ParseFiles("templates/webkoe-base.html", "templates/webkoe-create.html")) err := templates.ExecuteTemplate(w, "base", blog_id) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } func WkPostCreateHandler(w http.ResponseWriter, r *http.Request) { things := r.FormValue("things") thingsWithSpace := things + " " captcha := r.FormValue("captcha") session,_ := store.Get(r, "session-name") blog_id := fmt.Sprintf("%s", session.Values["blog_id"]) if things != "" { if captcha == blog_id { // Factory cariTag,_ := regexp.Compile(tagPattern) tagFound := cariTag.FindAllString(thingsWithSpace, -1) var tempTags []string for _, value := range tagFound { cleanRegex,_ := regexp.Compile("(#| )") cleanTag := cleanRegex.ReplaceAllString(value, "") tempTags = append(tempTags, cleanTag) } waktu := strings.Split(fmt.Sprint(time.Now()), ".")[0] ip := GetIP(r) agent := fmt.Sprint(r.Header["User-Agent"]) jsonBlog := &Blog{Id: blog_id, Things: things, Date: waktu, Ip: ip, Agent: agent, Tag: tempTags} err = MCol.Insert(jsonBlog) fmt.Println("Welcome, " + things + " " + thingsWithSpace) http.Redirect(w, r, "/#thanks", 301) }else{ fmt.Println("Robot ?") http.Redirect(w, r, "/#you_r_a_bots", 301) } }else{ http.Redirect(w, r, "/#empty", 301) } // fmt.Println("Someone POST " + things + " blog_id " + blog_id) // fmt.Println(blog_id) /* templates := template.Must(template.New("").ParseFiles("templates/webkoe-base.html", "templates/webkoe-create.html")) err := templates.ExecuteTemplate(w, "base", nil) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } */ } func WkListHandler(w http.ResponseWriter, r *http.Request) { funcMap := template.FuncMap{ "safehtml": func(text string) template.HTML { text = text + " " text = strings.Replace(text, "<", "<", -1) text = strings.Replace(text, ">", ">", -1) text = strings.Replace(text, "
", "
", -1) 
                text = strings.Replace(text, "
", "
", -1) regexPagar, _ := regexp.Compile(tagPattern) tags := regexPagar.FindAllString(text, -1) for _ , value := range tags { tagAscii := strings.Replace(value, "#", "#", 1) tagOnly := strings.Replace(value, "#", "", 1) text = strings.Replace(text, value, "" + tagAscii + "", 1) } return template.HTML(text) }, } templates := template.Must(template.New("").Funcs(funcMap).ParseFiles("templates/webkoe-base.html", "templates/webkoe-list.html")) var results []Blog err = MCol.Find(bson.M{}).Sort("-date").Limit(1000000000000).All(&results) if err != nil { panic(err) } // var finalResult []tagView // fmt.Println(reflect.TypeOf(results)) err := templates.ExecuteTemplate(w, "base", results) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } func CatatanHomeHandler(w http.ResponseWriter, r *http.Request) { var results []Blog err = MCol.Find(bson.M{}).Sort("-date").Limit(100).All(&results) if err != nil { panic(err) } err := template.Must(template.ParseFiles("templates/gorilla-catatanhome.html")).Execute(w, results) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } func HomeWKSHandler(w http.ResponseWriter, r *http.Request) { err := template.Must(template.ParseFiles("templates/gorilla-home_wks.html")).Execute(w, nil) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } func WkBlogHandler(w http.ResponseWriter, r *http.Request) { page := mux.Vars(r)["page"] err := template.Must(template.ParseFiles("templates/gorilla-blog.html")).Execute(w, map[string]string{"halaman": page}) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } func WkRedisHandler(w http.ResponseWriter, r *http.Request) { // redis redisClient, _ := redis.Dial("tcp", "localhost:6379") news, _ := redisClient.Cmd("zrevrangebyscore", "news:republika:posttime", "+inf", "-inf", "limit", "0", "3").List() var bundleNews []string for _, elemStr := range news { bundleNews = append(bundleNews, elemStr) fmt.Println(bundleNews) } // render err := template.Must(template.ParseFiles("templates/gorilla-redis.html")).Execute(w, bundleNews) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } func WkTestPassVarHandler(w http.ResponseWriter, r *http.Request) { err := template.Must(template.ParseFiles("templates/gorilla-blog.html")).Execute(w, map[string]string{"halaman": "2"}) if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) } } func randStr(strSize int, randType string) string { var dictionary string if randType == "alphanum" { dictionary = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" } if randType == "alpha" { dictionary = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" } if randType == "number" { dictionary = "0123456789" } var bytes = make([]byte, strSize) rand.Read(bytes) for k, v := range bytes { bytes[k] = dictionary[v%byte(len(dictionary))] } return string(bytes) } func GetIP(r *http.Request) string { if ipProxy := r.Header.Get("X-FORWARDED-FOR"); len(ipProxy) > 0 { return ipProxy } ip, _, _ := net.SplitHostPort(r.RemoteAddr) return ip } func main() { // MUX ROUTER mx := mux.NewRouter() // WEBKOE.NET // *** home *** mx.HandleFunc("/", WkListHandler).Host("webkoe.net") // *** tag *** mx.HandleFunc("/tag/{tag}", WkTagViewHandler).Host("webkoe.net").Methods("GET") // *** create *** mx.HandleFunc("/create", WkCreateHandler).Host("webkoe.net").Methods("GET") mx.HandleFunc("/create", WkPostCreateHandler).Host("webkoe.net").Methods("POST") // *** misc *** mx.HandleFunc("/test/pass_var", WkTestPassVarHandler).Host("webkoe.net") mx.HandleFunc("/redis", WkRedisHandler).Host("webkoe.net") mx.HandleFunc("/page/{page}", WkBlogHandler).Host("webkoe.net") mx.PathPrefix("/").Handler(http.FileServer(http.Dir("./public/"))).Host("webkoe.net") // CATATAN.WEBKOE.NET mx.HandleFunc("/", CatatanHomeHandler).Host("catatan.webkoe.net") // WEBKANSAJA.COM mx.HandleFunc("/", HomeWKSHandler).Host("webkansaja.com") http.ListenAndServe(":80", mx) }
#script #go #webkoe
Tue, 11 Nov 2014 6:14 pm
Ternyata even juga perlu di clearkan ... ini sebanya post catatan melakukan post berkali-kali, sebanyak jumlah renderlistdisposisi di panggil ...
hapuskan ingatan event click atas object #foo
$( "#foo").unbind( "click" );
#jquery #enlightenment #script #problemsolved #project
Thu, 6 Nov 2014 2:02 pm
Search paradigm has change ...
	var filter = {
		"$and" : [
			{"tag.kode_jabatan": req.session.user.kode_jabatan},
			{"tag.enable": "1"}
		]
	}

	if(req.session.search == undefined){
		// PASS
	}else{
		for(var a in req.session.search){
			if(a !== "hal"){
				var value = new RegExp(req.session.search[a], "i")
				var _subobj = {}
				_subobj[a] = value
				filter['$and'].push(_subobj)
			}else{
				var kata = req.session.search[a].split(" ")
				for(var indexWord in kata){
					var value = new RegExp(kata[indexWord], "i")
					var _subobj = {}
					_subobj[a] = value
					filter['$and'].push(_subobj)
				}
			}
		}
	}
Hasil query mongonya ...
{ '$and':
   [ { 'tag.kode_jabatan': '01' },
     { 'tag.enable': '1' },
     { nomorAgenda: /(?:)/i },
     { tglAgenda: /(?:)/i },
     { asal: /(?:)/i },
     { nomor: /(?:)/i },
     { tanggal: /(?:)/i },
     { hal: /cuti/i },
     { hal: /asra/i } ] }
{ '$and':
   [ { 'tag.kode_jabatan': '01' },
     { 'tag.enable': '1' },
     { nomorAgenda: /(?:)/i },
     { tglAgenda: /(?:)/i },
     { asal: /(?:)/i },
     { nomor: /(?:)/i },
     { tanggal: /(?:)/i },
     { hal: /cuti/i },
     { hal: /asra/i } ] }
#script #mongodb #project
Tue, 28 Oct 2014 11:19 am
Fungsi GRAB crawler Republika must 200 set ke OFF, karena kadang ada link yang redirect, kode 302
def grab(list,label) :
	parameter = ["curl","-H","User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0 FirePHP/0.7.4","--max-time", "1000", "--write-out", "%{http_code}", "--silent"]
	for l in list :
		parameter.append(l)
	default_code = "000"
	reconnect = ""

	proc = subprocess.Popen(parameter,stdout=subprocess.PIPE)
	(out, err) = proc.communicate()

	print label

	'''
	while default_code != "200" :
		proc = subprocess.Popen(parameter,stdout=subprocess.PIPE)
		(out, err) = proc.communicate()
		
		if str(out) == "200" :
			default_code = "200" # OK
			info = "OK"
		elif str(out) == "000" :
			info = "FAIL"
			reconnect = "reconnect"
		elif str(out) == "302" :
			info = "REDIRECT"
			reconnect = "reconnect"
		else :
			info = "..."
			reconnect = "reconnect"

		print label + ": " + str(out) + " " + info + " " + reconnect
	'''
#webkoe #script #python
Fri, 3 Oct 2014 10:06 am
When you execute something synchronously, you wait for it to finish before moving on to another task.
When you execute something asynchronously, you can move on to another task before it finishes. #script
Mon, 22 Sep 2014 3:32 pm
Nama hari added, ini contoh skrip untuk mendapatkan nama hari dari string tanggal
var _date = replies[a].date
var date = new Date(_date)
var newdate = date.getDay()
var namaBulan = {}
namaBulan[0] = "Minggu"
namaBulan[1] = "Senin"
namaBulan[2] = "Selasa"
namaBulan[3] = "Rabu"
namaBulan[4] = "Kamis"
namaBulan[5] = "Jumat"
namaBulan[6] = "Sabtu"
replies[a].date = namaBulan[newdate] + " " + _date
#script #webkoe
Mon, 1 Sep 2014 11:09 am
>>> x = "Hello World!"
>>> x[2:]
'llo World!'
>>> x[:2]
'He'
>>> x[:-2]
'Hello Worl'
>>> x[-2:]
'd!'
>>> x[2:-2]
'llo Worl'
#python #script
Wed, 20 Aug 2014 4:33 pm
< ?php ? > // standard tags
< ? ? > // short tags, need short_open_tag enabled in php.ini
#php #script #kantor #portalkanwil
Wed, 20 Aug 2014 4:28 pm
<?php ?> // standard tags
<? ?> // short tags, need short_open_tag enabled in php.ini
#php #kantor #script #portalkanwil
Wed, 6 Aug 2014 1:31 am
/******************************************************************************
 *
 *  Copyright 2011 Tavendo GmbH
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 ******************************************************************************/

package de.tavendo.autobahn.echoclient;

import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.Gravity;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
//import android.util.Base64;
/*import de.tavendo.autobahn.R;*/ 
import de.tavendo.autobahn.WebSocket;
import de.tavendo.autobahn.WebSocketConnection;
import de.tavendo.autobahn.WebSocketException;
import de.tavendo.autobahn.WebSocketConnectionHandler;
import de.tavendo.autobahn.NotifyMessage;

public class EchoClientActivity extends Activity {

   static final String TAG = "de.tavendo.autobahn.echo";
   private static final String PREFS_NAME = "AutobahnAndroidEcho";
   private static int NOTIFY_ME_ID=1337;

   static EditText mHostname;
   static EditText mPort;
   static TextView mStatusline;
   static Button mStart;

   static EditText mMessage;
   static Button mSendMessage;

   private SharedPreferences mSettings;

   private void alert(String message) {
      Toast toast = Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT);
      toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
      toast.show();
   }

   private String getMyPhoneNumber(){
	    TelephonyManager mTelephonyMgr;
	    mTelephonyMgr = (TelephonyManager)
	        getSystemService(Context.TELEPHONY_SERVICE);
	    return mTelephonyMgr.getSimSerialNumber();
	}
   
   private void katakan(String msg){
	   /*********** Create notification ***********/
       
       final NotificationManager mgr=
           (NotificationManager)this.getSystemService(Context.NOTIFICATION_SERVICE);
       Notification note=new Notification(R.drawable.stat_notify_chat,
                                                       "Webkoe ...",
                                                       System.currentTimeMillis());
        
       // This pending intent will open after notification click
       PendingIntent i=PendingIntent.getActivity(this, 0,
                                               new Intent(this, NotifyMessage.class),
                                               0);
        
       note.setLatestEventInfo(this, "Pesan :",
                               msg, i);
        
       //After uncomment this line you will see number of notification arrived
       //note.number=2;
       NOTIFY_ME_ID = NOTIFY_ME_ID + 1;
       mgr.notify(NOTIFY_ME_ID, note);	   
   }
   
   private void loadPrefs() {

      mHostname.setText(mSettings.getString("hostname", ""));
      mPort.setText(mSettings.getString("port", "9000"));
   }

   private void savePrefs() {

      SharedPreferences.Editor editor = mSettings.edit();
      editor.putString("hostname", mHostname.getText().toString());
      editor.putString("port", mPort.getText().toString());
      editor.commit();
   }

   private void setButtonConnect() {
      mHostname.setEnabled(true);
      mPort.setEnabled(true);
      mStart.setText("Connect");
      mStart.setOnClickListener(new Button.OnClickListener() {
         public void onClick(View v) {
            start();
         }
      });
   }

   private void setButtonDisconnect() {
      mHostname.setEnabled(false);
      mPort.setEnabled(false);
      mStart.setText("Disconnect");
      mStart.setOnClickListener(new Button.OnClickListener() {
         public void onClick(View v) {
            mConnection.disconnect();
         }
      });
   }

   private final WebSocket mConnection = new WebSocketConnection();

   private void start() {

      final String wsuri = "ws://" + mHostname.getText() + ":" + mPort.getText();

      mStatusline.setText("Status: Connecting to " + wsuri + " ..");

      setButtonDisconnect();

      try {
         mConnection.connect(wsuri, new WebSocketConnectionHandler() {
            @Override
            public void onOpen() {
               mStatusline.setText("Status: Connecteds to " + wsuri);
               savePrefs();
               mSendMessage.setEnabled(true);
               mMessage.setEnabled(true);
            }

            @Override
            public void onTextMessage(String payload) {
               alert("Got echo: " + payload);
               katakan(payload);
            }

            @Override
            public void onClose(int code, String reason) {
               alert("Connection lost.");
               mStatusline.setText("Status: Ready.");
               setButtonConnect();
               mSendMessage.setEnabled(false);
               mMessage.setEnabled(false);
            }
         });
      } catch (WebSocketException e) {

         Log.d(TAG, e.toString());
      }
   }

   @Override
   public void onCreate(Bundle savedInstanceState) {

      super.onCreate(savedInstanceState);
      setContentView(R.layout.main);

      mHostname = (EditText) findViewById(R.id.hostname);
      mPort = (EditText) findViewById(R.id.port);
      mStatusline = (TextView) findViewById(R.id.statusline);
      mStart = (Button) findViewById(R.id.start);
      mMessage = (EditText) findViewById(R.id.msg);
      mSendMessage = (Button) findViewById(R.id.sendMsg);

      mSettings = getSharedPreferences(PREFS_NAME, 0);
      loadPrefs();

      setButtonConnect();
      mSendMessage.setEnabled(false);
      mMessage.setEnabled(false);

      mSendMessage.setOnClickListener(new Button.OnClickListener() {
         public void onClick(View v) {
        	String nomor = getMyPhoneNumber();
            mConnection.sendTextMessage("%%" + nomor + " " + mMessage.getText().toString());
            //mConnection.sendTextMessage(mMessage.getText().toString());
         }
      });
   }

   @Override
   protected void onDestroy() {
       super.onDestroy();
       if (mConnection.isConnected()) {
          mConnection.disconnect();
       }
   }

   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
       MenuInflater inflater = getMenuInflater();
       inflater.inflate(R.menu.main_menu, menu);
       return true;
   }

   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      switch (item.getItemId()) {
         case R.id.quit:
            finish();
            break;
         default:
            return super.onOptionsItemSelected(item);
      }
      return true;
   }
}

EchoClientActivity.java #script
Thu, 24 Jul 2014 3:03 pm
$pull
db.sms.update({seri_surat: "8MLzd4dkd"},{$pull: {tag:{tambahan: "push"}}})

$push
db.sms.update( {seri_surat: "8MLzd4dkd"}, { $push : {tag : { "kode_jabatan": "AA", "nama_jabatan": "Kakanwil"} } } ) #script #mongodb #project
Thu, 24 Jul 2014 12:17 pm
var jabatan = function () { var tmp = null; $.ajax({ 'async': false, 'type': "GET", 'global': false, 'dataType': 'html', 'url': "/suratmasuk", 'data': '', 'success': function (data) { tmp = data; } }); return tmp; }(); #script #project