Wed, 1 Apr 2015 7:38 pm
@bengkel-pinggir-jalan depan hotel grand mentari #banbocor
202 views
Wed, 1 Apr 2015 6:55 am
Pagi di #rawasari, #aim lg liat traktor di youtube pake hape abah, ini posting pake hape #ayang
239 views
Tue, 31 Mar 2015 3:00 pm
@kursi-tunggu-lt7 antrean ke ruang pa kanwil, sama #pakarif,n #bufitri mau mbahas rencana extra effort #kantor
269 views
Tue, 31 Mar 2015 8:59 am
@aula-lt-8 iht ngisi logbook imbas kenaikan 2 juta (yang kalo ga tercapai jd dikurang 400 ribu) #hahaha #kantor
214 views
Mon, 30 Mar 2015 8:33 pm
sms masih sempat lanjut disamping tugas rutin kantor, hari ini sudah selesai di auth admin #project, tadi sempat bermasalah saat mengambil value hasil query mongodb. Interfave{} doesnt support indexing, #alhamdulillah sudah terselesaikan dengan menyamakan type map[string]interface{} disisi model dan controller #project
217 views
Mon, 30 Mar 2015 8:30 pm
@nasi-padang #rawasari
212 views
Mon, 30 Mar 2015 8:11 am
Progonosa restitusi 731 sudah diemail rifqi ke duktekkon240 #reminder #kantor
230 views
Mon, 30 Mar 2015 8:03 am
193 views
Mon, 30 Mar 2015 7:55 am
PPN Kanwil s.d. hari ini sudah melampaui PPN tahun 2012 periode yang sama, sepanjang sejarah kanwil PPN tertinggi ada di tahun 2012 #nice #kantor
217 views
Mon, 30 Mar 2015 7:42 am
@desktop #kantor
211 views
Sun, 29 Mar 2015 11:17 am
@mr_pancake_dutamall #sabtuminggu
212 views
Sun, 29 Mar 2015 5:19 am
Subuh #rawasari
202 views
Sat, 28 Mar 2015 5:14 am
Subuh #rawasari
203 views
Fri, 27 Mar 2015 10:43 pm
Ngobrol sama #omjalun di kamarnya, april ini mau ada kemah santri seIndonesia di bumi perkemahan tambang ulang, kmungkinan Bpk Presiden akan hadir. Ngobrol seputar kampusnya juga, ternyata aliansi NU di iain adalah HMI #info
78 views
Fri, 27 Mar 2015 9:35 pm
Olga meninggal #dukacita
75 views
Fri, 27 Mar 2015 9:17 pm
Ke rumah #acilsofi
79 views
Fri, 27 Mar 2015 8:55 pm
Antrian kasir @giant-pal7 sama #aim, #ayang, #omopal, #ninibanjar n #kaibanjar
227 views
Fri, 27 Mar 2015 6:09 pm
Package Checklist
Session : OK
MongoDB : OK
#todo
- Pecah sms-server ke package-package
- Rapikan Folder Templates
#project #go
261 views
Fri, 27 Mar 2015 5:47 pm
Belajar #go mulai masuk package, hari ini runtime sms sudah berhasil dipecah ke beberapa package #enlightenment
241 views
Fri, 27 Mar 2015 12:26 pm
Ke lt 1 #jumat an
218 views
Fri, 27 Mar 2015 10:29 am
To handle different methods differently: Many of my HTTP handlers contain nothing but a switch statement like this:
switch r.Method {
   case "GET":
       // Serve the resource.
   case "POST":
       // Create a new record.
   case "PUT":
       // Update an existing record.
   case "DELETE":
       // Remove the record.
   default:
       // Give an error message.
}
#go #stackoverflow #reminder
298 views
Fri, 27 Mar 2015 7:35 am
#aim td dibawai #ninibanjar senam di sekolahan ninibanjar
222 views
Thu, 26 Mar 2015 6:13 pm
Pusing sama tanggal am & pm, otak ane perlu loading sebentar untuk paham #fyuuh
213 views
Thu, 26 Mar 2015 6:02 pm
Login system sms-admin juga ready, base juga dipisahkan,jadi 4 base; sms-admin_base, sms-admin_base_noauth, sms-user_base, sms-user_base_noauth #project
205 views
Thu, 26 Mar 2015 5:57 pm
#aim lwn #ayang lg bjalanan ... #rawasari
241 views
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
411 views
Thu, 26 Mar 2015 12:44 am
It's time to #zzz
225 views
Thu, 26 Mar 2015 12:44 am
Login system SMS versi GO ready :) #project
216 views
Wed, 25 Mar 2015 8:30 pm
Go Pros
Was it worth it?

Yes, a million times, yes. The speed boost is just too good to pass up. Also, and this counts for something I think, Go is a trendy language right now, so when it comes to recruiting, I think having Go as a critical part of Repustate’s tech stack will help.
#go
216 views
Wed, 25 Mar 2015 7:58 pm
#warung_padang nya berubah layout,pintu masuk pindah ke kanan (kalo dr dalam) #rawasari
223 views
Wed, 25 Mar 2015 7:40 pm
@warung-padang langganan #rawasari
187 views
Wed, 25 Mar 2015 7:18 pm
Ngantar laptop ke ulin, #ayang mau bikin skp, laptop mama yang sudah d bawa ga ada office 2007 nya. Ini lg nunggu #ayang turun
192 views
Wed, 25 Mar 2015 6:07 pm
add /page/{page} #webkoe #go
235 views