Code Monkey home page Code Monkey logo

weibo's Introduction

Hello, this repository is mainly used for Weibo data storage.

If any Weibo is infringing, please let me know and I will delete it in time.

The code in the repository is used for platform synchronization of Weibo.

I have no plans to open source for Weibo for the time being.

If you have any ideas, feel free to email me.

weibo's People

Contributors

dependabot[bot] avatar tomotoes avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

weibo's Issues

考研还是找工作?

后续: 冲刺名校了. 冲不上再找工作. 不会二战.

不试试怎么知道, 干了.

以下部分作废.


今天,因为朋友和我吐槽她的研究生日常,并给了很多建议,我突然陷入了迷茫,究竟是考研还是找工作。

网上找了很多资料,查了很多院校信息,得到的结果却让我愈发焦虑。

刚刚我突然想明白了,没必要想太多,自己无非就是两个最根本的需求:

  1. 希望借助考研在计算机某一领域深耕。
  2. 进入大厂,证明自己。

针对第一条需求,我很清楚,除了 C9 系列,其他院校很难保证学术氛围。

因为这些年,我随着自己的性子,了解到了计算机中的很多领域。

今天查找院校信息时,每当我看到院校的研究方面,导师数量,大致就可以猜到学术气氛是怎样的了。

如果让我每天写无意义的论文报告,做无意义的工作,我宁愿不读研。

并且,这些年计算机领域,读研的风潮真是一波盖过一波。

就连重邮,广工这些普本都炸的厉害,复试线已过 350 。

层面上的好处,除了学历的提升,我找不到其他点。

我为什么拼尽一切,去一个不能保证学术氛围的学校。

三年时间,我浪费不起。

而第二条需求,我想经过努力,我可以实现,起码是可以看见希望的。


今年一开学,我没做太多的功课,就匆匆进入到了考研的大潮中。

这半年,每天都在英语和数学的循环中度过。

有时候,我也会问自己,选哪个学校,自己能成功吗?

可惜,当时太急,只想尽快结束一轮复习,然后再根据自己水平报考院校。

今晚这一**转变,我这上半年的所有功夫,就全都白费了。

哎,不甘,但在 2021 年的疫情影响下考上名校,我一个普本几乎不可能。

今年考研,会有更多院校改成 408,该炸的院校还会继续炸。

前端的发展

众所周知,前端最大的壁垒就是语言的单一性。
即,只有JavaScript实现了 DOM/BOM API,且浏览器引擎只能解析JavaScript
这迫使出现了很多语言的生态发展中 或多或少都出现了编译成JavaScript的库。

不过,现在出现了 WebAssembly,所以很多语言不必转换为JavaScript了,直接转换为WebAssembly,并且比解析JavaScript快得多。

image

Lighthouse

花了一晚上的时间 各种优化一个坏掉的番茄,结果还是有所欠缺。
Lighthouse 满分好难😭

image

Github Page 虚假的证书

刚刚在 V社 摸鱼的时候刷到了一个有关Github Page证书错误的帖子

本以为是普通的月经贴,可当我下了梯子 访问一个坏掉的番茄时,却收到了如下提示:

FetchEvent.respondWith received an error TypeError: 此服务器的证书无效.
您可能正在连接到一个伪装成"网址"的服务器.

emm,典型的中间人攻击,并且从帖子中可以看出全国各地、不同的运营商网络都受到了影响。

难道这件事终于要发生了吗...

当然也存在普通事故的可能性,毕竟也不是一次两次“泄露污染”了。

前端开发的一生之敌

前端开发的一生之敌: npm & babel & webpack
再加上各种预处理,脚手架配置...
哇,你可以想象...

for {
	吐血()
}

PS:我发现 几乎我接手的所有 vue or react 项目,到最后 都会走上用 vue–cli or create react app 重构的道路上。:disappointed:

微博的后续开发

emm,经过一天(2小时开发,8小时划水)的努力,现在 已为微博集成了匿名点赞功能。
具体是利用 Leancloud 的数据表中的一个对象字段,也就是把所有的点赞数据,全都放在一个字段里。

{
	"id":99
}

这样做的好处,就是减少HTTP请求,所有的微博点赞信息只需要请求一次。
并且,还可以利用Promise.all,将Github Graphql与其做个”伪并发“。

目前TODO:点赞数字滑出动画,点赞炸裂效果。

另,评论插件,再我考虑后,匿名评论还是算了。
交流有点门槛,不见得是件坏事。
并且,把评论数据交付个一个我不了解的平台,有点怕。
还是开发一套Github评论程序吧。

呐,先这样了。

张伟丽

"我希望八角笼里不说脏话,给孩子们树立一个好榜样。" —— 张伟丽

4.4

对抗击新冠肺炎疫情斗争牺牲的烈士和逝世同胞的深切哀悼,愿逝者安息,愿生者奋发。

html { 
  -webkit-filter:grayscale(1) 
} 

企业与追求

企业雇佣你,是为了让你帮它们完成某个可以增加收入、降低成本的项目,而不是为了让你追求个人的软件成就。

我不知道歌里唱的是谁,我听的全是你。

难忘

距离分开,已过半年多了。
每次睡觉前还是忍不住想她,昨晚梦见与她相遇,互道思念,复合了..
是时间太短,还是故事太少。

我他妈怎么这么弱。

URI文法

通用URI的格式如下:

[协议名]: //用户名:密码@主机名:端口/路径?查询参数#片段ID

            hierarchical part
        ┌───────────────────┴─────────────────────┐
                    authority               path
        ┌───────────────┴───────────────┐┌───┴────┐
  abc://username:[email protected]:123/path/data?key=value&key2=value2#fragid1
  └┬┘   └───────┬───────┘ └────┬────┘ └┬┘           └─────────┬─────────┘ └──┬──┘
scheme  user information     host     port                  query         fragment

  urn:example:mammal:monotreme:echidna
  └┬┘ └──────────────┬───────────────┘
scheme              path

周国平 《人与永恒》

我天性不宜交际。
在多数场合,我不是觉得对方乏味,就是害怕对方觉得我乏味。
可是我不愿忍受对方的乏味,也不愿费劲使自已显得有趣,那都太累了。
我独处时最轻松,因为我不觉得自己乏味。
即使乏味,也自己承受,不累及他人,无需感到不安。:beers:

github action的schedule

突然想到了一点,Github Action 有多种监听类型,比如:push,pr,issue,comment,etc.
但最“实用”的是schedule触发:

on:
  schedule:
    - cron: "*/30 * * * *"

我完全可以利用schedule当作一个免费的云函数啊。
比如:每天定时爬取p*rn,发送到电报群,邮件这样。

Auth window 工作流程

画了一张图,用来理解 怎么借助打开的窗体实现获取 token,而不丢失当前页面。
BCB5DCF3-6279-46E9-9596-5D2ECF131A89

时间真不等人

刚刚打开手机,收到一条全体消息: 下周开始网上教课了。

我心想,这才几号 这么着急。

当一打开日历,我特么惊了,26 号了?!

这时间一不留神真就飞走了。

淦,今天最后一天开机了。

我要考研了。

考研英语乱象

我真的很不理解,考研英语中 讲解单词会有那么多市场。

各种各样的视频,各种各样的方法,各种各样的龙门阵。

才五千多个单词,看单词书,不是最快的方法吗?

走 所谓的捷径反而浪费时间。

金鼻子剽窃奖(Plagiarius Award)

刚刚刷到了一条很有趣的信息:
由德国工业设计师 Rido Busse 博士于1977年设立的金鼻子剽窃奖Plagiarius Award奖,至今已有四十余年历史,回顾往年数据,**企业在2017年包揽了半数奖项、在2018年包揽前三名主要奖项,而在2019年更甚包揽了全部十个奖项,今年**企业则占据上榜名单的一半。

联想一下: 抄袭的电影(s)、音乐(s), 某公寓电视剧, 某自主研制的Python语言...

记忆里的常客

总有一些人,原本只是生命里的过客,后来却成了记忆里的常客。

日渐平庸

现状跟不上你内心的欲望,所以你焦虑甚至恐慌。

In the mind of a suicidal person - amos

The road is long and it is tough. The only choice left is to lie your way through the years, and only confide yourself whenever you find someone that you can trust enough not to stab you in the back. And these people are not always easy to find.

上天成仙

做了人类想成仙,生在地上要上天。

Referer VS. referrer

HTTP 请求的头信息里面,Referer 是一个常见字段,提供访问来源的信息。
HTTP 协议在请求(request)的头信息里面,设计了一个Referer字段,给出"引荐网页"的 URL。
这个字段是可选的。客户端发送请求的时候,自主决定是否加上该字段。

很有趣的是,这个字段的拼写是错的。
Referer的正确拼写是Referrer,但是写入标准的时候,不知为何,没人发现少了一个字母r
标准定案以后,只能将错就错,所有头信息的该字段都一律错误拼写成Referer

浏览器的 JavaScript 引擎提供document.referrer属性,可以查看当前页面的引荐来源。注意,这里采用的是正确拼写。

对于开发者来说,rel="noreferrer"属性是最简单的一种方法。
<a><area><form>三个标签可以使用这个属性,一旦使用,该元素就不会发送Referer字段。
注意,rel="noreferrer"采用的是正确的拼写。

点赞功能开发时遇到的时差问题

在开发微博点赞的过程中,本以为将所有的数据都存在一个字段里,减少请求数量,可我忽视了一个重要的问题,数据的同步。
假如你在某一时刻(A)打开微博,过了一段时间(B)后,点了个赞。
那么在 B 后,微博的最终数据,就是 A 之前的数据加上你这一个赞。
在 B 的过程中,所有其他游客的数据都会被你这一个赞抹掉。

解决方法也很简单:每次点赞前,重新拉取数据,可是这样 还会有些许时差冲突。

栗子: 我是时间线呐
A 点赞: A 拉取数据, 数据内存变化, 保存数据
B 点赞: ======= B 拉取数据, 数据内存变化, 保存数据.

呃,A 的点赞数据丢了。

看来,想达到数据不丢失,还是要换回最开始的数据模型。

即:数据表中的每一行代表一条微博,里面设置time字段,然后通过 increment 更新。

代价就是慢了。

为什么 Leancloud 不能提供一个批量查询数据的 API,本以为用上 他家的SDK 后,会优化请求方式,但现在看来,就是一个 简易的 ORM...

不好玩。

chameleon run

哈哈哈,我终于把chameleon run通关了~ 呜呼!

283

全身心复习考研了,距离考研还有283天,加油💪

简易的 Promise 实现

一个简易的 Promise 实现 Demo

class PromiseSimple {
  constructor(executionFunction) {
    this.promiseChain = [];
    this.handleError = () => {};

    this.onResolve = this.onResolve.bind(this);
    this.onReject = this.onReject.bind(this);

    executionFunction(this.onResolve, this.onReject);
  }

  then(onResolve) {
    this.promiseChain.push(onResolve);

    return this;
  }

  catch(handleError) {
    this.handleError = handleError;

    return this;
  }

  onResolve(value) {
    let storedValue = value;

    try {
      this.promiseChain.forEach((nextFunction) => {
         storedValue = nextFunction(storedValue);
      });
    } catch (error) {
      this.promiseChain = [];

      this.onReject(error);
    }
  }

  onReject(error) {
    this.handleError(error);
  }
}

微博第一章

微博 第一章的故事算是告一段落了。

接下来,还有一些TODO :

  1. 微博开源(有待考虑)
  2. 利用 github action ,同步微博到 twitter,telegram,github gist(优先
  3. 发送微博后通知推送(PWA + firebase 实现?或者 直接 watch 微博仓库)
  4. 登录评论时,打开一个窗口进行授权,保存评论时的状态(优先 已完成
  5. 微博分类功能(目前没有太大需求)
  6. 以日历的方式(或者 github 贡献图?)显示 当天微博(没需求+1)

测试微博

标题H1

标题H2

标题H3

标题H4

标题H5
标题H5

字符效果和横线等


删除线 删除线(开启识别HTML标签时)

斜体字 斜体字

粗体 粗体

粗斜体 粗斜体

缩写(同HTML的abbr标签)

即更长的单词或短语的缩写形式,前提是开启识别HTML标签时,已默认开启

The HTML specification is maintained by the W3C.

引用 Blockquotes

引用文本 Blockquotes

引用的行内混合 Blockquotes

引用:如果想要插入空白换行即<br />标签,在插入处先键入两个以上的空格然后回车即可,普通链接

锚点与链接 Links

普通链接
普通链接带标题
直接链接:https://www.mdeditor.com
[锚点链接][anchor-id]
[anchor-id]: https://www.mdeditor.com/
mailto:[email protected]
GFM a-tail link @pandao
邮箱地址自动链接 [email protected] [email protected]

@pandao

多语言代码高亮 Codes

行内代码 Inline code

执行命令:npm install marked

缩进风格

即缩进四个空格,也做为实现类似 <pre> 预格式化文本 ( Preformatted Text ) 的功能。

<?php
    echo "Hello world!";
?>

预格式化文本:

| First Header  | Second Header |
| ------------- | ------------- |
| Content Cell  | Content Cell  |
| Content Cell  | Content Cell  |

JS代码

function test() {
	console.log("Hello world!");
}

HTML 代码 HTML codes

<!DOCTYPE html>
<html>
    <head>
        <mate charest="utf-8" />
        <meta name="keywords" content="Editor.md, Markdown, Editor" />
        <title>Hello world!</title>
        <style type="text/css">
            body{font-size:14px;color:#444;font-family: "Microsoft Yahei", Tahoma, "Hiragino Sans GB", Arial;background:#fff;}
            ul{list-style: none;}
            img{border:none;vertical-align: middle;}
        </style>
    </head>
    <body>
        <h1 class="text-xxl">Hello world!</h1>
        <p class="text-green">Plain text</p>
    </body>
</html>

图片 Images

图片加链接 (Image + Link):

Follow your heart.

一件事情

要相信事情是可以一件一件一件一件一件一件一件一件一件一件一件一件一件一件一件一件的做完的。

gayhub?

Github 真就玩成了 Gayhub 呗。
image
awesome-pinned-gists 可以在这个repo 挑选你想要的 generate gist 程序,再利用 github action 的 schedule 去跑,最后把生成好的 gist pin 到 github 的个人主页上...

呃,会玩🐳

基于 Gitalk 二次开发的评论插件

忙了一天,基于 Gitalk 二次开发的评论插件,终于搞定了。
几乎优化了 Gitalk 的全部逻辑,不得不说 Gitalk 小问题真的蛮多的。

举个印象深刻的粟子:
Gitalk 中,初始化代码是这样的:

 getInit () {
   // 伪代码
    return getUserInfo().then(getIssue).then(getComments(issue))
  }

不管本地有没有 token,就直接获取用户信息。
很多情况下,都是没有 token 的,然后只能等待请求错误,进行下一步逻辑...

改进之后:

  init() {
    if (当前评论数为 0) {
      if (本地有 token) {
        return 获取用户信息
      }
      return Promise.resolve()
    }
    if (本地有 token) {
      return Promise.all([获取评论数据,获取用户信息])
    }
    return 获取评论数据
  }

其他的代码风格就不吐槽了...

其余的改变:

  1. API的请求方式 从 REST 改进成了 Graphql
  2. 美化了 UI
  3. 新增了 更新评论 功能
  4. 利用小窗体登录
  5. 去除了 用户私钥 这一安全问题

具体可见 我的微博评论。

一封钓鱼邮件

今天刚吃完午饭,偶然收到了一封钓鱼邮件:

image

闲来无事,打开上面的链接发现,这是一个制作粗糙的钓鱼网站。

只需要随便输入点东西,就会被传到后台 php 中进行存储,然后重定向到腾讯商城。

通过 whois 查询,发现注册商是一家名叫成都西维数码的公司,其他信息就不爆了。

因为没有趁手的工具,就用家里的老电脑写了一段 go 程序进行简单的数据 hack。

package main

import (
	"fmt"
	"log"
	"math/rand"
	"net/http"
	"net/url"
	"sync"
)

const (
	number = "123456789"
	char   = "0123456789.ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
	MAX    = 200
	URL    = "http://pashg.lnmb5.cn/1/test.php"
)

var wg sync.WaitGroup

func generateFakeQQ() string {
	length := rand.Intn(2) + 9
	var qq []byte = make([]byte, length, length)
	for i := 0; i < length; i++ {
		qq[i] = number[rand.Intn(len(number))]
	}
	return string(qq)
}

func generateFakePwd() string {
	length := rand.Intn(4) + 8
	var password []byte = make([]byte, length, length)
	for i := 0; i < length; i++ {
		password[i] = char[rand.Intn(len(char))]
	}
	return string(password)
}

func main() {
	wg.Add(MAX)
	i := 0
	for i < MAX {
		go func() {
			qq := generateFakeQQ()
			pwd := generateFakePwd()
			form := url.Values{}
			form.Add("u", qq)
			form.Add("p", pwd)
			form.Add("bianhao", "")
			form.Add("add", "登录")
			resp, err := http.PostForm(URL, form)
			if err != nil {
				log.Fatal(err)
			}
			fmt.Println(resp.Status)
			wg.Done()
		}()
		i++
	}
	wg.Wait()

}

哎,我是真的闲...

微博的评论插件

自从微博诞生之初,就一直想为其添加评论,点赞功能。
具体需求是 所有的交互功能全在一个坏掉的番茄站点里完成,而不需要前往Github

这两天,我一直在忙这件事。

因为我的微博是托管于Github Issue,各个平台发Issue,添加Label都很简单。
所以我不会改微博来源 这一点。

So,目前有两套方案实现全站交互。

  1. 利用像Gitalk,Utterance.es 这样的Comment插件。
    优点是快速开发,缺点是 微博点赞功能还需要实现。

    在我权衡后,因Utterance无法从外部更改UI,且未提供加载完成钩子,我决定采用Gitalk
    但在后续的开发中,因Gitalk采用的技术栈(Preact)与微博技术栈(React)相矛盾,全局变量各种冲突,所以不得不放弃使用React-dom-router的方法,而采用纯静态界面,数据通过url传递。

  2. 利用Baas平台,比如:Leancloud,Firebase。
    优点是 可以匿名发表评论,点赞。
    缺点是 数据存在依赖性,我非常不放心这一点。
    在网上找了很久关于Leancloud的资料,关于公司发展前景的信息几乎没有。
    而 Firebase 国内用户交互存在屏障,需要翻墙。
    加之,引入 Baas 开发的复杂性,遂罢。

现在,还是想办法根据Github API,开发一套针对微博的评论,点赞程序。
匿名发表评论,点赞 它不香吗?
呃,我再想想。

<a>标签的ping属性

HTML 的<a>标签有一个ping属性,只要用户点击,就会向该属性指定的网址,发出一个 POST 请求。

<a href="https://baidu.com" ping="/log?foo=bar">
  click
</a>

上面代码中,用户点击跳转时,会向/log这个网址发一个 POST 请求。

ping属性无法指定数据体,似乎只能通过 URL 的查询字符串携带信息。

微博的同步功能

肝了一晚上,实现了微博的同步功能。

原理是利用 Github Action 的有关 issue 事件。

每当创建 issue 事件触发时,都会从 Weibo 仓库拉取最新的 issue , 然后通过各大平台的提供的 API,同步过去。

目前支持的同步平台如下:

  1. telegram channel
  2. Github Gist
  3. twitter (一直未批准我的应用申请 淦)

呐 , 欢迎捕获~

博·赫拉巴尔《过于喧嚣的孤独》

因为我有幸孤身独处,虽然我从来并不孤独。
我只是独自一人而已,独自生活在稠密的**之中。
因为我有点儿狂妄,是无限和永恒中的狂妄分子,而无限和永恒也许就喜欢我这样的人。

github action sync weibo

当前TODO:利用Github Action在发布微博(issue)之后,把微博的内容同步到电报频道与twitter中。

如果你还没有加入一个坏掉的番茄channel,可以点击这里.
另,我的推特:SimonAking,欢迎捕获❤

最后一天

假如,今天是你人生中的最后一天。
你会做些什么?你会去见哪些人吗?

CSDN真是有趣

CSDN 真是有趣。

从百度访问它,要求强制登录;
从 Google 访问它,无强制要求。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.