@sunfmin 和@yedingding 主持
时间:12 月 8 日(周六)上午 10 点开始 如果没完成,下下周六继续
地点:杭州大浪,杭州拱墅区丝联 166 创意园,登云路和金华路口,金华路进,北 3 层红楼走到最里面入口,上 3 楼。
注意事项:自带电脑,最好 Linux 或 Mac 系统,欢迎踊跃参加,午饭兰州拉面(自己支付)哈哈。
内容: @yedingding 的想法:
web chat:任何一个页面如果加载了 JS 的话,访问这个页面的用户之间就可以做 group chat
活动方式是:先由 @sunfmin 向大家普及 Go 语言的基础,然后下午大家组队(视人数分几个队伍)边学边干,有没有其他熟悉 Go 的人愿意来做 Mentor, :)
我的域名 ifchat.com 就是预想来做这种临时聊天注册的,group 可以用 url 里面的 id 来设置,不用注册就可以新建一个 group,还想到的有意思的 chat 是通过直接给图片注释,通过图片的修改来 chat,这样直接在图片上交流,对于解释图片还是很方便的
#32 楼 @yedingding 我也是完全不知道啊 ... 只知道 Terminal 的标准好像是 VT100 什么的
或者简单一点,能把 script 录下来的 session 在浏览器里播放,并且能拖到任一时间点
成果物
https://gist.github.com/4239211
package main
import (
"code.google.com/p/go.net/websocket"
// "io"
"log"
"net/http"
)
type Room struct {
Id string
Sockets []*websocket.Conn
}
var Rooms = []Room{}
func MyRoom(id string, ws *websocket.Conn) (r Room) {
for _, room := range Rooms {
if room.Id == id {
r = room
break
}
}
r.Id = id
r.Sockets = append(r.Sockets, ws)
Rooms = append(Rooms, r)
return
}
func (r Room) BroadCast(message string) (err error) {
for _, ws := range r.Sockets {
websocket.Message.Send(ws, message)
}
return
}
// hello world, the web server
func Connect(ws *websocket.Conn) {
log.Println("IN", ws.Request().URL.Query())
room := MyRoom(ws.Request().FormValue("url"), ws)
log.Println(Rooms[0], Rooms)
for {
var message string
err := websocket.Message.Receive(ws, &message)
if err != nil {
log.Println(err)
return
}
log.Println(message)
room.BroadCast(message)
}
}
func main() {
http.Handle("/connect", websocket.Handler(Connect))
err := http.ListenAndServe(":12345", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
@sunfmin 今天讲的蛮好,我学到了很多,明天回去了总结下,写个帖子来记录下,哈哈~
go 确实非常的不错,大家可以试试,学习成本很低:)
最后,再次感谢 @sunfmin @yedingding 还有 那位坐对面的兄弟,最后那段讨论非常有意思:)
#42 楼 @xmonkeycn ASICS 有自己的“科学家”研究这些,然后给我们各种表格和图,我们负责实现成可执行的程序…… 所以算法上没啥特别的,大部分是死数据,用条件筛选。不过涉及到一些微积分的东西,例如@yeerkunth 提到的牛顿法。