半年以后如果UWT还没有被citi取消,买一点,等上半年在抛,应该可以赚不少。
2049BBS
-
征集antispam方案
@张三 #54
到底发生什么事情了?我只了解到有一个ID在发很多少儿不宜的帖子(好像对象是“熊熊”?),然后小二发了很多关于站务的帖子。为什么会闹得这么大?在树洞看到一个@看电视了 的ID,好像和他以及rtg以及其他一些账号有关系,能给个介绍吗?发生了什么事?就当是记录历史吧。
-
网站暂停注册
反对仅仅因为对女权不同看法而折叠和封禁,有不同看法可以文明交流。 对专门辱骂人身攻击的号可以封禁。
-
网站暂停注册
很开心,我是昨天注册的,很幸运的
-
河北保定一官员私下承认,许可馨帖子中的“肉”字刺激了他
信息来源请求
-
请问有没有办法远程控制自己的手机?
我印象中似乎有 平板与手机的类似功能。
-
技术白痴“碰巧”推动了某站一个不起眼的改动
@鬼鬼 #2 不至於有鬼,只是他們的心理有問題,而且越來越嚴重,致使其他用戶也開始察覺到想離開了,他們作為建制派不斷迫害異見者,論壇開始失去活力
-
我开通了我的博客
换了个平台,上面的作废。 https://letus.inspiredlife.fun/profile/idealist/status
-
中国参与下的全球化与自由主义的悖论
大陆人收入很低的,输入什么中国模式,都是建立在畸形的制度上
-
河北保定一官员私下承认,许可馨帖子中的“肉”字刺激了他
这是一套劣质的制度
-
抗疫自救之发豆芽
奇怪,我倒是没有注意到豆芽上面还有叶子
-
河北保定一官员私下承认,许可馨帖子中的“肉”字刺激了他
由此可见,大陆的制度根本无所谓优秀,就是严重地剥削而且大陆人支性又重,受着欺辱而不起来反抗罢了,辛辛苦苦工作连块肉都买不起,生活水平还不如很多第三世界国家,官僚也是相当得腐败和低效,所以中共最后只能是败亡。
-
只是想做点什么仅此而已
您好 登陆 需要手机号验证的
-
只是想做点什么仅此而已
收到请按1.
-
最近想学习一些武术,请问如何入门
天下武功唯快不破,建议练好腿功,势头不对就跑
-
最近想学习一些武术,请问如何入门
大洪水時,學格鬥沒有用,練跑方便逃跑和準備好武器比較實際
-
抗疫自救之发豆芽
所谓郑和种豆芽治疗败血症是谣言,第一,豆芽的维生素含量很少,不足以治疗败血症。第二,船上根本没有那么多的空间和淡水种豆芽。郑和船队其实是依靠沿岸的瓜果供给补充维生素的。
-
只是想做点什么仅此而已
赠送一个全新Gmail邮箱 已验证。 帐号 - [email protected] 密码 - hPae7tengtyiu 验证手机 - +447793170032 绑定邮箱 - [email protected](已验证,额外奉送,可以修改,不要绑定国内邮箱.)
密码 - 45*8.er]yG{aPQ&wz?\jx7+CDX9_:c/v -
2049增加Google验证码代码
额,忘了几个地方
前端html 增加
<script src='https://www.google.com/recaptcha/api.js'></script>后端golang部分
type JSONAPIResponse struct { Success bool `json:"success"` ChallengeTS time.Time `json:"challenge_ts"` // timestamp of the challenge load (ISO format yyyy-MM-dd'T'HH:mm:ssZZ) Hostname string `json:"hostname"` // the hostname of the site where the reCAPTCHA was solved ErrorCodes []int `json:"error-codes"` //optional }增加
json.Unmarshal(body, &APIResp) fmt.Println(APIResp)增加判断APIResp.Success 是true还是false 的代码就可以了
-
网站暂停注册
品葱的垃圾帖子已经很多了,每天看品葱如同从垃圾堆里翻东西吃。
-
中国参与下的全球化与自由主义的悖论
题目似乎很宏大,但是鉴于水平和时间有限说不了太多,只想提出个引子 现在这个时代与冷战时期美苏争霸完全不同了,冷战时期美国与苏联分属两个不同的经济体系,美国主导的自由世界实施市场经济,苏联主导的共产势力实施计划经济,两者基本上进水不犯河水,只是美国有时会买些粮食给苏联,交易量都不太大。苏联倒台后中国逐步深入的参与了自由世界的经济,大量西方企业在中国设厂,目前中国制造业已经占据全球30%的份额,是全球产业链的重要组成部分。当时西方国家的如意算盘是中国在参与了全球化分工以后,自由主义的因素会从经济渗入到政治,最终实现中国的民主化,然而实际的结果是大出乎他们所料的——中共的集权统治非但没有削弱反而大大加强,全球化分工反而给中共提供了对付西方国家的弹药,现在中国开始倒过来向全世界输出“中国模式”,自由主义反而处于一种岌岌可危的境地。 在二战末期和冷战初期,美国拥有强大的制造业实力,美国可以将其制造出来的产品用来援助自由世界的国家,使他们免遭苏联势力的侵袭,在冷战中后期,美国的制造业开始衰弱,一部分制造业被自由世界的其他国家承担,比如日韩台就承担了部分美国分流出来的半导体产业,美国自身出现了“去工业化”的现象,当然这对于美国的金融资本来他们完全欢欣鼓舞的接受,因为他们可以从这种分工中获取大量的利益,对于美国的国家利益和意识形态来说也没有问题,因为承担分工的国家是自由世界的一部分,他们同样遵守古典自由主义的原则,但是一旦把中国引入到全球化分工的体系中就完全不是这回事了。 我们都知道古典自由主义支持个人先于国家存在的政治哲学,强调个人的权利、私有财产,并主张自由放任的经济政策,然而中国体制与之截然相反,中国目前实行的是苏联共产主义制度与两千年秦制专政的结合体,这个制度支持国家先于个人,强调集体的权利,国有财产,主张严格管制的经济政策,这两种体制如同水与油一样无法相容,如果这样一种体制带着自身庞大的体量进入经济全球化,那最后的结果要不就是中国实行民主化要不就是世界走向集权化。 我认为自由世界能够战胜苏联正是因为其自身坚守的古典自由主义原则,但是在放任中共集权体制进入自由世界参与国际分工以后,自由主义自身遭到了破坏,古典自由主义的经济原则已经无法再坚守下去了,自由世界可能会向集权化靠拢,全球化也必将瓦解,冷战格局会再次形成,新冠病毒的肆虐将加快这个过程。
-
2049增加Google验证码代码
修改代码 https://github.com/Terminus2049/2049bbs/blob/df0914d35b4be3ccf6ae1e8da525b355dd54bd01/controller/user.go
登录的时候,访问 UserLogin 函数 修改如下
func (h *BaseHandler) UserLogin(w http.ResponseWriter, r *http.Request) { type pageData struct { PageData Act string Token string CaptchaId string } act := strings.TrimLeft(r.RequestURI, "/") title := "登录" if act == "register" { title = "注册" } tpl := h.CurrentTpl(r) evn := &pageData{} evn.SiteCf = h.App.Cf.Site evn.Title = title evn.Keywords = "" evn.Description = "" evn.IsMobile = tpl == "mobile" evn.ShowSideAd = true evn.PageName = "user_login_register" evn.Act = act token := h.GetCookie(r, "token") if len(token) == 0 { token := xid.New().String() h.SetCookie(w, "token", token, 1) } h.Render(w, tpl, evn, "layout.html", "userlogin.html") }提交代码修改如下
func (h *BaseHandler) UserLoginPost(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json; charset=UTF-8") token := h.GetCookie(r, "token") if len(token) == 0 { w.Write([]byte(`{"retcode":400,"retmsg":"token cookie missed"}`)) return } act := strings.TrimLeft(r.RequestURI, "/") type recForm struct { Name string `json:"name"` Password string `json:"password"` Response string `json:"g-recaptcha-response"` } type response struct { normalRsp } decoder := json.NewDecoder(r.Body) var rec recForm err := decoder.Decode(&rec) if err != nil { w.Write([]byte(`{"retcode":400,"retmsg":"json Decode err:` + err.Error() + `"}`)) return } defer r.Body.Close() if len(rec.Name) == 0 || len(rec.Password) == 0 { w.Write([]byte(`{"retcode":400,"retmsg":"name or pw is empty"}`)) return } nameLow := strings.ToLower(rec.Name) if !util.IsUserName(nameLow) { w.Write([]byte(`{"retcode":400,"retmsg":"name fmt err"}`)) return } // did we get a proper recaptcha response? if null, redirect back to sigup page if rec.Response == "" { // user press submit button without passing reCAPTCHA test // abort http.Redirect(w, r, "/", 301) return // return control to stop execution, otherwise it will continue } // get end user's IP address remoteip, _, _ := net.SplitHostPort(r.RemoteAddr) fmt.Println("remote ip : ", remoteip) // to verify if the recaptcha is REAL. we must send // secret + response + remoteip(optional) to postURL secret := "[你的 secret key]" postURL := "https://www.google.com/recaptcha/api/siteverify" postStr := url.Values{"secret": {secret}, "response": {rec.Response}, "remoteip": {remoteip}} responsePost, err := http.PostForm(postURL, postStr) if err != nil { fmt.Println(err) return } defer responsePost.Body.Close() body, err := ioutil.ReadAll(responsePost.Body) if err != nil { fmt.Println(err) return } // this part is for server side verification var APIResp JSONAPIResponse json.Unmarshal(body, &APIResp) fmt.Println(APIResp) db := h.App.Db timeStamp := uint64(time.Now().UTC().Unix()) if act == "login" { bn := "user_login_token" key := []byte(token + ":loginerr") if db.Zget(bn, key).State == "ok" { // todo //w.Write([]byte(`{"retcode":400,"retmsg":"name and pw not match"}`)) //return } uobj, err := model.UserGetByName(db, nameLow) if err != nil { w.Write([]byte(`{"retcode":405,"retmsg":"json Decode err:` + err.Error() + `","newCaptchaId":"` + captcha.New() + `"}`)) return } if uobj.Password != rec.Password { db.Zset(bn, key, uint64(time.Now().UTC().Unix())) w.Write([]byte(`{"retcode":405,"retmsg":"name and pw not match","newCaptchaId":"` + captcha.New() + `"}`)) return } sessionid := xid.New().String() uobj.LastLoginTime = timeStamp uobj.Session = sessionid jb, _ := json.Marshal(uobj) db.Hset("user", youdb.I2b(uobj.Id), jb) h.SetCookie(w, "SessionID", strconv.FormatUint(uobj.Id, 10)+":"+sessionid, 365) } else { // register siteCf := h.App.Cf.Site if siteCf.CloseReg { w.Write([]byte(`{"retcode":400,"retmsg":"stop to new register"}`)) return } if db.Hget("user_name2uid", []byte(nameLow)).State == "ok" { w.Write([]byte(`{"retcode":405,"retmsg":"name is exist","newCaptchaId":"` + captcha.New() + `"}`)) return } userId, _ := db.HnextSequence("user") flag := 5 if siteCf.RegReview { flag = 1 } if userId == 1 { flag = 99 } uobj := model.User{ Id: userId, Name: rec.Name, Password: rec.Password, Flag: flag, RegTime: timeStamp, LastLoginTime: timeStamp, Session: xid.New().String(), } // 从指定的用户中随机选一个头像作为新注册用户头像 // 指定用户必须连续,取最小id和最大id rand.Seed(time.Now().UnixNano()) min := siteCf.AvatarMinId // 2539 max := siteCf.AvatarMaxId // 2558 sampleID := rand.Intn(max-min+1) + min uidStr := strconv.FormatUint(uint64(sampleID), 10) uobj.Avatar = uidStr uobj.IgnoreLimitedUsers = true jb, _ := json.Marshal(uobj) db.Hset("user", youdb.I2b(uobj.Id), jb) db.Hset("user_name2uid", []byte(nameLow), youdb.I2b(userId)) db.Hset("user_flag:"+strconv.Itoa(flag), youdb.I2b(uobj.Id), []byte("")) h.SetCookie(w, "SessionID", strconv.FormatUint(uobj.Id, 10)+":"+uobj.Session, 365) } h.DelCookie(w, "token") rsp := response{} rsp.Retcode = 200 json.NewEncoder(w).Encode(rsp) } -
2049增加Google验证码代码
安全可靠,小二可以自己比对下我的修改 @小二 如果有任何问题,都可以@我
-
抗疫自救之发豆芽
疫情肆虐,居家隔离。干粮易有,蔬菜难求。
大航海时代,欧洲船员们在海上一漂就是一年几个月。由于缺乏蔬菜和维生素,败血病成了对船员们的健康威胁最大的疾病。而这一难题被东方航海家郑和及其团队克服。郑公公的良方就是:发豆芽。
这一古老的补充维生素的法子,在疫情期间,也被本人再次发掘并试验。
原料:绿豆
器皿:任何可以盖盖子的平底容器。据说用茶壶效果甚佳,因为有盖且可通过壶嘴灌水以保持湿润,堪称发豆芽神器。但我还是选择了蒸锅。因为下面有网眼可以将水过滤,不会让豆子坐水牢。
方式:每天都喷一点水,并用湿布包住。
时间:五天左右。
-
发个帖子记录自己看的动画吧
感觉种田篇的角色啦戏剧张力啦一下子下降了好多。
前面主角面对的都是劲敌,一不留神就死了的感觉。而且里面一些展开还是蛮有冰与火之歌那个劲的。
到了种田篇,我们都知道,他的实力可以吊打全世界,之所以剧情这么憋屈,是因为他空虚,无聊,寂寞,冻……
这就很淦了。
虽然我知道这个篇章对主角转变很必要,但我还是希望它能不能短一点……
-
中文互联网中“讨论”的消亡
@饱读书名 #42 中转的服务器在中国很难被跳过,人在中国 业务在大陆 你就发现了 运营商各地并没有完全消减隔阂 ,出口带宽严重被限制。
假设你要做个境外视频直播平台 如何让大陆人都能勉强观看呢
境内的cdn 隐藏的加速服务器还是需要 镜像 等等,成本都高到无法承受。以前好多h网都能直连ip 现在因为全网限速,都蛮难做。这是个极端的例子。
-
美国应该如何面对疫情之外的危机?
@ tongtingwah 支持你. 西方的人都不傻,中国屠夫的伪善早晚会被揭露,而且欧盟不是你一个小小的东方小国所撼动得了的,中国其实并不强大(如果真强大为什么还要靠捐款吗?真强大需要靠劳民伤财的阅兵吗?),抛开规模经济和多数无知人的经济(人口经济),都是空中楼阁,发展什么都需要靠模仿别人,囊肿的体制和负反馈等等,都已是恶疾缠身了,时间问题。
-
抗疫自救之发豆芽
tag“之发”是什么鬼?
-
2049增加Google验证码代码
参考文章 https://www.socketloop.com/tutorials/golang-recaptcha-example
1.去这里 http://www.google.com/recaptcha/ 申请secret key
2.修改代码
https://github.com/Terminus2049/2049bbs/blob/master/view/default/desktop/userlogin.html <p><label>验证码: <input type="text" id="captchaSolution" class="sl w200" value="" /></label></p>改为
<p><label>验证码: <div class="g-recaptcha" data-sitekey="[第一步申请的secret key]"></div></label></p>另外 修改 form_post 函数
function form_post(){ var name = $('#name').val(); var password = $('#password').val(); var password2 = $('#password2').val(); var g-recaptcha-response= $('#g-recaptcha-response').val(); if(name && password && g-recaptcha-response){ if(password && password2) { if(password != password2){ $.toast('密码两次输入不同'); $('#password').val(''); $('#password2').val(''); return false; } } $.ajax({ type: "POST", url: "/{ {.Act} }", data: JSON.stringify({'act': '{ {.Act} }', 'name': name, 'password': md5(password), 'g-recaptcha-response': g-recaptcha-response}), dataType: "json", success: function(data){ if(data.retcode==200){ window.location.href = "/"; }else{ reload(); $.toast(data.retmsg); } }, fail: function(errMsg) { $.toast(errMsg); } }); }else{ $.toast('用户名、密码和验证码必填'); } return false; }mobile版本,参考desktop继续修改 https://github.com/Terminus2049/2049bbs/blob/master/view/default/mobile/userlogin.html
-
发个帖子记录自己看的动画吧
不知道墙国三观党有没有坚持到第八集以后。 搜了搜墙国评论,果然又是一大堆“主角三观不正”什么的。 这都快成我的选片指南了,我就可着他们说三观不正的动画看,每次都看得特别嗨皮
-
发个帖子记录自己看的动画吧
看完了,动画实在太好看结果熬了个夜……(扶额)
唉,没心情长篇大论人物分析了,反正就是三个患有daddy issue的人的故事……
我觉得王子的转变挺有趣的,很显然他不是突然黑化加战力,而是那个弱鸡样本来就有演的成分,而且演到他自己都信了……
看了看漫画后续,感觉并不好看。即使女主出来也没提起动力,算了。
-
最近想学习一些武术,请问如何入门
@李五毛 无懈可击的回答
-
征集antispam方案
@掀翻小池塘 #4 多谢理解,我个人来说小号的目的是分散发言,减少其他人收集我的信息。所有的小号都是一次性的,随机生成密码,以免通过密码关联我个人其他身份。所以我每个时间都只有一个号,或者说我的小号就是我的唯一大号。而且我非常欢迎其他人说我是某些ID的小号,如果收集信息的人认为我是其他"著名"ID(大概率是恶名)的小号(回想一下,最近几个月我好像被人说过是be4和sorrysorry的小号),从而把我的发言加入错误的training set,也算是我为那些"著名"ID做出了贡献(i.e.,污染了他们收集的training sets)。
@小二 #48 多谢。对事不对人,很好。另外,我大概看了一下这次的事件。两边都很激动,一边文本生成低俗标题污染论坛(独狼式自杀恐怖袭击),一边挟持道德大棒要求广泛审查(团体式鼓动民意自纠)。请不要为了一个ID的行为而同意啤酒馆暴动,开始自我审查。小人一下,也许迫使你开始做出某些事就是这就是这次风波的来源。
另外,对我之前的mask ID的提议有什么想法吗?我清理一下思路,大概是每次主ID上线,可以选择生成一个mask ID (e.g., alias 1),在这次主ID上线后的一段时期(比如一天为限),无论多少次登录登出,这个alias 1在这段时间都不会改变,所有的发言都显示为alias 1(短时间mask ID不变是为了避免隔壁那些人说的“小号海”;另外我对这个词深表怀疑,更倾向于是某些人的污名化术语)。一段时间以后(比如一天以后再次上线),可以再次选择另外一个maks ID (e.g., alias 2),以防数据收集。当然,后台需要加密记录主ID最近两次使用的mask ID(e.g., alias 1 and alias 2),从而在发现如果主ID通过mask ID捣乱的时候可以对主ID进行封禁;同时后台只保留上两次使用过的 mask ID ,新的mask ID 自动替换旧的mask ID(当然,这个还是会有问题,但是起码会让数据收集的难度极大增大)。
最后,无论是注册审核还是验证码,阻拦的都是普通网友,对成建制的网军都是没有什么效果的,毕竟这些组织的技术和incentive都更高,更有可能隐藏潜入。你选择的对事不对人很好;不过你和其他管理员都是人,都有厌烦疏忽的时候,更不用说人治带来的彼此之间的人情纠缠;避免人治,使用程式进行automation才是sustainable的长久解决方法。
-
征集antispam方案
@张三 #54 btc?你确定搞个收费注册?
-
河北保定一官员私下承认,许可馨帖子中的“肉”字刺激了他
河北保定团委网评员管理办公室的一官员私下说,许可馨在帖子中,提到在美国,只要花很少的钱,即可买到肉蛋奶等,那个“肉”字,深深刺痛了他,因为从去年下半年开始,当地肉价一直在人民币40元左右,居高不下,许多人只好以三元一根的所谓小红肠(主要成分是淀粉、地沟油、苏丹红),作为肉类补充。
-
征集antispam方案
guest账号除了上述作用,主要作用在于:可以在某一板块留言。留言默认不显示,需要管理员审核。
-
致小二
这招不行。换个马甲你能认识?