张怀义 在小组 2049BBS
动态 帖子 71 评论 356 短评 0 收到的赞 送出的赞
  1. 张怀义   在小组 2049BBS 回复文章

    2049代码记录

    Lowering qubit requirements using binary codes

    Introduction

    Molecular Hamiltonians are known to have certain symmetries that are not taken into account by mappings like the Jordan-Wigner or Bravyi-Kitaev transform. The most notable of such symmetries is the conservation of the total number of particles in the system. Since those symmetries effectively reduce the degrees of freedom of the system, one is able to reduce the number of qubits required for simulation by utilizing binary codes (arXiv:1712.07067).

    We can represent the symmetry-reduced Fermion basis by binary vectors of a set $\mathcal{V} \ni \boldsymbol{\nu}$, with $ \boldsymbol{\nu} = (\nu_0, \, \nu_1, \dots, \, \nu_{N-1} ) $, where every component $\nu_i \in \lbrace 0, 1 \rbrace $ and $N$ is the total number of Fermion modes. These binary vectors $ \boldsymbol{\nu}$ are related to the actual basis states by: $$ \left[\prod_{i=0}^{N-1} (a_i^{\dagger})^{\nu_i} \right] \left|{\text{vac}}\right\rangle \, , $$ where $ (a_i^\dagger)^{0}=1$. The qubit basis, on the other hand, can be characterized by length-$n$ binary vectors $\boldsymbol{\omega}=(\omega_0, \, \dots , \, \omega_{n-1})$, that represent an $n$-qubit basis state by: $$ \left|{\omega_0}\right\rangle \otimes \left|\omega_1\right\rangle \otimes \dots \otimes \left|{\omega_{n-1}}\right\rangle \, . $$ Since $\mathcal{V}$ is a mere subset of the $N$-fold binary space, but the set of the vectors $\boldsymbol{\omega}$ spans the entire $n$-fold binary space we can assign every vector $\boldsymbol{\nu}$ to a vector $ \boldsymbol{\omega}$, such that $n<N$. This reduces the amount of qubits required by $(N-n)$. The mapping can be done by a binary code, a classical object that consists of an encoder function $\boldsymbol{e}$ and a decoder function $\boldsymbol{d}$. These functions relate the binary vectors $\boldsymbol{e}(\boldsymbol{\nu})=\boldsymbol{\omega}$, $\boldsymbol{d}(\boldsymbol{\omega})=\boldsymbol{\nu}$, such that $\boldsymbol{d}(\boldsymbol{e}(\boldsymbol{\nu}))=\boldsymbol{\nu}$. In OpenFermion, we, at the moment, allow for non-linear decoders $\boldsymbol{d}$ and linear encoders $\boldsymbol{e}(\boldsymbol{\nu})=A \boldsymbol{\nu}$, where the matrix multiplication with the $(n\times N)$-binary matrix $A$ is $(\text{mod 2})$ in every component.

    Symbolic binary functions

    The non-linear binary functions for the components of the decoder are here modeled by the $\text{BinaryPolynomial}$ class in openfermion.ops. For initialization we can conveniently use strings ('w0 w1 + w1 +1' for the binary function $\boldsymbol{\omega} \to \omega_0 \omega_1 + \omega_1 + 1 \;\text{mod 2}$), the native data structure or symbolic addition and multiplication.

  2. 张怀义   在小组 2049BBS 回复文章

    2049代码记录

    高通滤波和低通滤波明天记录下

  3. 张怀义   在小组 2049BBS 发表文章

    2049代码记录

    Q4 表示 分母是 2的4次方。同理 Q10 表示 分母是 2的10次方。

    以下是数学推导过程 10 * log10("true energy") in Q4 = 2^4 * 10 * log10("true energy")

    = 160 * log10(2) * log2("true energy")

    令 true energy = |energy| * 2^|tot_rshifts| 且 |kLogConst| = 160 * log10(2)

    160 * log10(2) * log2("true energy") = |kLogConst| * log2(|energy| * 2^|tot_rshifts|)

    = |kLogConst| * (log2(|energy|) + |tot_rshifts|)

    令 |energy| = 2^14 + frac_Q15

    |kLogConst| * (log2(|energy|) + |tot_rshifts|) = |kLogConst| * (log2(2^14 + frac_Q15 ) + |tot_rshifts|)

    = |kLogConst| * (log2(2^14 (1+ frac_Q15>>14) ) + |tot_rshifts|)

    = |kLogConst| * (14 + log2(1+ frac_Q15>>14) + |tot_rshifts|)

    ~= |kLogConst| * (14 + frac_Q15>>14 + |tot_rshifts|)

    令 frac_Q15 = (|energy| & 0x00003FFF)

    int16_t log2_energy = kLogEnergyIntPart;

    log2_energy += (int16_t) ((energy & 0x00003FFF) >> 4);

    *log_energy = (int16_t)(((kLogConst * log2_energy) >> 19) +

        ((tot_rshifts * kLogConst) >> 9));
    
  4. 张怀义   在小组 2049BBS 回复文章

    2049增加Google验证码代码

    安全可靠,小二可以自己比对下我的修改 @小二 如果有任何问题,都可以@我

  5. 张怀义   在小组 2049BBS 回复文章

    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 的代码就可以了

  6. 张怀义   在小组 2049BBS 回复文章

    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)
    }
    
  7. 张怀义   在小组 2049BBS 发表文章

    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

  8. 张怀义   在小组 2049BBS 回复文章

    征集antispam方案

    @Shiro #55 标准HTTP就不带Mac地址,而且这个不是唯一可以伪造。还违背了匿名承诺

  9. 张怀义   在小组 2049BBS 回复文章

    致管理员

    @ereee #7 其实我也觉得应该关闭树洞和垃圾场。但是小二的理念是言论自由,不限制任何发言,最多就是移到树洞和垃圾场。小二自己的地盘,我们这样建议是没意义的

  10. 张怀义   在小组 2049BBS 回复文章

    征集antispam方案

    @hello _chris #52 https://www.socketloop.com/tutorials/golang-recaptcha-example

    我觉得这个说的很清楚,晚上我改个demo发出来,我觉得小二自己可以搞定的

  11. 张怀义   在小组 2049BBS 回复文章

    致管理员

    @巴塞罗那奥运会火炬 #5 隔壁对小二念念不忘,导致很多被品葱封禁的人来这里发泄。也导致了这次恐怖袭击。我也是被隔壁封杀了才来这里的。

    我们来这里就是因为被隔壁封杀了!那么小二如何区分我这样的和这次的恐怖份子?把我这样的用户给误杀了?

    人肉审核,本来就是主观判断,不也是通过人肉敏感词来判断对方是不是恶意用户么?这个工作我宁可让电脑来做

  12. 张怀义   在小组 2049BBS 回复文章

    致管理员

    不觉得敏感词就一定是政治审核。隔壁有些人,他们就是来树洞参观的,从不发帖子,你让他们注册写什么,自我介绍么?

    如果小二觉得人少,人肉审核可以接受,那我觉得对注册方而言,要等很久才可能知道自己注册成功了,可能就没意思了,谁注册不是一时兴起呢?

  13. 张怀义   在小组 2049BBS 回复文章

    征集antispam方案

    我觉得品葱管理员不应该干涉2049内政,如果参与讨论应该以2049用户身份。

    应该使用敏感词系统,YouTube也有黄标,这个是正常网站运营的正常手段。可以根据各个时期增加删除。不应该因为共产党用了这个技术就排斥这个技术。

    共产党控制下也有医院,难道医院就是邪恶的么?

    技术不存在正邪之分,完全取决于怎么用和为什么用?

    小号属于合法行使自己的言论自由,不应该因为是小号被禁,而应该取决于言论是不是符合2049的理性讨论注册申明。

  14. 张怀义   在小组 2049BBS 回复文章

    总统应该取消两届八年的任期限制

    @陈士杰 #16 我在11楼表达了我的理解,管理国家的是一个团体。这个团体不一定叫党。比如朱元璋成立明朝。他没有管自己那个团体叫党,但他代表了那个利益集团。我觉得只是现代化社会,人类社团组织形式得到了进化,党成为了现代化政治的标准

  15. 张怀义   在小组 2049BBS 回复文章

    话说,国内现在网文感觉没以前有活力了,怎么回事?

    Google搜中文都已经是垃圾了,应该说中文已经被污染了。不止网文

  16. 张怀义   在小组 2049BBS 回复文章

    关于疫情的一点想法

    @4266063 #2 你可以让小二移出来到时政

  17. 张怀义   在小组 2049BBS 回复文章

    关于疫情的一点想法

    @小二 作者申请转移出水区

  18. 张怀义   在小组 2049BBS 回复文章

    纸币与信用

  19. 张怀义   在小组 2049BBS 回复文章

    征集antispam方案

    恐怖分子,它是一个个自己人工注册的,不是写脚本批量注册。现在通过限制注册的方式,对恐怖分子无效,缘木求鱼!

    更多应该是识别出这个账号是恐怖分子!最简单的办法,就是敏感词。

    个人认为,像“肉棒”这个词汇,明显不是合理词汇,有这类词汇就自动转垃圾区,就可以了。

  20. 张怀义   在小组 2049BBS 回复文章

    征集antispam方案

    大神,我觉得限制注册的手段没用!因为这次捣乱分子是活人注册。如果你能拦住它注册,也就是拦住了普通人类注册。

    还是和隔壁品葱一样,增加敏感词吧。发出未成年不宜的词汇,就自动发到垃圾区。这个开发量,对你来说最小,也最简单。

  21. 张怀义   在小组 2049BBS 回复文章

    站内提醒能不能搞个不读了睡大觉(一键全部已读)

    你可以自己改代码,开源的

  22. 张怀义   在小组 2049BBS 回复文章

    总统应该取消两届八年的任期限制

    @陈士杰 #12 前辈,我的理念是这样的。首先,政党的注册参考结婚制度。退党和解散,走离婚制度。无党派当总统的例子我没见过。

    其实我脑子里整个流程很复杂,打好多字,不想打。

    实际上无党派总统根本不可能,这就好比你去装修房子,找个人不是公司,你不要售后了?

  23. 张怀义   在小组 2049BBS 回复文章

    总统应该取消两届八年的任期限制

    我觉得,管理国家的本来就不是一个人。应该是一个团体,某些人管这个叫政党。我觉得限制政党连任才对,一个政党最多连任16年。总统不过是临时代表了这个政党。类似企业法人

  24. 张怀义   在小组 2049BBS 回复文章

    流量跟踪码是什么,有什么危害,是否等同于钓鱼

    @BE4 #12 好吧,前辈。我用Charles抓包分析下看看。我对cnbeta比较感兴趣。拿它练手了!

    代码我看不懂的,我只会Java,不会JavaScript!我只是工商管理毕业!

  25. 张怀义   在小组 2049BBS 回复文章

    流量跟踪码是什么,有什么危害,是否等同于钓鱼

    @BE4 #13 前辈,我英语不好。不会发英语帖子。。。

    能不能前辈翻译好以后发过去。我自己会订阅问题,有了答复自己看,就不劳烦前辈翻译了。

  26. 张怀义   在小组 2049BBS 回复文章

    流量跟踪码是什么,有什么危害,是否等同于钓鱼

    @BE4 #10 我有好多问题啊,为什么Tor浏览器集成了noscript却不集成uBlockOrigin?为什么不同网站的同一个跟踪码可以生存同一个跟踪ID,还有这个跟踪ID是如何产生的?如果我在win10下,一直每隔20分钟切换一个沙盒,那么是不是每20分钟一个跟踪ID?会重复么?我觉得沙盒比虚拟机好用很多,跑在内存上,类似docker

  27. 张怀义   在小组 2049BBS 回复文章

    从B站的av到BV说起~

    @小二 #9 小二大神,如果是单纯加标记,是无法做到后面的0和验证是无法获取标记的,所以这段逻辑肯定很复杂。还是要严谨。前辈不用睡觉么,我刚起床

  28. 张怀义   在小组 2049BBS 回复文章

    纸币与信用

    @Merlin #14 前辈,有个女孩过去对我很冷淡,最近想和我交往。她学的也是化学!她的毕业设计是基于psi4和pyscf的,她希望我可以帮她。我是真心喜欢她的。前辈会不会这两个软件啊?教教我,谢谢了!

  29. 张怀义   在小组 2049BBS 回复文章

    从B站的av到BV说起~

    @小二 #6 我看完你发的文档了,有一个问题是我不理解的。椭圆曲线加密的是整型数据,但是货币是浮点型的。我想了解下这个过程是如何转换的。这个文档里没有找到,我打算去看看源码实现研究下。另外它的抗ASIC特性,是值得我去研究的。其中nocgo和cgo实现也需要我重点阅读。我对go语言支持simd感觉到很不可思议。这段时间我会花大量时间研究这个开源项目。我在大学学的是公司管理,学校要求我们学习Java。我自己无聊把Java虚拟机源码略读过一遍,重点全放在Java虚拟机如何自己生成simd代码,支持Intel的avx2指令集。还去看了一些jvm加速技术,比如pgo加速。也看了Java虚拟机的tls实现,所以对椭圆加密算法已经比较熟了

  30. 张怀义   在小组 2049BBS 回复文章

    流量跟踪码是什么,有什么危害,是否等同于钓鱼

    前辈,我不理解,在墙内部署Google,Facebook等公司的跟踪码,Google和Facebook能获取到收集的数据么?

    不能的话,为什么有站长部署呢?这个部署了,会有什么后果?如何工作?原理是什么?代码在哪里?是不是可以找一个跟踪码,分析下源码,告诉我,都采集了什么,如何实现,原理,最后采集的数据发到哪里?

  31. 张怀义   在小组 2049BBS 回复文章

    中文互联网中“讨论”的消亡

    @饱读书名 #31 如果都是锥形,也有ipv6,对ipv6做nat的很稀有

  32. 张怀义   在小组 2049BBS 回复文章

    从B站的av到BV说起~

    @小二 #6 我学过TLS 的椭圆曲线算法,包括secp256。我看你发来的文档了,基本可以接受!明天继续阅读。

    但是我更感兴趣的是基于CKKS算法的零知识证明。不过为了和小二大神交流,我可以暂缓自己的目标,先学习grin coin的源码和设计思想

  33. 张怀义   在小组 2049BBS 回复文章

    【转载】找出不同的硬币

    @饱读书名 #8 在我看来,比较轻和比较重不是一样么?

  34. 张怀义   在小组 2049BBS 回复文章

    从B站的av到BV说起~

    @小二 #1 我最近在BE4前辈的网站,学习区块链技术的零知识证明,感觉很有兴趣。IPFS应该不存在零知识证明技术,和我的学习目的差距太大了。还是谢谢小二大神的推荐。我个人觉得BE4前辈,人挺好的,技术也很牛逼,为什么和小二大神矛盾如此巨大?

  35. 张怀义   在小组 2049BBS 回复文章

    【转载】找出不同的硬币

    又写错了

    $ C_{11}^2$

  36. 张怀义   在小组 2049BBS 回复文章

    【转载】找出不同的硬币

    写错了

    $ C_11^2 = 55 $

  37. 张怀义   在小组 2049BBS 回复文章

    从B站的av到BV说起~

    @小二 #1 大神说我,我都没有听过。搜了下ipfs是取代https?中文网络的这个搜索结果,我感觉很不可思议。

    我说下我的理解,我感觉ipfs类似raid1存储阵列。属于离散存储,类似于raid阵列坏了一块硬盘,我也可以恢复。ipfs就是这样的一个想法。只是从文件系统,改成了网络文件系统,类似samba协议的去中心化网络文件存储系统协议。

    我一个刚毕业,没有工作,没有存款的小白,就不去炒币了。我学习比特币,更多是学习算法和数据结构。

  38. 张怀义   在小组 2049BBS 回复文章

    从B站的av到BV说起~

    @sean #2 晚辈学的是工商管理,刚毕业的应届生。不敢和这里其他大神比

  39. 张怀义   在小组 2049BBS 回复文章

    【转载】找出不同的硬币

  40. 张怀义   在小组 2049BBS 发表文章

    从B站的av到BV说起~

    在知乎上,看到大神发了如何av转BV的算法。这里大部分都看懂了,唯有base58不理解。

    我通过Google搜索,发现了一个开源项目bitcoin ''' https://github.com/bitcoin/bitcoin/blob/master/src/base58.cpp '''

    看不懂,明天看看~

    后来看到一个很熟悉的单词 Merkel tree ''' https://github.com/bitcoin/bitcoin/blob/master/src/merkleblock.cpp '''

    忘了老师上课怎么说来着,也makr下,明天继续看看~

    我还发现了一堆网址 '''

        vSeeds.emplace_back("seed.bitcoin.sipa.be"); // Pieter Wuille, only supports x1, x5, x9, and xd
        vSeeds.emplace_back("dnsseed.bluematt.me"); // Matt Corallo, only supports x9
        vSeeds.emplace_back("dnsseed.bitcoin.dashjr.org"); // Luke Dashjr
        vSeeds.emplace_back("seed.bitcoinstats.com"); // Christian Decker, supports x1 - xf
        vSeeds.emplace_back("seed.bitcoin.jonasschnelli.ch"); // Jonas Schnelli, only supports x1, x5, x9, and xd
        vSeeds.emplace_back("seed.btc.petertodd.org"); // Peter Todd, only supports x1, x5, x9, and xd
        vSeeds.emplace_back("seed.bitcoin.sprovoost.nl"); // Sjors Provoost
        vSeeds.emplace_back("dnsseed.emzy.de"); // Stephan Oeste
    

    '''

    最后是零知识证明!

    果然开启了新世界的大门~

    一些我个人的观点,区块链技术就是骗钱的,我都不知道我研究区块链干嘛?

    明天先研究会比特币,等研究好了。我想看看以太坊的代码。

    https://github.com/ethereum/go-ethereum

    https://github.com/hyperledger/hyperledger

    下周去上班了,大家就看不见我了,希望大家保重

  41. 张怀义   在小组 2049BBS 回复文章

    中文互联网中“讨论”的消亡

    @饱读书名 #29 和是不是在nat后没有关系,在于是锥形还是对称型的nat

    太晚了,不聊了。前辈明天继续吧。晚安了~

  42. 张怀义   在小组 2049BBS 回复文章

    中文互联网中“讨论”的消亡

    @饱读书名 #27

    前辈,这个是我学到的webrtc内网穿透技术

    https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API/Protocols

    我觉得,不管是什么场景下,都不可能去中心,因为STUN服务器必须存在,所以GFW只要攻击STUN服务器就可以了

  43. 张怀义   在小组 2049BBS 回复文章

    中文互联网中“讨论”的消亡

    @饱读书名 #24 webrtc做不了你说的东西

    去中心化也得有个介绍中心一样的东西

  44. 张怀义   在小组 2049BBS 回复文章

    流量跟踪码是什么,有什么危害,是否等同于钓鱼

    前辈,我觉得你放弃吧

    他们会把你移水

    我先makr下,明天再拜读

    前辈听过syn flood么?我觉得前辈可以对品葱练练手

  45. 张怀义   在小组 2049BBS 发表文章

    Bosses Panic-Buy Spy Software To Keep Tabs On Remote Workers

    https://tech.slashdot.org/story/20/03/27/1943251/bosses-panic-buy-spy-software-to-keep-tabs-on-remote-workers

  46. 张怀义   在小组 2049BBS 发表文章

    高校毕业生面临萎缩的就业市场

    https://www.bbc.com/zhongwen/simp/chinese-news-52063919

    2020 年,中国有 341 万人报考研究生,比 2019 年增加 50 多万人。这也是历史的新高。

  47. 张怀义   在小组 2049BBS 发表文章

    Lisa大神能不能帮忙解释下这两个问题?

    https://pincong.rocks/article/17023

    这个是什么原理?

    https://pincong.rocks/question/22222

    这个可行么?