Mon, 9 Mar 2015 10:12 pm
FTP Server kpppalangkaraya.com lemot ...
43 views
Mon, 9 Mar 2015 10:56 am
Belajar P3 #dinasluar
211 views
Mon, 9 Mar 2015 8:32 am
Belajar bea meterai #dinasluar
217 views
Mon, 9 Mar 2015 5:59 am
Senam pertama di minggu kedua #dinasluar
203 views
Mon, 9 Mar 2015 12:40 am
#go tetap menunjukkan progress, satu persatu mulai bisa ditasi #webkoe
255 views
Mon, 9 Mar 2015 12:38 am
Berikutnya tinggal mengubah pagar tag (#) menjadi link, ...
1. Disisi server
   ** bisa dilakukan, tapi belum tau caranya mempassing HTML Tag ke template martini
2. Sisi Client
   ** tinggal copas script di express ke client
#webkoe #go
256 views
Mon, 9 Mar 2015 12:32 am
Single file #webkoe server written in #go :)

package main

  import (
    "github.com/go-martini/martini"
    "github.com/martini-contrib/render"
    "gopkg.in/mgo.v2"
    "gopkg.in/mgo.v2/bson"
    "net"
    "net/http"
    "fmt"
    "time"
    "crypto/rand"
    "strings"
    "regexp"
  )

  // local 
  var mongoConfig = "127.0.0.1:27017"
  var blogCollection = "webkoe_blog"
  var hostHome = "localhost:8080"
  var hostCatatan = "catatan"


  // webkoe
  // var mongoConfig = "mongodb://usermongo:passmongo@localhost:portmongo/dbmongo"
  // var blogCollection = "blog"
  // var hostHome = "webkoe.net:8080"
  // var hostCatatan = "catatan.webkoe.net"


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

  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 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 main() {

      // MARTINI
      m := martini.Classic()
      m.Use(render.Renderer(render.Options{
            Layout: "layout",
      }))

      // MONGODB
      session, err := mgo.Dial(mongoConfig)
      if err != nil {
        panic(err)
      }
      defer session.Close()
      session.SetMode(mgo.Monotonic, true)
      webkoe_blog := session.DB("admin").C(blogCollection)

      // ROUTER
      m.Get("/", func(r render.Render, req *http.Request) {
        if req.Host == hostHome {
          r.HTML(200, "home", req.Host)
        }else if req.Host == hostCatatan {
          r.HTML(200, "home-catatan", req.Host)
        }
      })

      m.Get("/blog", func(r render.Render) {
        var results []Blog
        err = webkoe_blog.Find(bson.M{}).Sort("-date").Limit(100).All(&results)
        if err != nil {
          panic(err)
        }
        // fmt.Println(results)
        r.HTML(200, "blog", results)
      })
      m.Post("/blog", func(req *http.Request, r render.Render){
        
        things := req.FormValue("things") + " "
        
        // tag
        regex, err := regexp.Compile("#([a-z])+ ")
        remove, err := regexp.Compile("(#| )")
        tags := regex.FindAllString(things, -1)
        // fmt.Println(tags)

        // modify semua listA
        var modTags []string
        for _, value := range tags {
            final := remove.ReplaceAllString(value, "")
            modTags = append(modTags, final)
        }
        // fmt.Println(modTags)


        waktu := strings.Split(fmt.Sprint(time.Now()), ".")[0]
        blog_id := randStr(7, "alphanum")
        ip := GetIP(req)
        agent := fmt.Sprint(req.Header["User-Agent"])

        jsonBlog := &Blog{Id: blog_id, Things: things, Date: waktu, Ip: ip, Agent: agent, Tag: modTags}
        err = webkoe_blog.Insert(jsonBlog)
        if err != nil {
          panic(err)
        }
        // fmt.Println(agent)
        r.Redirect("/blog")
      })
      m.Get("/blog/write", func(r render.Render) {
        r.HTML(200, "blog-form", nil)
      })

      m.RunOnAddr(":8080")
  }

249 views
Mon, 9 Mar 2015 12:30 am
Menempel ke tag#webkoe from #go
256 views
Mon, 9 Mar 2015 12:29 am
Tags behavior added to #go again ...
335 views
Mon, 9 Mar 2015 12:26 am
Tags behavior added to #go
63 views
Sun, 8 Mar 2015 11:46 pm
Script #go khusus modifikasi list http://play.golang.org/p/dpuX0ORbYJ
211 views
Sun, 8 Mar 2015 11:41 pm
Kesimpulan array #go sampai dengan hari ini

package main

    import "fmt"
    import "encoding/json"

    type Blog struct {
        id string
        things string
        tag []string
    }

    func main() {
        
        fmt.Println("\nMari mulai belajar list dan map Golang ...")

        // list
        listA   := []string{"ikan","sayur","buah", "1", "2", "3"}
        listB, _ := json.Marshal(listA)
        fmt.Println("\nlistA adalah " + string(listB))

        listA2   := []int{1,2,3}
        listB2, _ := json.Marshal(listA2)
        fmt.Println("\nlistA2 adalah " + string(listB2))   

        // dict
        mapA    := map[string]int {"apple": 5, "lettuce": 7}
        mapB, _ := json.Marshal(mapA)
        fmt.Println("\nmapA adalah " + string(mapB))

        fmt.Println("\nlist A")
        for _, value := range listA {
            fmt.Println(value)
        }

        fmt.Println("\nlist A2")
        for _, value := range listA2 {
            fmt.Println(value)
        }      

        fmt.Println("\nmapA")
        for key , value := range mapA {
            fmt.Println(key + " " + fmt.Sprint(value))
        }

        // manipulate list
        fmt.Println("\nAppend listA")
        x := append(listA, "77")
        fmt.Println(x)

        // modify semua listA
        fmt.Println("\nModify listA")
        var modListA []string
        for _, value := range listA {
            modListA = append(modListA, "mod:" + value)
        }
        fmt.Println(modListA)
    }

script diatas menghasilkan output

D:\PROJECTS\GO-APP>go run coba_json_sendiri.go

Mari mulai belajar list dan map Golang ...

listA adalah ["ikan","sayur","buah","1","2","3"]

listA2 adalah [1,2,3]

mapA adalah {"apple":5,"lettuce":7}

list A
ikan
sayur
buah
1
2
3

list A2
1
2
3

mapA
lettuce 7
apple 5

Append listA
[ikan sayur buah 1 2 3 77]

Modify listA
[mod:ikan mod:sayur mod:buah mod:1 mod:2 mod:3]

224 views
Sun, 8 Mar 2015 10:39 pm
Huruf a sering lepas ... #fyuuh
213 views
Sun, 8 Mar 2015 10:38 pm
Home #webkoe pake bootstrap storystrap
198 views
Sun, 8 Mar 2015 6:42 pm
Sudah di balai lagi #dinasluar
201 views
Sun, 8 Mar 2015 5:25 am
Subuh di rumah #niniusti #dinasluar
260 views
Sat, 7 Mar 2015 6:05 pm
Nunggu taksi mau ke rumah #niniusti #dinasluar, alamatnya di Graha indah a3 no 3 rt.6 Dekat SDN 033
258 views
Sat, 7 Mar 2015 2:36 pm
belajar list/array di $go

Yang saya tahu pada awalnya, pada #javascript dan #python
    
    a = ['ikan', 'sayur', 'buah', 1, 2, 3]

selesai, list sudah langsung terbentuk
bahkan dengan #php pun mudah

    a = array('ikan', 'sayur', 'buah', 1, 2, 3)

Buum, jadi ....

di GO lumayan runyam, namun JELAS dan RAPI

    listA   := []string{"ikan","sayur","buah", "1", "2", "3"}
    listB, _ := json.Marshal(listA)
    fmt.Println(string(listB)) // output ["ikan","sayur","buah","1","2","3"]

    listA2   := []int{1,2,3}
    listB2, _ := json.Marshal(listA2)
    fmt.Println(string(listB2)) // output [1,2,3]

listA adalah list dengan type data STRING, angka bisa masuk, tapi dia tidak diperlakukan sebagai INT (dengan petik dua "")
sedangankan listA2 adalah list dengan type data INT, anggotanya benar-benar angka (tanpa petik dua ""),
ikan sayur buah ERROR pada saat di-compile jika dipaksakan masuk

kode lengkapnya #go-nya :

    package main

    import "fmt"
    import "encoding/json"

    type Blog struct {
        id string
        things string
        tag []string
    }

    func main() {
        
        fmt.Println("Mari mulai ...")

        // list
        listA   := []string{"ikan","sayur","buah", "1", "2", "3"}
        listB, _ := json.Marshal(listA)
        fmt.Println(string(listB))

        listA2   := []int{1,2,3}
        listB2, _ := json.Marshal(listA2)
        fmt.Println(string(listB2))   

        // dict
        mapA    := map[string]int {"apple": 5, "lettuce": 7}
        mapB, _ := json.Marshal(mapA)
        fmt.Println(string(mapB))    
    }

325 views
Sat, 7 Mar 2015 12:43 pm
Benar benar galau, look like GO more fast then express #webkoe
65 views
Sat, 7 Mar 2015 11:07 am
Nyari info node.js di Indonesia, malah digiring ke forum kaskus, pas kebetulan ada yang menawarkan proyek simple web. Nice, simple web ... ane coba ikutan daftar, ternyata digiring ke http://project.co.id - inti dari web ini sama seperti Linkedn. Ane Bid (istilahnya melamar) ke projek tadi, trus bisa melihat siapa saja yang sudah bid, ada nama ahmadsuhaimi (http://www.ahmadsuaidi.com/) yang ternyata sudah punya rekam jejak banyak tentang perwebsite an, ane lihat portofolionya, ada traveller dan blablabla ... dari situ ane lihat ada fitur ticket, ternyata cara kerjanya seperti ini
1. Admin menyedikan form
2. User menginput
3. Diarahkan ke API Ticketing
4. Ada pilih, dan pemesanan
   ** ane pikir API nya langsung ke Maskapai, ternyata seperti kata Dino, mereka masuk ke Bulk travel dulu, dan sepertinya mereka melakukan pemesanan secara manual.
   ** lantas kenapa user ga langsung ke website maskapai saja, dan melakukan pembayaran langsung, tanpa perantara ?
   ** Mmm ... membingungkan
#project
235 views
Sat, 7 Mar 2015 10:59 am
API ticketing http://neotravellers.net/
URL : http://neotravellers.net/tiket-pesawat
POST : trip=0&flight=garuda&city_from=BPN-Balikpapan&city_to=BDJ-Banjarmasin&date_from=12-03-2015&date_to=&adult=1

Soure kode kota ada di home nya, murni HTML, tinggal sorong ...
#project
216 views
Sat, 7 Mar 2015 9:02 am
tidak mudah migrasi ke #go ... kembalikan lagi ke express, sementara ini #go masih dapat porsi di port 8080, http://webkoe.net:8080 #webkoe
258 views
Sat, 7 Mar 2015 8:55 am
tag posting lewat #go belum berafiliasi dengan tag manapun ... #webkoe
58 views
Sat, 7 Mar 2015 8:52 am
Bagian terberat ... parsing tag ke json tag, ... ane belum ngerti struktur data #go #todo
57 views
Sat, 7 Mar 2015 8:50 am
UserAgent OK #test #go #webkoe
52 views
Sat, 7 Mar 2015 8:50 am
#test UserAgent
57 views
Sat, 7 Mar 2015 8:37 am
Ip client Added #go #webkoe
51 views
Sat, 7 Mar 2015 8:36 am
Get IP Client #test
61 views
Sat, 7 Mar 2015 8:33 am
Get IP again #test
64 views
Sat, 7 Mar 2015 8:32 am
Get Ip Client #test
47 views
Sat, 7 Mar 2015 7:38 am
Hoahaha ... lumayan lah ni theme slate-nya bootstrap #webkoe
57 views
Sat, 7 Mar 2015 7:16 am
<code> fmt.Println("hello") </code> #test
49 views