【置顶】囚生CYのPOST(NEW VERSION)

2020.11.26

xhp介绍了go语言,感觉跟java没啥区别啊。。。计算机为什么有这么多乱七八糟的语言,这让我们这些菜鸟怎么才能赶上时代的步伐???

PS:

雨,30圈,12km,58'49'',最后1km配速4'31'',相比前天跑完状态良好,且取得了1000米以上的提速冲刺能力,12个1000米分段配速如下,前面跑慢了导致最后冲刺也没快太多。其实最后如果不冲刺我很可能也不会选择跑更多了,有时候就是这样,宁可快点结束,也不愿意再跑更久了,关键是意志已经撑不了那么久了,虽然这次体能肯定是支持30圈后接着跑的。

可能雨天确实有状态加成吧,今天跑完状态良好,一两分钟就恢复了。


 


2020.11.25

如果设置了自增主键,则mybatis的xml映射文件中的插入sql语句执行完后,对应的javabean变量会自动填充自己的主键对应的成员变量值,而无需再插入时设置好主键插入,这还挺不错的,省事,搞了半天以为一定要用selectKey给插入函数返回个变量才行,真是上当了,有些blog真是误导人。

PS:

雨太大了,下得没完没了,回寝上下楼+两个过道跑了11个来回,20分钟多几十秒,差不多还行,主要下雨走廊地滑,楼内也不是很好跑,下楼基本上是再慢慢走,基本上相当于是间歇跑了个十圈。

非常意外,本以为今天腿会酸痛,结果上下楼跑了20分钟一点感觉也没有,难道破腿已经习惯了昨天那种量了吗。。

近一个月各里程最好成绩:

12公里58'50'',配速4'54''(累计跑了1次);

10公里48'20'',配速4'50''(累计跑了4次);

8公里38'03'',配速4'45''(8公里有一个月没破了,因为要么状态根本上不到20圈,要么上了20圈就能更多,不再愿意20圈停下来了);

6公里27'39'',配速4'36''(6公里可能很长时间破不了了,配速持平了4公里的最好成绩);

4公里18'25'',配速4'36''(4公里主要是用来练速耐);

接下来两个目标就是挑战15公里,以及坚持4'30''配速跑到10圈以上了。


2020.11.24

跑步一年来最疯狂的一天,自我感觉状态极佳,在雨夜强行启动人生第一次1小时场地跑,最终以58'50''的成绩完成30圈,结束时浑身冻僵,四肢麻木,好在神智清醒,还能找到了回家的路,赶紧冲了个热水澡,可别感冒了。

天气确实影响状态,在4个1000米的节点忘了计时,下面分别记录了1000米,3000米,4000米,7000米,8000米,9000米,10000米,12000米时的成绩,平均配速4'54''17,最后两圈配速4'50'',个人感觉在天时不利,穿的裤子也不太行的情况下能跑出这个成绩已经让我非常地满意了。

Fight,距离半马又近了一步。

 


2020.11.23

更大的雨,操场提前闭场,选择路跑10分钟2km,总之路跑和场地跑是两种运动,前者难度远远大于后者。

我发现实验室确实能提高不少效率,晚上不到三小时硬是复习了昨天一天密码学的量,又可以快乐搞java了~

早上最后一节课,终于再也不用同上一节课了,时间线在此交错,从此渐行渐远。

眼不见,心不烦,也挺好。


2020.11.22

风雨夜,15圈半小时整,状态和腿脚已经完全复原了,可惜顶着风雨实在太难。

B站看到一个上海大学的兄弟今年跑连云港的大铁(游泳3.8公里,自行车180公里,跑步42.195公里),总用时12小时2分钟,20~30岁年龄组第5,男子组35名,我被震惊了,这还是人类的体质么。

下决心毕业前有机会一定要跑一次马拉松,至少也得去跑一次半马,否则实在是太遗憾了。

分享关于angular的使用小结:

> AngularJS 通过 ng-directives 扩展了 HTML。
> ng-app 指令定义一个 AngularJS 应用程序。
> ng-model 指令把元素值(比如输入域的值)绑定到应用程序。
> ng-bind 指令把应用程序数据绑定到 HTML 视图。
> HTML5 允许扩展的(自制的)属性,以 data- 开头。
AngularJS 属性以 ng- 开头,但是您可以使用 data-ng- 来让网页对 HTML5 有效。

## 实例1: ng-app ng-model ng-bind
> 当网页加载完毕,AngularJS 自动开启。
> ng-app 指令告诉 AngularJS,<div> 元素是 AngularJS 应用程序 的"所有者"。
> ng-model 指令把输入域的值绑定到应用程序变量 name。
> ng-bind 指令把应用程序变量 name 绑定到某个段落的 innerHTML。
 

<div ng-app="">
  <p>名字 : <input type="text" ng-model="name"></p>
  <h1>Hello {{name}}</h1>
  <p ng-bind="name"></p>
</div>

2020.11.21

10圈19'25'',状态很好,但是腿吃不消了,而且雨天确实难跑。

分享一下之前的(有“场外观测者”,很无奈只能加一些内容)

1. 安装Vue并创建Vue项目

vue.js提供了一个官方命令行工具, 可用于快速搭建大型单页应用

  1. 全局安装: cnpm install --global vue-cli
  2. 创建应用: vue init webpack my-project
  • 输出结果以及选项:
# 这里需要进行一些配置,默认回车即可
This will install Vue 2.x version of the template.
For Vue 1.x use: vue init webpack#1.0 my-project

? Project name my-project
? Project description A Vue.js project
? Author runoob <test@runoob.com>
? Vue build standalone
? Use ESLint to lint your code? Yes
? Pick an ESLint preset Standard
? Setup unit tests with Karma + Mocha? Yes
? Setup e2e tests with Nightwatch? Yes

   vue-cli · Generated "my-project".

   To get started:
   
     cd my-project
     npm install
     npm run dev
   
   Documentation can be found at https://vuejs-templates.github.io/webpack
  1. 进入项目, 安装并运行
  • cd my-project
  • cnpm install
  • cnpm run dev
  • 输出结果:
 DONE  Compiled successfully in 4388ms
> Listening at http://localhost:8080

2. Vue项目目录结构

  1. build: 项目构建(webpack)相关代码的存储目录
  2. config: 配置目录, 包括端口号等, 初学使用默认值即可
  3. node_modules: npm加载的项目依赖模块
  4. src: 项目开发目录, 基本上要做的事情都在该目录中, 其中包含了几个目录及文件
  • assets: 放置一些图片, 如logo等
  • components: 目录里面放了一个组件文件, 可以不用
  • App.vue: 项目入口文件, 我们也可以直接将组件写这里, 而不是用components目录
  • main.js: 项目的核心文件
  1. static: 静态资源目录, 如图片, 字体等
  2. test: 初始测试目录, 可删除
  3. .xxxx文件: 这些是一些配置文件, 包括语法配置, git配置等
  4. index.html: 首页入口文件, 你可以添加一些meta信息或统计代码
  5. package.json: 项目配置文件
  6. README.md: 项目的说明文档

3. Vue起步

每个 Vue 应用都需要通过实例化 Vue 来实现。语法格式如下:

var vm = new Vue({
  // 选项
})

示例


<div id="vue_det">
    <h1>site : {{site}}</h1>
    <h1>url : {{url}}</h1>
    <h1>{{details()}}</h1>
</div>
<script type="text/javascript">
    var vm = new Vue({
        el: '#vue_det',
        data: {
            site: "菜鸟教程",
            url: "www.runoob.com",
            alexa: "10000"
        },
        methods: {
            details: function() {
                return  this.site + " - 学的不仅是技术,更是梦想!";
            }
        }
    })
</script>

可以看到在 Vue 构造器中有一个el 参数,它是 DOM 元素中的 id。在上面实例中 id 为 vue_det,在 div 元素中:
当一个 Vue 实例被创建时,它向 Vue 的响应式系统中加入了其 data 对象中能找到的所有的属性。当这些属性的值发生改变时,html 视图将也会产生相应的变化。

<body>
    <div id="vue_det">
        <h1>site : {{site}}</h1>
        <h1>url : {{url}}</h1>
        <h1>Alexa : {{alexa}}</h1>
    </div>
    <script type="text/javascript">
    // 我们的数据对象
    var data = { site: "菜鸟教程", url: "www.runoob.com", alexa: 10000}
    var vm = new Vue({
        el: '#vue_det',
        data: data
    })
    // 它们引用相同的对象!
    document.write(vm.site === data.site) // true
	document.write("<br>")
    // 设置属性也会影响到原始数据
    vm.site = "Runoob"
    document.write(data.site + "<br>") // Runoob

    // ……反之亦然
    data.alexa = 1234
    document.write(vm.alexa) // 1234
    </script>
</body>

除了数据属性,Vue 实例还提供了一些有用的实例属性与方法。它们都有前缀 $,以便与用户定义的属性区分开来。例如:


<div id="vue_det">
    <h1>site : {{site}}</h1>
    <h1>url : {{url}}</h1>
    <h1>Alexa : {{alexa}}</h1>
</div>
<script type="text/javascript">
// 我们的数据对象
var data = { site: "菜鸟教程", url: "www.runoob.com", alexa: 10000}
var vm = new Vue({
    el: '#vue_det',
    data: data
})
 
document.write(vm.$data === data) // true
document.write("<br>") 
document.write(vm.$el === document.getElementById('vue_det')) // true
</script>

2020.11.20

对不起,我今天就把flag回收了,10公里48'20'',再次刷新破6天前48'44''的记录,平均配速整整4'50'',巨大突破。分段配速如下(Lap1 是2000米计时,第一个1000米忘记按表计时了)👇

今天的问题是第一个1000米没有计时,导致5圈结束9'35''起步配速稍快,前段体能分配失当;

10圈后(Lap3)开始调整放缓速度,15圈结束(Lap5)明显感受到压力,导致15~17.5圈(Lap6)配速落到5'03'',顿时感觉问题很大,赶紧咬咬牙把速度加回来;

20圈结束(Lap7)左边心脏跳动声已经可以明显感觉了,相比于6天前的20圈分段快了23秒,但是状态差太多。本来是计划跑到1小时30圈以上,然而意识到自己的状态已不足以坚持到30圈了;

9000米不到时开始提速,最后一个1000米4'24'',稍慢于6天前的冲刺成绩,最终整体比6天前快了24秒,平均配速整整4'50''。跑完后5分钟状态完全恢复,感觉还行。

毕竟这周太萎靡了,一旦状态起来,势必是厚积薄发。

明天看情况,睡个午觉,如果状态好,我争取进行一次1小时跑,这已经成为我的执念了。。。


2020.11.19

做了很多准备,但是讲起来就很没调理,总归还行吧。关于RE2RNN的那篇paper的项目代码我写了很详尽的jupyter notebook来描述每个模块的功能,可惜CSDN不支持直接上传jupyter notebook变成blog的功能,我之后再想想办法吧,这篇paper的思路确实很清奇,确实是做了一个非常简单的任务,但是用了非常创新的方法,把冷饭炒香,是一门学问。

PS:

状态回归,但是组会结束的太晚,上场4'30''的配速跑了一通,顺带边打了个电话,5圈就已经压力很大了,最后9圈结束实在坚持不完第十圈,只能退场。

明天休整一天,周六准备再跑一次10公里,状态好试试能不能坚持到1小时跑,1小时的话应该是差不多12公里多一点的里程,31圈不到的样子,立个flag,后天来收。

这周权当养精蓄锐了,体能拉胯的很。


2020.11.18

拉胯到了极点,连续三天熬夜啃代码,就睡了一天午觉,今天4'50''的配速跑了10圈就没有意志再坚持下去了;刚好有点热,直接给跑脱水了,特难受。

自上周六10公里后这四天每天都只有10圈的量,15圈都不能坚持到,确实作息问题很大,以前熬夜感觉不到,现在一上操场就知道身体行不行了。

PS:

这两天主要在读[GitHub: RE2RNN](https://github.com/jeffchy/RE2RNN),就是那篇把正则转成RNN进行训练的paper,因为明晚可能要我来讲,慌得不行,什么事都搁置全来读代码了,代码阅读这块确实还很薄弱,还需要很长时间来提升。

分享一下我的pycharm的壁纸(无水印的版本可以直接百度搜索三笠阿克曼,筛选1920×1080的图片就有,原图链接掉了,百度的图片链接每天都更新,所以用链接就会失效,但是我下载后上传又会有水印,就很难两全),找了好久才看到一个中意的,三笠阿克曼,yyds


2020.11.17

没什么好办法,建了个防火墙入站规则屏蔽掉非校园网的ip连接22端口,用手机热点测了一下屏蔽是成功的。

其实我很好奇,不设防的主机可以暴力破解用户名密码,这种设防的sftp主机有什么特殊的手段么,ssh通信是标准协议总归暂时是计算安全的,理论上信息传输是安全的,但黑客应该也不止破译加密算法一条路可以走吧,应该会有其他方法才对。

PS:

连日作息不规律,状态非常差,下午四点补了一小时觉回了口血。晚上10圈速耐,18'40'',虽然比最好成绩差不少,但是全程匀速4'40''配速没有带冲刺,勉强还说得过去。要做软工项目还要读paper的项目代码作汇报,从这周开始一个多月每周都有期末考试,太难了。。。

组里博三的wm确实很厉害,连续两年靠科研拿国奖(每年院里只有3-4个博士能拿),给王英林的课题组争了不少光,是个值得去挑战的前辈。

彼可取而代之。


2020.11.16

晚上间歇2分钟两个5圈,第一个8'52'',第二个9'42'', 跑得很痛苦, 本来是计划测一次1000米, 结果没把握好速度只跑了4'14'',无奈硬着头皮加到5圈, 然后又补了个5圈, 吐了;

PS:

我担心的事情发生了,今天把旧电脑挂在宿舍里开了openssh service,开了个netstat的脚本监控远程连接情况,新电脑带出去连上旧电脑用了一天,感觉很好。回来查了netstat的脚本日志,惊恐万分,除了我自己的ip 旧电脑sftp的22端口被荷兰 澳大利亚 巴西 英格兰 乌克兰 西班牙的ip连接过 离谱的是有些ip居然有几十个端口同时跟我的22端口连接 现在我慌的一笔 明天抽空把昨天那个脚本里加上杀非法连接进程的逻辑 网络世界太危险 菜鸟还是太年轻了


2020.11.15

昨晚两个多小时加今天整个白天,终于边学边搞把旧电脑做成了服务器,现在可以用新电脑的putty连上调用旧电脑的cmd执行脚本,Filezilla也可以连上进行文件传输,费了点时间,但总归是很有用处的。

本来昨晚先在旧电脑弄FTP站点,发现还挺简单,把IIS服务开起来,新建个站点设一下用户名密码就完事了;但是只用FTP的话就只能把旧电脑当成云盘用了, 而且才知道FTP全是明文传输,连密码都不加密就传输的,太离谱了,于是今早开始搞sftp,其实也很简单,直接到github上把openssh的64位win的zip包下载下来,解压完就能用,而且sftp似乎不但支持文件传输,也支持进行shell执行;

搞完之后觉得很后怕,其实如果能知道他人笔记本的开机密码,然后把openssh.zip搞到他电脑上,弄段脚本完成
① 解压zip
② 启动sshd服务(net start sshd)
③ 再打开他电脑上的远程连接许可

直接就能用putty连上他的电脑操作了,想到这里赶紧用netstat -an看了看本机端口连接情况,其实在浏览网页的时候,会有很多远程443端口跟本机5位数的端口在建立连接(established),但是21和22这两个接口(ftp和sftp)一定不能出问题,否则就真的是被黑了,于是写了段脚本用来监测连接情况,如果真碰上有非法侵入可能也没什么办法,但是总归是先做个预防。

# -*- coding: UTF-8 -*-

import os
import time

INTERVAL = 60

states = ['"ESTABLISHED"', '"CLOSE_WAIT"']								 # 需要记录的states
cmd1 = 'netstat -ano | find {}'.format									 # 列出当前所有连接情况
cmd2 = 'taskkill /pid {}'.format										 # 杀死进程(by pid)
cmd3 = 'tasklist /fi "pid eq {}"'.format								 # 查询指定pid的task详细信息

logname = 'log/established.log'
logheader = '{}\t{}\t{}\t{}\t{}\t{}\n'.format('protocol', 'localhost', 'remotehost', 'state', 'pid', 'timestamp')

try:																	 # 判断log文件是否存在
	with open(logname, "r") as f:
		pass

except:																	 # 不存在则新建一个log文件
	with open(logname, "w") as f:
		f.write(logheader)


def is_valid(protocol, localhost, remotehost, state, pid):			 # 根据连接情况判断该连接是否合法
	""" NOT IMPLEMENTED
	目前不知道怎么写逻辑, 所以默认都是合理的, 需要通过观察规律才能发现非法侵入;
	目前感觉应该ESTABLISHED里的remotehost端口不是443的可能是比较少见的,
	另外localhost的21和22端口正常情况下应该是不会被占用的, 否则肯定是出问题了;
	"""
	
	return True															 # 返回值为True

while True:

	for state in states:
		reslist = os.popen(cmd1(state)).read().splitlines()
		timestamp = int(time.time())
		for res in reslist:												 # 遍历每个连接行记录
			splits = res.split()							
			if len(splits)==5:											 # 只考虑有五个元素的行记录
				protocol, localhost, remotehost, state, pid = splits
				if is_valid(*splits):									 # 判断是否合法: 目前默认都合法
					pass
				else:													 # 不合法就杀死进程
					print("杀死进程: {}".format(pid))
					print("  - 进程相关信息: \n")
					print("#"*64)
					print(os.popen(cmd1(pid)).read())
					print("#"*64)
					os.system(cmd2(pid))
				with open(logname, "a") as f:							 # 记录
					f.write('{}\t{}\t{}\t{}\t{}\t{}\n'.format(protocol, localhost, remotehost, state, pid, timestamp))
	
	time.sleep(INTERVAL)

新机比裸机多不了什么东西,因为把C:\Program Files\WindowsApps里的东西全删了,所有windows自带的APP全没了,包括计算器,闹钟,microsoft store,目前只装了:
① anaconda3
② firefox (1个浏览器, 拒绝装C盘的流氓chrome)
③ geany, pycharm 2020.1.1 pro, notepad++(轻重python IDE各1个, 再加1个通用IDE)
④ git
⑤ winrar
⑥ sumatra(pdf阅读器, 强推, 无广告, 极轻量级, 应该都不会在C盘生成文件, 界面也还行, 很简约)
⑦ potplayer(播放器, 也是一个无广告无垃圾的好东西, 功能很强大, 主要是用来顶替被删掉的windows原生的视频播放器),
⑧ photoviewer for win 10(极轻图片查看器, 安装目录里只有一个几十K的exe, 其他什么也没有, 顶替被删掉的windows原生查看器photo)
⑨ putty, filezilla 2个远程连接工具
⑩ DISM++(一个开源的系统备份软件, 无广告, 且非常轻量级, 软件作者称它“可能是最好的备份软件, 开源就是对实力的自信”..已经做了备份, 但还没有敢用它恢复过备份, 怕把系统搞坏了..)
再加个远程主机已经是绰绰有余,少装点东西也少点问题。


2020.11.14

状态好的离谱,第三次10公里跑,48'44'',比11月3日那天快了34秒,平均配速4'52''40。

20圈时都没有感觉到很累,途中就开始纠结到底是刷新25圈的记录,还是拼一把跑一次1小时跑——或者兼而有之,刷新25圈记录,再跑到1个小时。

后来想想还是先破了25圈记录再说,于是22圈半(9公里)后开始提速,提速后压力不是很大,可能并没有提的太快,本来觉得维持提速跑完25圈肯定还有余力继续跑,但是接近10公里时就莫名就有冲刺的冲动,第25圈后半圈不顾一切地全速冲刺,然而跑完都没有很强的崩溃感,至少比上次10公里要感觉好太多,一两分钟后就完全恢复了。最终第10个1000米4'22'',前9个1000米维持了4'50''~5'00''的速度,个人感觉是留有余力的,喝口水再上场跑五圈应该都不是问题。

唉,好状态并不常有,有时候跑个15圈都会崩掉。但是今天感觉只要状态在,现在10公里是不在话下,下周有机会再挑战1小时跑了。

这种慢匀速跑完全程,最后冲一下的感觉是最好的了,比4'20''配速跑两个五圈间歇舒服得太多。


2020.11.13

统计期中考,直到发卷前的最后一分钟我们还天真的以为会考去年的原题,结果试题出来大跌眼镜,即便名义上是闭卷考,但是100多人的随堂考其实可以翻书,讨论,还能查手机,李卫明也是老好人睁一只眼闭一只眼放任我们搞小动作了,但是我感觉连70分可能都考不到,经验贝叶斯完全不会,广义线性模型刚好没有完全做好记录,本来以为跟原题一个难度,结果完全被掀了个底朝天。

PS:

晚上考完跟xhp讨论掉遗留的问题,时间已经非常晚了,去操场边打电话边跑了五圈,其实状态非常好,在持续说话的情况下仅仅耗费了不到九分钟,虽然没有分时计时,但是最后一圈半是以相当快且稳定的速度冲刺下来。放掉一天也罢,权当调整到最佳状态,计划周末准备跑一次10公里。

今天密码学pre时感觉wyy真的太像了sxy了,或许真的是我主观幻视,极强的既视感,与去年十二月份那场pre一样;


2020.11.12

状态不佳,15圈28'21'',比昨天慢了半分多钟,状态真的很重要,主要前三公里是尽力在模仿昨天配速在跑,后程就跑崩了。

PS:

晚上组会见了一个15级的博士大师兄, 精通python, java, c++, 自己开了公司, 工程经验极其丰富, 自己开的公司跟阿里合作搞电商项目开发, 工业领域从事前后端开发以及一些机器学习实验项目, 精通前端js与后端spring, 今年双十一实现了三小时发出三亿条短信的并发任务, 离谱的是目前是兼职在读博士, 晚上后些时候还跟我们分享了近期的论文阅读情况, 是与事理图谱构建相关的内容, 因为他除了python还精通c与java, 所以也看了很多基于c与java编写编译的论文项目框架, 并做了很多网络架构复现与提升;

他主要是分享了git和linux的使用经验, 让我们受益匪浅, linux刚好暑期我有系统性地学习, 所以比其他学长要熟悉一些, 像很多博士阶段的学长学姐, 虽然每天也在远程跑代码, 但是连linux一些很基本的命令(touch, watch)都不清楚, git pull push commit都从来没有做过, c和java就已经是完全不再使用的东西, 我就很感慨, 这些东西在杉数实习中我就发现都是工业领域里普遍使用的管理手段, 确实在工业界做一阵子也不是什么坏事, 近期一直在做springboot确实也是对java加深了不少理解, 总之象牙塔里并不能学到所有东西, 甚至会很狭隘;

散会后激动之感久久难以冷却, 很难想象竟然有计算机技术点如此浩繁, 还能在科研领域广而涉猎的大佬, 我一直觉得自己很不误正业, 学了很多乱七八糟的东西, 却一直不能专精, 懊恼不已, 但看到大师兄, 就真的有那种广度上比不过, 深度上也难以匹及的同门, 五年, 抑或十年之间能否补上鸿沟? 非常难, 人与人有差距, 但并非无法超越;


2020.11.11

大突破!大幅度刷新10月30日的6公里最好成绩(15圈)28'15''的记录,在多日(或空腹)10圈加速跑的练习下,今天以非常完备的状态跑出15圈27'39''的成绩,平均配速4'36''50,基本持平了前天10圈18'25''的配速。

本来前几日都是在晚饭前完成跑步,空腹体力稍逊,今天重新回归到四教返程后的顺道跑:

1000米4'42''后感觉状态非常不错,因为并没有感觉很快,认为速度完全可以维持很长时间。

而后两个1000米速度不但没有衰减,反而维持了更快的配速;

4000米结束18'44'',稍逊于前日18'25''的成绩,此时双腿已经开始疲劳,计划想稍慢一些以维持到20圈,想要破掉之前20圈38'03''的记录;

5000米结束23'28'',大大领先于之前20圈记录的5000米速度(23'40''),但是转念一想近期一直是10圈的量,一下子翻倍到20圈可能不太科学;

于是12圈半后开始提速,决定破掉15圈的记录,非常意外,最后1000米用时仅4'10,要知道上次最后1000米冲刺4'16''是在有人在身后跟了我两圈才被迫做到的,结束已经快吐了,今天完全凭靠意志冲完最后1000米,还快了6秒,感觉非常地满意。

可以,还是有所提升的,离4'30''配速越来越近了。

PS:

今天把后端基本搞完,后面跟xhp对接一下之后就可以考虑加点有技术含量的东西进去了。虽然springboot以后不太会用到了,但是多会一个也不错,现在掌握了python的django和java的springboot两个后端技能,不亏,虽然费了不少时间。


2020.11.10

下午莫名其妙被通知去参加个见面会,肯定是之前眼瞎看错填了问卷,不过会上有不少吃的,因为好多人缺席,所以多出好几份,准备多带几盒水果拼盘回来给宿舍里几个分分。

散会顺道跑了十圈,19分整,没有尽全力,考虑到晚上还要出门就没有拼到力竭了,不过没吃晚饭空腹确实乏力,体能可能也确实掉了。

跑完想吃水果发现拼盘一个没带,连自己那份都忘记拿了,当时就感觉错过了一个亿,好亏。。。

PS:

近期发现CSDN好像可以识别出刷访问量的行为,并且不会将刷的访问量转换为积分,我不知道具体是怎么做到的,因此我已经白白刷了将近一千访问量,但是积分始终卡死在7900之前没有增加,尝试把脚本挂到服务器上也不管用,但是我不刷的这几天,每当某篇文章过了整百的访问量,确实会积分+1,这确实有点意思,暂时没有搞清楚原理是什么,尝试在cookie和代理IP上做文章,都没有效果,白白浪费了可能的积分值。总之现在用脚本刷访问量等于是在浪费积分(因为10000访问以下每100访问+1分,现在刷不加分等于是浪费,只能等访问量自然增长),离9000积分LV7的距离越来越远了唉。


2020.11.09

最近两次贴脸碰到 lth 跟他打招呼,完全被无视了,MD很气。不知道是真的没注意到还是就是故意不理,好歹高中三年同桌,升直博就翻脸不认人了[Facepalm]。

总之 lth 从金融转到叉院算是个很厉害的对手,两三年后同级这帮人里是龙是虫可能就会见分晓,他code不见得很强势,不过我们这行也不需要很强的code能力;而单论数学水平,凭我对他的了解就算是 gyf 恐怕也难以匹及,必然是顶尖水平了,当然在我之上。高中时他也是少数几个的数竞种子选手之一,不过跟我一样运气都太差,也许这就是我俩在这小破财里一样要待九年的原因罢[苦笑]。

干呗,爷也升硕博了,五年后鹿死谁手还不知道呢。以前你在金院比不过我就认了,眼下同在信院再比不过我就承认确实这几年是吃干饭了。

PS:

状态非常好,本还是以10公里为目标去跑,但是起手跑快,加上时间有点晚,临时改意决定留个10圈的个人记录,最终18'25''完成4公里,平均配速4'36''25,差强人意。

自我感觉是保持匀速在跑,因为体力非常充沛,没有产生跑崩的感觉,但是回看每公里的差距还挺大的。最后1000米提速后就到极限了,跑完腹痛腿软,还有待提高。


2020.11.08

下午取快递顺道去场上跑了一会儿,主要阳光明媚天气凉爽,感觉特别适合户外运动。结果一路顶风巨难跑,第一个1000米还没控好跑了4'40''直接给我愉快送走,最终11圈跑了21'02'',实在累得不行畏难而退,太阳虽然不热,但是温水煮青蛙晒久了还是厉害。最近没能自律地每天坚持到15圈以上,体力大约是衰退了,本来下午是冲着10公里去跑的,状态还是没有恢复过来。

PS:

太冷了实在是,感觉已经没有动力再在晚上短裤短袖出去跑步了,开学立的flag要破灭吗。。。


2020.11.07

事太多,晚上从四教走晚了(发现没有什么地方比四教更适合我这种人了,实验室还是觉得很麻烦),回宁远楼已经将近十点,没来得及去场上跑;权且背着笔记本,边打电话,边慢跑了十分钟,腿可能还是有些问题,唉,天冷就不想动了,人的本质还是懒。回寝补了三分钟平板,发现平板的耐力倒是隔了几个月没做都没怎么掉下来。

最近感觉gyf莫名有些频繁地cue我,本科阶段基本都没怎么交流过的。实话说虽然我们性格不是很合,但是毕竟gyf实力放在那里,确实也不失为一个可以交流观点的buddy,人各有活法,有时还是需要接受别人的所作所为的,即便自己不是特别喜欢。


2020.11.06

我照着https://caoyang.blog.csdn.net/article/details/109139934这篇文章讲了一个小时,吕晨居然听得津津有味,我自己讲得尴尬癌都要犯了,但是这篇文章吕晨评价很高,认为是有breakthrough的报告,值得follow,讲到45分钟我表示超时太长了,后面就一笔带过了,吕晨说不,准备了就接着讲,我TM????

PS:

状态不对,奔着15圈以上去跑,结果5圈跑崩,用时9分十多秒,还不如前两天。虽然没有感觉腿特别疼,但是感觉身体和脚步特别沉重,体力也跟不上了,非常怪了。

可能是太困了么,还是身体出问题?早睡养一天,明天再去试试,有些失望。


2020.11.05

王英林真会挑时间,组会4点一刻开到七点半.. 不过白嫖了一顿晚饭,还行[Facepalm]

散会出来与昨天一样跑了两个五圈,第一个五圈维持了昨天的成绩,8'51'',休息两分钟第二个五圈没有计时,但是跑得很痛苦,速度参差不齐,加了又减,减了又加。

其实这两天看了一些跑步的技巧,刻意地想要练习和模仿前脚掌跑和内旋步伐,身体前倾加大步幅,摆臂提高增加步频,以及跨步,发现刻意去做这些动作整个节奏就乱了,速度是上去了,但是根本维持不住,第一个五圈其实四圈时就想打退堂鼓了,但是又不想比昨天差,硬是挺下来,实话说宁可跑20圈,也不愿意这样跑两个五圈要了老命。


2020.11.04

十公里的后一天照例是短程加速跑,虽然今天腿没有怎么疼,但是连续跑两天长距离还是太伤了。

跑了两个间歇的2000米(5圈×2):

本来计划是提速跑个10圈4公里,结果第一个1000米4'34''还在控制范围里,第2个1000米放飞自我跑了4'16''就崩了;

休息2分钟又跑了个2000米,第一个1000米5'00'',第二个1000米4'30''提速,也算是咬牙坚持下来的,感觉挺困难;

天冷了,接下来跑步是越来越难了。

PS:

xhp大佬[膜拜],我昨天回校一直纠结明天软工汇报该怎么办,自己后端基本啥也没做,就把服务器倒腾了一下,装了sql,jdk和docker,只能看xhp前端能做到什么程度了,我很厌恶这种把命运交给别人处置的境况,但是我还是没法静下心完善后端,看了一天那篇正则表达式转RNN的论文。

结果xhp直接给我发了个url,告诉我前端原型已经上线了,我看了一下基本上每个页面都做好了,都已经部署上线了,我的天!这才一个周末,就这么秀的吗?我估摸着自己来做肯定得花很长时间,毕竟前端空有纸上谈兵没有经验,肯定会四处碰壁,xhp直接给我把原型做好连部署都搞完了,活了20多年少有的一次抱到大腿,我确实在这块不如xhp,很难想象我们学院非计科出来的能有这种前端经验,虽然长我两岁,我却是打心底的佩服,很想多学点东西,但还是放不下手机和游戏,集中注意力很难,自律更难。


2020.11.03

十天之后,重回25圈10公里,49分18秒,刷新10月23日49分40秒的记录,平均配速4'55''80

主要今天右腿完全恢复了,而且这两天吃得不错,状态极佳,虽然刷新了22秒,但是跑完时已经完全脱力,神志恍惚,走不动路了,与十天前那次相比,跑完的状态差了太多,10月23日那天跑完跟体测1000米完的感觉没有太大区别,事实上仍有余力,感觉是可以做到1小时跑,今天无论如何是再也跑不了一小时的。

事实上今天天时不利,很强劲的北风,导致有一半的路程是逆风跑,非常累,如果是无风环境也许不会这么快体力耗尽,而且似乎消化地不是很好,四五圈时小腹就开始疼了,好在影响不大。

虽然最后1000米跑到了4'30'',但是事实上已经完全没有力气冲刺了,终点处停下时是前所未有的力竭感,明天大概腿又要废了。

 

PS:

第一次遇到这种hao123绑架浏览器主页的病毒,可能是昨天用了kms的缘故染上病毒了,以为可以很容易解除掉,结果发现网上五花八门的办法一个都没有用,这种病毒是厉害,好像现在改快捷方式目标url和配置文件里的browser.startpage都是很low的方法了,反正我是没查出有问题,但是有意思的是重命名浏览器exe(比如firefox.exe改成firefox1.exe)就可以解除绑架,可能是病毒更改了注册表,但是我遍历了所有注册表项也没有看到和hao123相关的值,最后一气之下把刚装好的电脑重置,又装了一遍,这东西不能忍,反正我是不可能再执行或安装任何非官方的exe程序了,病毒确实无孔不入。

补充:关于ubuntu非root用户使用docker遇到错误

Got permission denied while trying to connect to the Docker daemon socket

 https://blog.csdn.net/liangllhahaha/article/details/92077065

以上链接给出解答,输入以下命令👇

sudo groupadd docker
sudo gpasswd -a $XXX docker
sudo gpasswd -a $USER docker
newgrp docker

 并使用docker version验证是否仍然报错,不报错即可


2020.11.02

出校办事,试了一次路跑,到那边空腹出来跑了个环线,速度控不好,五分多钟就跑崩了,坚持了一圈差不多十分钟,感觉这几天腿没恢复好,体能也掉了不少,跑步还是任重道远的,自勉。

PS:

新笔记本到手,联想Legion,我发现现在好多人都是用的dell,宿舍里其他三人都是dell的,学校里机房也全是清一色的dell,联想近年来口碑不太行,但是一直都用的联想,习惯了也懒得换别的了。

然而首次使用键盘无法输入,键盘灯都调不出来,查了驱动是好的,感觉是键盘没通电。

但是重启还是不能用键盘,所以摁F2 F8也进不了bios看具体情况,查了半天好想都没有人遇到过这种问题,后来我想兴许更新一下系统就好了,上次显卡驱动坏掉也是更新完WIN10就好,结果确实是个好办法,更新完重启键盘就能用了,我还再想新电脑刚到手键盘就坏了也太晦气了。

PS1:

之前卸了chrome就是因为它没得选只能装C盘,今天发现firefox也学坏了,没有自定义安装只能装C盘;后来经过高人指点,官网拉到最下面有个浏览器-->桌面版-->高级安装选项和其他平台-->Windows 64-bit就可以重新下到自定义安装的包了。现在人都学坏了,好东西藏这么深,就非要装我的C盘?


2020.11.01

课题组里要扒顶会期刊作者的邮箱,中午饭后马不停蹄地开始赶,直到六点终于调好爬虫,小秀了一波课题组里的学长们。

害,其实大家都是大老爷们,有啥好秀的,十个人的组就一个女生,就是毕设带我的学姐,都博二了。。

这个爬虫相对来说技术含量并不高的,因为外网不太稳定,调了很长时间。但是也积累了不少问题经验。

爬虫这个东西怎么说呢,你说它没用吧,有时候还确实有点用(我们每个人被分了300篇论文,外网连得慢,估摸着不停息差不多得要四五个小时,现在我花四五个小时写好爬虫,其他人就不用费事了);你说它有用吧,也确实不大拿得上台面。

PS:

感觉身体状态可以,下午爬虫写得有点精神亢奋,实话说快一个月不写python代码了(天天springboot能顶?),有一种禁欲感,准备今晚去操场上搏一搏。

很可惜,下雨了,跑了五圈就回了,好像腿还是没有好。

# -*- coding: UTF-8 -*-
# @author: caoyang
# @email: caoyang@163.sufe.edu.cn

import time
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support.ui import Select

class XueBaLib(object):

	def __init__(self,
		username="你的用户名",
		password="你的密码",
		keywords=["ISAI 2019"],
		mode="quick",
	):
		self.username = username
		self.password = password
		self.keywords = keywords[:]
		
		self.mode = mode.strip().lower()
		assert self.mode in ["quick","expert"]

		self.host = "http://202.199.103.219"

	def find_author_email_pairs(self,soup):								 # 获取detail页面上所有的作者和邮箱(只取有email的作者)
		emaillinks = soup.find_all("a",class_="emaillink")
		author_email_pairs = []
		for emaillink in emaillinks:
			email = emaillink.attrs["href"]
			authorlink = emaillink.find_previous_sibling("a",class_="authorSearchLink")
			author = str(authorlink.string)
			author_email_pairs.append((author,email))
		return author_email_pairs


	def find_author_with_email(self,soup):								 # 获取detail页面上所有的作者和邮箱(不管有没有email)
		ul = soup.find("ul",class_="abs_authors")
		if ul is None: return []										 # 没有author就不管了
		author_email_pairs = []
		for li in ul.find_all("li"):
			authorlink = li.find("a",class_="authorSearchLink")
			emaillink = li.find("a",class_="emaillink")
			author = str(authorlink.string)
			if emaillink is not None: email = emaillink.attrs["href"]
			else: email = None
			author_email_pairs.append((author,email))
		return author_email_pairs


	def find_detail_links(self,soup):									 # 获取搜索结果页面上所有detail的链接
		detaillinks = soup.find_all("a",class_="detaillink")
		detailurls = []
		counter = 0
		for detaillink in detaillinks:
			counter += 1
			detailurl = detaillink.attrs["href"]
			detailurls.append(detailurl)
		return detailurls

	
	def run(self):
		print("启动浏览器...")
		driver = webdriver.Firefox()
		driver.set_page_load_timeout(15)								 # 设置最长加载时间, 否则会卡死在detail页面
		print("  - 完成")

		# 登录
		print("访问首页...")
		driver.get("http://www.xuebalib.com")
		print("  - 完成")
		
		print("正在等待首页出现登录输入框...")
		WebDriverWait(driver,30).until(lambda driver: driver.find_element_by_xpath("//input[@name='username']").is_displayed())
		print("  - 等到了")
		
		driver.find_element_by_xpath("//input[@name='username']").send_keys(self.username)
		driver.find_element_by_xpath("//input[@name='password']").send_keys(self.password)
		driver.find_element_by_xpath("//input[@value='登陆']").click()

		time.sleep(3)

		# 取得访问沈阳工业大学访问权限
		driver.get("http://www.xuebalib.com/db.php/EI")
		WebDriverWait(driver,30).until(lambda driver: driver.find_element_by_xpath("//a[contains(text(),'沈阳工业大学')]").is_displayed())
		driver.find_element_by_xpath("//a[contains(text(),'沈阳工业大学')]").click()

		# 切换窗口
		windows = driver.window_handles
		print("目前有",len(windows),"个窗口")
		driver.switch_to.window(windows[1])								 # 切换到第2个窗口

		print("正在等待数据库加载(这个会很慢, 容易失败)...")
		WebDriverWait(driver,60).until(lambda driver: driver.find_element_by_xpath("//input[@class='search-word']").is_displayed())
		print("  - 等到了")

		# 转为专家搜索
		if self.mode=="expert":
			driver.find_element_by_xpath("//span[@class='button-link-text' and contains(text(),'Search')]").click()
			time.sleep(1)
			driver.find_element_by_xpath("//span[@class='button-link-text' and contains(text(),'Expert')]").click()

		count = 0														 # 计数

		with open("log.txt","w",encoding="UTF-8") as f: pass			 # 新建记录文件夹
		
		for keyword in self.keywords:
			if self.mode=="quick":
				driver.find_element_by_xpath("//a[@id='reset-form-link-quick']").click()# 重置搜索栏(quick)
			else:
				driver.find_element_by_xpath("//a[@id='reset-form-link-expert']").click()# 重置搜索栏(Expert)

			time.sleep(2)

			if self.mode=="quick":
				driver.find_element_by_xpath("//input[@class='search-word']").send_keys(keyword) # 输入关键词(quick)
			else:
				driver.find_element_by_xpath("//textarea[@class='search-word text-area-lg']").send_keys(keyword) # 输入关键词(Expert)

			time.sleep(2)

			if self.mode=="quick":
				driver.find_element_by_xpath("//a[@id='searchBtn']").click() # 点击搜索(quick)
			else:
				driver.find_element_by_xpath("//a[@id='expertSearchBtn']").click()	 # 点击搜索(Expert)

			print("正在等待检索结果...")
			WebDriverWait(driver,30).until(lambda driver: driver.find_element_by_xpath("//a[@class='detaillink']").is_displayed())
			print("  - 等到了")


			html = driver.page_source
			soup = BeautifulSoup(html,"lxml")
			h2 = soup.find("h2",id="results-count")
			for child in h2.children:
				total_num = int(str(child).strip())
				break
			print("一共{}个查询结果".format(total_num))
			currentPageUrl = driver.current_url									 # 记录当前url, 便于回到当前页面

			# 调整下拉框每页显示数量100, 可以少翻几页(用不了select很怪)
			'''
			driver.find_element_by_xpath("//span[@class='select2-selection__arrow']").click()
			time.sleep(2)
			select_el = Select(driver.find_element_by_xpath("//select[@id='results-per-page-select']"))
			select_el.select_by_visible_text("100")
			'''

			time.sleep(3)
			currentIndex = 1
			pageNum = 0													 # 记录页码
			while True:
				pageNum += 1											 # 遍历每一页搜索结果
				print("=====第{}页=====".format(pageNum))
				html = driver.page_source
				soup = BeautifulSoup(html,"lxml")
				detail_links = self.find_detail_links(soup)
				
				for detail_link in detail_links:
					count += 1
					print("正在处理第{}条link".format(count))

					try: driver.get(self.host + detail_link)			 # 可能会失败: 原因是driver.set_page_load_timeout(10)
					except:
						print("未能加载完全")
						pass										 # 不过无所谓反正要的信息都加载出来了

					html = driver.page_source
					soup = BeautifulSoup(html,"lxml")

					#author_email_pairs = self.find_author_email_pairs(soup)
					author_email_pairs = self.find_author_with_email(soup)

					print("正在写入文件...")	
					for author,email in author_email_pairs:
						with open("log.txt","a",encoding="UTF-8") as f:
							f.write("{}\t{}\n".format(author,email))

				# 回到搜索结果页面并点击下一页
				'''
				driver.get(currentPageUrl)
				try:													 # 到最后一页时就会发现没有下一页按钮了
					WebDriverWait(driver,30).until(lambda driver: driver.find_element_by_xpath("//a[@id='next-page-top']").is_displayed())
				except:													 # 推出循环即可
					break
				
				driver.find_element_by_xpath("//a[@id='next-page-top']").click()
				WebDriverWait(driver,30).until(lambda driver: driver.find_element_by_xpath("//a[@class='detaillink']").is_displayed())
				currentPageUrl = driver.current_url						 # 记录当前url
				'''
				## 想了个好办法, 直接转下一页:
				currentIndex += 25										 # 每页25个, 要是换了自己改
				if currentIndex>total_num: break						 # 
				index1 = currentPageUrl.find("COUNT=")
				index2 = currentPageUrl.find("&",index1)
				new_url = currentPageUrl[:index1+6] + str(currentIndex) + currentPageUrl[index2:]

				try: driver.get(new_url)
				except: pass
				print("正在等待检索结果...")
				WebDriverWait(driver,30).until(lambda driver: driver.find_element_by_xpath("//a[@class='detaillink']").is_displayed())
				print("  - 等到了")				
				
				
if __name__ == "__main__":
	'''
	xbl = XueBaLib(
		username="你的用户名",
		password="你的密码",
		keywords=["((((ISAI 2019) WN ALL)) AND (({ca} WN DT) AND ({oa} WN ACT)))"],
		mode="expert",											 # 推荐expert模式, quick是简单模式
	)'''
	xbl = XueBaLib(
		username="你的用户名",
		password="你的密码",
		keywords=["(((AIIPCC 2019)) AND ({ca} WN DT))"],
		mode="expert",													 # 推荐expert模式, expert模式可以囊括quick模式的查询格式, 即可以只搜索会议, 也可以直接搜索
	)

	xbl.run()

2020.10.31

听了个线上lecture,主讲人今年在NLP顶会发了两篇文章,一篇是基于句法树权重学习的句法解析,另一篇就很有意思了,是把正则表达式转换成神经网络的创新想法,正则表达式是目前工业界常用的轻量级的文本分类工具,好处就是可以直接冷启动,无需任何训练数据,但是问题在于正则的精确度很高,但召回率是很差的,所以他们想了个办法把正则relax成可训练的神经网络,这样就可以训练正则了,神奇之处在于训练结果可以重新转换回正则,这意味着网络是可解释的。

paper链接:

http://faculty.sist.shanghaitech.edu.cn/faculty/tukw/emnlp20reg.pdf

下面是笔者对lecture的记录与注解👇

PS:今晚很随意地跑了一会儿,边电话边跑的,腿果然给昨天跑废了,下午去操场试了一下发现起步都很难,想着减轻点腿的压力,打电话可以增加点心肺压力,权衡着划一天水呗,瓶颈都是右腿的问题,这几天体力其实都相当好,冲刺前呼吸都很平稳。但愿到明晚能完全恢复,很想重回到10公里的状态。


# 人工智能与自然语言处理

1. 强人工智能三个核心问题: 
  - 知识表示: fact, belief, concept, skill
  - 推理能力: 从已知的知识推出未知的知识(因果关系)
  - 学习能力: 如何积累知识

2. 解决三个核心的三个流派: 

  - 符号主义: 
    + 使用数学符号来表示事实:
      * 如$\forall x,y Human(x) \cap Place(y) \cap At(x)$
	  * 关系型数据库
	  * 语义Web
	  * 知识图谱
	+ 优势:
	  * 表示能力非常强
	  * 可解释性
	  * 理论基础
	  * 相对其他两种方法而言, 无需数据训练
	+ 劣势:
	  * 知识从何而来: 需要专家来编写规则(由此衍生出机器学习)
	  * 逻辑过于死板: 非黑即白是不鲁棒的, 如鸟可以飞这个事实未必一定是正确的
	  * 建模感知与动作是不太方便的
	+ 历史发展: 
	  * 1980s之前处于统治地位, 而后衰落
	  * 2000s后与统计方法结合
	  * 近年与神经方法结合

  - 连接主义:
    + 使用网络表示知识, 网络中每个节点是一个基本单元, 代表方法是神经网络
	+ 优势:
	  * 模型评估效果好
	  * 网络连接结构灵活
	  * 不需要过多依赖人类知识
	    - 计算机视觉中一般都需要人类进行特征工程, 人工定义一些特征, 神经网络可以自己学习特征
    + 劣势:
	  * 需要大量数据作为基础
	  * 解释性差且难以诊断问题在哪里
	  * 难以将人类知识融入到神经网络中
	+ 历史发展:
	  * 1940s就已经出现神经网络雏形
	  * 1958出现感知机: 一层神经网络
	  * 1969感知机无法处理异或问题
	  * 1970s神经网络的寒冬
	  * 1980s反馈神经网络BP出现
	  * 1990s-2000s被其他方法盖过(如统计方法)
	  * 2010s深度学习兴起
	    - 2012统治计算机视觉CV: 在一场竞赛中远远领先于第二名
		- 2015统治自然语言处理
	  
  - 统计方法:
    + 使用概率模型
	+ 通过概率进行推理与学习
	+ 对不确定性进行建模
	+ 优势:
	  * 理论基础完善
	  * 可解释性很强
	  * 可以从数据中学习出来的(区别于符号主义)
	+ 劣势:
	  * 表达能力不如符号主义方法 
	  * 不如神经网络灵活
    + 历史发展:
	  * 1990s兴起
	  * 2000s占据统治地位
	  * 近年来被深度学习方法盖过

3. 深度学习逐渐进入平台期, 目前的趋势是神经网络与其他两种方法进行结合:
  - 统计方法与符号主义: SRL, Stat NLP
  - 神经网络与统计方法: Neural Probabilistic Models, VAE
  - 神经网络与符号主义: Word Embedding, KG Embedding
  - 符号主义: Logics, Formal Grammars
  - 统计方法: N-grams
 
4. Dependency parsing: 依赖解析
  - 句子的树/图状解析结构: parse tree
  - Dependency Grammar
    + 动词的左边可以生成一个名词
	+ 缺点: 自然语言存在歧义
	  * Astronomers saw stars with ears (with ears 是修饰saw还是stars?)
	  * 两种不同的意义会生成不同的tree, 即with ear连在saw上还是stars上
	+ 一阶规则, 二阶规则, 定义edge的权重
  - CRF: 条件随机场
  - Parsing as MAP Inference on CRF:
    + Exact : Dynamic Programming
	+ Not Exact: Approx Inference
  - 规则从何而来: 请学生来标注句法树(parse tree), 进行监督学习
  
5. 主讲人的研究
  - 使用神经网络来预测词与词的一阶关系权重(两个词)
  - 使用神经网络来预测词与词的二阶关系权重(三个词)
  - 使用词向量(可以看出相似性)
  - 使用BiLSTM, 将上下文信息囊括进来(比如可以区分一词多义, 可以判断出是疑问句还是陈述句)
  - 将计算一阶规则评分与二阶规则评分的神经网络串接在句法解析神经网络上, 后者是一个RNN
  
6. 总结: 
  - Symbolism
    + denpendency grammar rules
  - Statistcal approaches
  - Connectionism
  - The combined strength leads to the state-of-the-art performance

7. 正则表达式: 工业界中用于文本分类
  - $*(how(far|long)|distance)$ --> 打上标签[distance]
  - 可以使用正则表达式对模型进行微调
  - 不需要训练
  - 可以用于冷启动
  - 但是规则需要专家来写
  - 规则往往是高Precise但低Recall
  - 难以利用数据来改进正则表达式
  
8. 相关工作: 将正则表达式转换成神经网络
  - 这样就既可以进行冷启动
  - 关键这样就是用数据来可训练的
  - 训练结果可以变回正则表达式
  - 方法:
    + RE转换成FA
	+ FA转换成RNN
	+ 创造出FA-RNN
	  * 可以添加门控
	  * 可以做成双向的
	+ 将RE的硬逻辑relax成软逻辑就可以用深度学习建模了
	  * 我个人理解可能是可以用正则取得一个较好的优化初始点
  - 实验结果:
    + 使用不同比例的数据进行实验, 无数据的情况下普通神经网路没有学习能力, 数据从1%到100%采样后明显优于正则的效果

2020.10.30

右腿“负伤”后的第四天,大幅度刷新15圈的记录,今晚跑到了28'15'',平均配速4'42''

最近四天维持了每天15圈的量,基本上10圈之后会明显感受到右腿的抽痛,很难坚持到20圈,总时间从29'03''到28'45''到28'42''到今天的28'15'',每天都有所提升,还算差强人意。

目前10公里最好成绩49'40''(20201023 配速4'58''),8公里最好成绩38'03''(20201025 配速4'45''),6公里最好成绩28'15''(20201030 配速4'42'')

其实今晚能快这么多全靠最后一公里,1000米4'47'',2000米9'30''(分段4'43''),3000米14'19''(分段4'49''),4000米19'06''(分段4‘47’‘),5公里23'59''(分段4'53''),离谱的是6公里28'15''(分段4'16''!!)

为什么最后一公里会突然快这么多?

因为之前我都是到最后一圈才开始提速,今天大胆尝试了一下从最后一公里(即12圈半)开始提速。

加速半圈感觉有点压力,但是突然发现身后跟了个人影,从影子来看跑的姿势还挺浮夸,实话说十月以来这么多天我几乎每天都在长跑,还从来没看到过有人能在这场上套我一圈(即连续从身后超我两次的;毕竟超一次的还是有很多的,总有人跑短程的嘛)。于是我为了不让他超过我,硬是维持了速度;

14圈结束右大腿内侧那块疼痛的肌肉抽筋,还好一会儿恢复了(不然得疼死在场上),这货居然还跟着我,于是最后一圈继续加速;

然而14圈半(剩余200米)时他还跟着,关键跑步姿势还是那么浮夸(从影子看就步伐很漂,我也没好意思回头看他),感觉被羞辱到了,于是硬着头皮开始冲刺;

100米全速冲刺,终于把他给甩了,然后就意外地发现最后一公里只用了4'16'',这个冲刺速度是之前从来没有达到过的,基本快要赶上本科体测时的1000米成绩了。

1000米我还从来没跑进过4'00'',有机会一定要试一试,也许现在有能力跑进4'00’‘了。


2020.10.29

28'45'',15圈6公里,组会下早了,决定还是去跑一趟。右腿仍未恢复,从开始就隐隐作痛,但是今晚最后一圈冲得特别稳,没有细看大概是1'35''的样子,这破腿怕是恢复不了了。

今晚 jl 讲得东西很感兴趣,准备朝着这个方向搞一手,最近在看双曲空间词嵌入那篇的代码,发现网上就没有人能把双曲空间讲明白的,很是头疼,大概下下周要轮到我来讲了,那周统计好像还要考试,真是头大如牛。

PS:

很荣幸被 @向彪-fisco bcos 看了几篇blog,共勉。


2020.10.28

28'42'',15圈6公里,13圈半时又出现了和昨天一样的右腿抽痛,坚持到15圈有点害怕会加重,最后冲刺了半圈退场,比昨天快20秒,比两周前快大约1分钟。

明天晚上组会可以权且休息一天,尽快恢复,要回到25号那天的水平可能需要一段时间了。

PS:

感觉pytorch比tensorflow好用点


2020.10.27

连日拉跨,29‘03’‘ 15圈6公里。

昨天4'37''的配速撑了8圈勉强说得过去,但是今天8圈用了近15'20'',然而感觉右腿内侧疼到动作变形,然而这么慢又不甘心停下来;

12圈半5公里时耗时24'08''。而前天只用了23'40'',最终仍坚持到了20圈,所以还是不甘心停下来;

15圈开始时感觉右腿带着右肩,乃至整个右侧身都在疼,想加速又提不上来,硬撑着速度跑完15圈遗憾离场,最后的冲刺都做不到,感觉整个人都废了;

最终平均配速4'50'',不如前日4'45''的速度,量还少了5圈,实在是令人太失望了。

以前跑完都没有按摩几分钟放松腿的习惯,前天的强度太高,加上昨天又没控制好速度提前力竭,导致腿完全没有恢复得过来。

我总是在想不能比昨天跑得差,要么路程更远,要么速度更快,到头来却适得其反。接下来一定要等恢复好了再追求突破,这几天尽量先保持一个10~15圈的量稳住状态了。

虽说自我设限是浅尝辄止的懦弱,但是也别期望太多,自己几斤几两还是要颠得清的,慢慢来吧,毕竟不是谁都天赋异禀。

PS:

晒了半天太阳键位还是没复原,于是突发奇想从外面晒不透就从内部突破,把毕业设计的模型训练代码运行了一个晚上,电脑一下子就燥热起来了,早上起来发现除了y键确实是坏了,其他键都正常了。

我愿称之为深度学习治疗法,人工智能还是有点用的嘛。

至于怎么处理y键,应该庆幸不是c v s a这些经常要用的快捷键,否则以后复制粘贴全选保存都用不了了,我想可能需要改注册表把y移动到其他键上去,见https://blog.csdn.net/guang_s/article/details/84969104

具体方法:打开注册表编辑器,找到路径:

计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout

右键新建二进制值,文件命名为Scancode Map,输入下面的串👇,这里相当于把y映射到了主键盘上的1键,因为我发现换到其他位置按起来都不舒服,有小键盘的情况下主键盘上的数字区一般只在输入法选候选词时使用,但1几乎没有用,输入法可能会用到2~9,如果候选词在第一个的话直接空格就行了,而且1的位置比较方便按到,最好不过了

所有键码如下:

四、按键扫描码

    说明:以十六进制表示,分两部份,0X后面两个数是扫描码,最后两个数是 ASCII 码(可忽略)。如:
    0x011b ESC 扫描码是01。

扫描码 键

0X011B ESC
0X3B00 F1
0X3C00 F2
0X3D00 F3
0X3E00 F4
0X3F00 F5
0X4000 F6
0X4100 F7
0X4200 F8
0X4300 F9
0X4400 F10

主键盘区:

0X2960 ~
0X0231 1
0X0332 2
0X0433 3
0X0534 4
0X0635 5
0X0736 6
0X0837 7
0X0938 8
0X0A39 9
0X0B30 0
0X0C2D -
0X0D3D =
0X2B5C "
0X0E08 退格键
0X0F09 TAB
0X1071 Q
0X1177 W
0X1265 E
0X1372 R
0X1474 T
0X1579 Y
0X1675 U
0X1769 I
0X186F O
0X1970 P
0X1A5B [
0X1B5D ]
0X1E61 A
0X1F73 S
0X2064 D
0X2166 F
0X2267 G
0X2368 H
0X246A J
0X256B K
0X266C L
0X273B ;
0X2827 ’
0X1C0D 回车
0X2C7A Z
0X2D78 X
0X2E63 C
0X2F76 V
0X3062 B
0X316E N
0X326D M
0X332C ,
0X342E .
0X352F /
0X3920 空格键

右边数字键盘:

0X5200 INSERT
0X4700 HOME
0X4900 PAGE UP
0X5300 DELETE
0X4F00 END
0X5100 PAGEDOWN
0X4800 上箭头
0X4B00 左箭头
0X5000 下箭头
0X4D00 右箭头
0X352F /
0X372A *
0X4A2D - (注意,这是数字键盘的)
0X4737 7
0X4838 8
0X4939 9
0X4B34 4
0X4C35 5
0X4D36 6
0X4E2B +
0X4F31 1
0X5032 2
0X5133 3
0X5230 0
0X532E DEL

左 Crtl 扫描码是 1D ,表示 1D 00
右 Ctrl 键扫描码是 E01D,表示 1D E0

左 ALT 扫描码是 38 ,表示 38 00
右 ALT 键扫描码是 E038,表示 38 E0

左 Shift 扫描码是 2A ,表示 2A 00
右 Shift 键扫描码是 36 ,表示 36 00

左 WIN键 扫描码是 E05B ,表示 5B E0
右 WIN键 扫描码是 E05C ,表示 5C E0
.

关于Scancode Map格式问题👇

二、Scancode Map格式说明

0000 00 00 00 00 00 00 00 00 	
0008 04 00 00 00 1D 00 5B E0 
0010 1D E0 5C E0 5B E0 1D 00
0018 00 00 00 00 

    1
    2
    3
    4

1、00 00 00 00 00 00 00 00。固定,照写就好
2、04 00 00 00。04代表要修改三个按键的映射,两个是02,一个是01
3、1D 00 5B E0。

        1D 00 是修改后的按键扫描码;
        5B E0 是原按键的扫描码;
        左Ctrl键的扫描码是1D 00,左win键的扫描码5B E0;
        这四个字节代表的意思是将 左win键 替换成 左Ctrl键。

4、1D E0 5C E0。这四个字节代表的意思是将 右win键 替换成 右Ctrl键。
5、5B E0 1D 00。这四个字节代表的意思是将 左Ctrl键 替换成 左win键。
6、00 00 00 00 。固定,照写就好

 

2020.10.26

继老年机之后, 与我走南闯北的老年本也要报销了, 之前也进过水, 啥事没有, 昨晚洒了一点点水上去结果八成的键都失灵了, 阴干一晚晒一早上也好不了, 我知道它活不过第二个四年, 没想到这么快就要寿终正寝了, 下次回家把它做成远程主机丢家里, 我也就有了个专属服务器hh, 好歹配置还可以, 这么快坏掉怪心疼;

PS:

拉跨,计划维持昨天4’45’’的配速,结果第一个1000米控到了4’35”,无可奈何硬着头皮维持速度,最终只八圈14’49’’就跑崩了,平均配速4’37”,走回宿舍门口气不过回头想补个五分钟三圈,结果1’35”一圈就死了。。可能是受昨天影响腿疼得狠,体力休整得很好了,但是肌肉没有恢复,明天再试试看吧。

现在就很怪,没了之前5min的固定配速标杆后,跑起来一点章法都没有了,会不会跑崩全看运气,恢复到5min配速又不情愿,但是确实5min比较好控,每个一百米30s,每圈2min,扫一眼手机秒表就知道该快些还是慢点了,其他配速还要心算一下,太蛋疼,就像昨天后程其实就很少看手机秒表,看了也算不出来配速是快了还是慢了,只能全靠感觉。。


2020.10.25

新的突破!38'03'',20圈8公里!

到晚上在四教待不住,效率低,于是吃了个梨补了手葡萄糖打算提早去操场,想趁周末有时间试试看能不能5'配速突破到一个小时以上。但是总是事与愿违。

并没有刻意提速,然而前5圈只用不到9'10'';

到12.5圈(5公里)时不到只用了23'40''不到,发现或许是昨天的间歇跑起了些作用,让自己习惯了更快的速度;

到19圈结束时感觉体力未必能支持这个速度继续到更远的圈数,想留个比较好看的20圈记录,于是20圈提速耗光所有精力,最后一圈1'35'',比之前的20圈要快整整1分半,相当于平均4'45‘’的配速,基本上整个后程没有太明显的体力不支导致减速。

昨天想要稍微快一点,然而控制不住一下子就到4'30''直接跑崩;今天想要慢一点跑到60分钟,结果事与愿违反而无意识地变快了。感觉只有进场跑个两三圈才能真正地去计划今天到底能跑到什么程度,计划永远赶不上变化。

不过也算是知道间歇跑缺实对提高配速有不错的作用,九月份每天五分钟三圈并没有对长距离的配速有太大帮助,还是停留在跑步机水平,最近有两天在跑间歇,确实卓有成效,但是跟那种专业五公里能跑到十六七分钟的还是差太多了,普通人拼不过速度,只能勉强长长耐力了。


2020.10.24

决定提高配速,本来想先从5'到4'50'',但是发现配速做10秒的提升很难控制,习惯5min后一提速基本上就到4'30''左右的水平了。

第一个4圈用了7min,坚持到5圈结束耗时8'48'',已经力竭,完全控制不住速度;

休息1分钟上场又试了一个3圈耗时5'21'';

最后休息1分钟又试了个1圈,发现自己400米是真的拉跨,要到1'28'';

总之昨天结束觉得5min配速的长跑到后期几乎全凭意志,个人觉得满状态下5min配速坚持到1小时以上应该都不会有太大问题。要提升跑步水平必须要通过加配速而非加里程,也正好可以提升一下效率,眼下基本上4'30''是个相对可控的配速,准备先以4'30''为基准,相当于每圈1'48'',目标能先坚持到10圈,今天试下来应该差不多5圈就力竭了,跟5min配速的耐力差距确实是大的有点离谱。。。

PS:

《陌上花早》,本以为这么美的歌词都应该是有古文出处,查了几处佳句都没有找到类似的表述,大约都是finale女神原创,第一遍听没有很经验的感觉,抄完歌词再听实在是神作。


2020.10.23

49分40秒,25圈10公里。事实证明昨天停一天跑个短程是正确的,腿脚完全恢复,晚上8:57以几近完美的状态进场;

第15圈时心肺完全正常,双腿疲劳很低,隐约觉得今天或许可以突破20圈;

第20圈时呼吸仍然平稳,决定不提速,尝试突破到25圈;

24圈结束48分整,操场已经熄灯;

25圈扩大步幅提速,剩余100米全速冲刺,最后一圈1分40秒,结束时几乎没有崩溃的感觉,应该可以接着跑一两圈,5min配速的极限差不多应该可以到11公里的样子了。总之5min配速下的10公里跑目标达成,接下来是连续一小时跑,其实今天如果进场再早些,说不定就撑到一小时了。

但愿以后能够以一个“跑者”自居。

计划将来维持20圈的量,毕竟不是每天都有这么长时间,也不一定状态都能这么好每天坚持到10公里;

感觉可以2天长跑(20圈及以上)+1天短程跑(10圈以内),这样方便双腿恢复,不过也许正是前两天拖着两条废腿硬撑20圈,才能这么快突破到25圈,最近一周2天15圈,4天20圈,1天25圈,累积135圈54公里,有生之年如果能跑个半马乃至全马,只要能跑完全程,也算是个不错的经历。

PS:

英语课要求用Cap Cao注册了个linkedin,注册完推荐列表第一个就是sxy,头像都没有还是中文名,这也太离谱了。


2020.10.22

组会,就hmy和wm两个人讲,搞了将近4个小时,wm确实是厉害,去年刚发了一篇国际期刊,今年这篇准备冲ACL,靠科研得了国奖,还拿了留基委的访问名额,着实大佬的很,王英林的左膀右臂,得意门生。我们这帮菜鸟只能在下面仰望。

不过他很快就毕业了,到时候就是我这代人的天下了!代有才人出,舍我其谁。

组会下得太晚,操场关门,选择绕宁远18号楼-->三教正门-->商院-->金院正门-->林荫道-->宁远18号楼这条绕操场的外围路线两圈,8分钟多一些,差不多两公里的样子,体能确实是上来了。

其实今天上课爬三层楼就已经气喘吁吁,不太敢想再强行20圈是什么结果,腿脚不便得很。休整一天跑个短途,明天重整旗鼓上场冲击一下25圈。fight!


2020.10.21

昨天提到的Elastic教程今天刷了大半,值得一提的是讲师“狂神说”,CSDN主页https://blog.csdn.net/qq_33369905/

其实大概之前也看过几个他的教程视频,今天才在他写自己的生日时知道他是97年的,只比我大了一岁,但是他的话里行间表现出的完全不像是只比我大一岁的见识,可以很清晰地从他的话里听出那种桀骜不驯,就和他的网名"狂神"一般,确实是个很有实力,而且履历很丰富的大佬,看他的博客似乎正准备自主创业,这种性格加上这种实力让我艳羡不已,狂神那种人生即便不能最终走向辉煌,也注定是毫无遗憾的精彩。

PS:

39分38秒,20圈8公里,最后一圈的最高冲刺速度明显不如前三天,慢了的原因有三:

① 雨天场地潮湿

② 四教回来的晚了,一路骑车狂冲,上五楼换裤子下五楼一气呵成,进场前消耗了不少精力,导致15圈就已经跟之前20圈差不多的力竭了

③ 连日20圈腿脚真的恢复不过来,进场前已经处于腿酸的状态了,感觉可能6 7圈时呼吸就开始失控了,今天是很痛苦的20圈。


2020.10.20

markdown笔记

箭头:\leftarrow \Leftarrow 首字母大写则箭头的横是双层的, 否则单层, 同理有right up down
波浪线:\sim 这其实是个几何相似的符号, 如果是要表示服从概率分布不太清楚是什么, 大致用\sim也差不多了
预设的几个公式符号: \max \min \Pr 别再在公式里傻不拉几的些max min Pr了, 斜体很丑
公式中去除部分字符的斜体: {\rm sigmoid}(x) 就可以去除掉sigmoid的斜体, 看起来更好看了

今日POST

依然四教回来顺道20圈,39分30秒,相对来说前19圈没有太大长进,20圈冲刺速度快了一些,计划先坚持一个星期20圈的量,之后再谋求到25圈10公里的目标,现在的感觉是一定要维持好呼吸节奏,否则随时都可能跑崩掉,今天到15圈之后才开始心肺有压力,出现间歇大喘气,至于腿脚从开始就是酸的,四五圈就麻木了。

今天效率一般,整理掉很久之前的一篇文档级RE的论文,然后就开始对着一个字一个字抠出来的https://caoyang.blog.csdn.net/article/details/109139934论文啃,发现即便是自己翻译的论文,还是看不懂,主要对文档搜索这块所涉甚浅,很多概念的定义都不清晰,B站找了个elasticsearch的教程https://www.bilibili.com/video/BV17a4y1x7zq,准备先啃elasticsearch,其实真的很讽刺,之前学SpringBoot还恰好学到这部分,然后自己的笔记里是这样记载的👇

万万没想到半个月不到我就真的要学elasticsearch了,要不然我真的是搞不懂文档搜索这块东西了,这篇密码学论文是要pre的,必须要从头到尾搞明白才行,当初看它只有9页觉得会比较简单,没想到抓到个硬骨头了,关于https://caoyang.blog.csdn.net/article/details/109139934这篇博客后续我将不断更新自己对于论文内容的备注,直到我能脱稿讲明白它为止(maybe)。


2020.10.19

39分36秒,20圈8公里,19圈结束总用时37分58秒,虽然比昨天慢了一些,但是最后一圈状态好太多,稳定地把速度提上来了,最后冲刺也感觉仍有余力,而且今天场上人太多了,基本没圈都要设法超掉几个人,体能耗用上比较亏;

如果能坚持每天至少这个跑量到一个月,说不定在有补给的情况下有能力去跑个半马。

实话说从小体育无能的我,做梦也想不到有一天能在田径场上一口气跑到20圈,今年寒假回家第一天的心血来潮,就像十年前那晚忽有触动决定开始写日记,一路坚持到现在,当一件事情成了习惯,对人或好或坏都将会有很大改观,实话说写日记未必对我有什么好处,甚至可能塑造了我现在这种离奇的性格,但是跑步只要坚持下去,一定是百利而无一害的。

每天跑步导致现在支出的成本增加,不过现在相比于各种涨价的盖浇饭和砂锅,麻辣香锅确实显得要实惠不少;另外每天不到九点就要返程,换在以前都要到近十点才会回寝的,时间成本也挺高。

哪有什么天才,凡事贵在坚持罢了;虽然是个蠢材,但也别就这么颓废了。


2020.10.18

39分33秒,20圈8公里,感觉很极限了,目测当前5min配速的极限应该在9公里左右。

前天是因为下雨场地潮湿,昨天坑在鞋带,感觉今天的状态没有昨天好,今天进第15圈的状态明显已经疲乏不如昨天,想提速身体不听使唤,只好硬着头皮继续维持配速去跑,第20圈开始时决定提速,却已经提不了多少,最后的冲刺速度也不如昨天,到最后150米才冲到终点。

总结来看今天除了第八圈被个坑货超到身前就来了个急刹车撞了一下,此外第一个1000米没有控制好速度,跑到了4分30秒以内,就没有太多失误了,人多属于客观因素无法避免,以后抽个时间早上去试试看能不能到10公里。

第一圈后开始刻意放慢,基本维持在每个一千米结束时在【(5n+4)分50秒】上下;

19圈结束总用时37分47秒,第20圈提速冲刺1分46秒,明显慢于昨天的第15圈,而且昨天第15圈是在鞋带掉了的情况下在跑,说明确实已经力竭,如果不冲刺我觉得最多还能加两圈,不过身体已经几近麻木,也不知道单靠意志能达到什么程度。

总之人确实可以有无限可能性。

PS:

密码学的期末作业找到一篇CCF有关搜索安全的论文,很感兴趣,跟我可能要研究的方向还挺能搭上边,我觉得自然语言处理这块可能跟密码学结合会产生一些有用的东西出来,目光太浅看不透。论文标题:Privacy and Efficiency Tradeoffs for Multiword Top K Searchwith Linear Additive Rank Scoring,已经详细做了翻译,之后会挂出来。


2020.10.17

29分29秒,15圈6公里,可能是昨天下雨场地潮湿,今天操场人比较多,但是状态要好太多了:

12圈开始心肺感觉到有压力

14圈初发现鞋带掉了,但是不想停下来系。。。

14圈结束27分50秒,感觉精力极其充沛

15圈初开始提速,剩余200米开始全速冲刺到结束,最后一圈不到1分40秒

如果不是鞋带掉了我计划要跑到至少7公里,想看看自己5min配速的场地跑上限在哪里,可惜鞋带掉了只能尽快结束。九月在校每天三圈,国庆回家莫名其妙四天就长到将近7公里的水平,实在是太意外了。我开始知道高中室友金言热爱跑步的原因了,每天都在挑战自己的极限,确实是很有成就感的事情。


2020.10.16

29分50秒,15圈6公里,重拾疫情居家的最佳状态。

本来今天很冷,穿上长袖长裤都觉得冻得不行,但是晚上统计理论上完,回宿舍路上看到操场没人,机会难得决定还是换了短袖短裤下来试试,结果打着秒表跑基本精确地维持了5min/km的配速,最后仍然余有两百米全程冲刺的精力,把15圈跑进了30分钟,如果不冲刺应该至少还可以跑一圈,但是确实很累,且有点强迫症想把15圈跑进30分钟(不冲刺应该会要30分钟多几秒,后程已经渐渐不能保持住配速了,这个我不能忍),索性冲光了力气,还挺惊奇,14圈半后还能一口气冲200米,感觉到极限了。

下个目标要能跑到20圈,直到跑出第一个十公里,不管怎么说养成习惯之后就确实慢慢喜欢上去跑步了,确实跑完会很舒爽,一天的疲惫都能消散。


2020.10.15

冻了一天,感觉感冒好不了。感觉感冒的人越来越多了,情况有点不太好。

PS:

晚上四教回来下雨,小跑三圈,重新回到五分钟以内的水平,现在问题是两圈后需要稍慢一点跑个100米才能后三百米重新回到前两圈的速度,耐力太差了。


2020.10.14

转回到管科的硕博,算是弥补了保研面试时的失算。

从此要做个人了,读博可能会很难吧,也许。

PS:好像感冒越来越严重了,但是还是不想穿长裤长袖,要不然晚上还得先回宿舍换衣服再下来跑,今天还是17分20秒的九圈,状态不行,9圈完全力竭了


2020.10.13

硕博面试拉跨,但愿老师念旧情放我一马,我也没想到会碰到方慧,领域对口被问的哑口无言,但凡别人我都能糊弄过去,一天时间我都没怎么准备这块东西,直接硬问我NLG的东西,都一个多月前看的了,最近一个月沉迷Java不能自拔,失算了。

晚上第一节课睡了一节课,翘了第二节课出来跑了九圈 17分15秒 可能是有能力到十圈的,但是实在是太累了,最后剩一百米索性冲刺,还是懒;第三节课再回去划重点,以后一周就有两个weekend了。

PS:晚上下课好像楼梯拐角刚好碰到S,感觉自己被紧急回避了,唉。


2020.10.12

ipconfig /flushdns

解决DNS解析错误,要么清浏览器缓存,要么用上面这个命令来,今天发现无法访问mp.csdn.net,报出这个问题无法加载,但是手机仍然可以访问,重启电脑依然不行,查了是要清理缓存,虽然不是很懂为什么,明明浏览器关闭会自动清理的。

PS:

有点感冒,嗓子有些哑,感觉这个冬天会很凶险,但愿不会有什么大流行。

三圈可以进五分五秒,感觉很难跑现在,状态不太行


2020.10.11

吃完晚饭去操场试了一下,11分钟6圈,已经刻意减缓速度但是前三圈还是在5分20内,后三圈就很艰难,实在没有力气再继续了。


2020.10.10

晚上把 gyf 没做出来的市场机制设计作业给解决了,得到了 gyf 大佬的认可。

等两周,看看硕博结果如何。

感觉没什么别的急事要做,干脆还是主要搞springboot,实话说还挺有意思的。


2020.10.08

最后还是决定做个人,晚上极限操作把剩余30节的springboot学完了,于是终于完结了本该在九月底完结的https://caoyang.blog.csdn.net/article/details/108740232 不管怎么说还是学到点东西的,后端开发还是有不少学问的,以前在django里面学到的还只是很浅显的东西。

PS:依然拉跨得很,还有,完全不想上课


2020.10.07

昨晚跑步把用四年完好的麦芒5给摔水泥地上碎成了世界地图,痛心,赶早花了半小时来回在五角场办了个nova7。

装微信时想想还是迁移了一个人的聊天记录,感觉丢了还是挺可惜的。

PS:极度拉跨,两天都三圈都跑不进5分钟


2020.10.05

5min/km * 6.5km 果然还是太懒 真要跑还是能做得到的 感觉应该能到7


2020.10.04

表姐结婚晚上弄得太晚了,怕扰民没敢在家里跑,出去跑了个往返差不多3.6公里,不到17分钟,基本保持了匀速,快到家时才冲光了所有的力气,感觉没有跑步机上的5公里累,应该至少还能跑到4公里。

之前习惯跑步机的速度后,每次路跑一提速就跑崩,两公里不到就废了。在学校时操场上人多被挡住只能提速超过去,加上每次到操场都是到快闭场的时间,跑个三四圈就走人了,下次有机会找个人少的时间试试看能不能到十圈以上。

PS:现在感觉参加婚礼好尴尬,各种意义上。。。


2020.10.03

5min/km * 5km 达成两天


2020.10.02

把马哲的3000字论文给赶掉了。没有真相,也许历史也并非真相。

很巧,后来晚上出去吃火锅碰到了初中同学聚餐,hzq, lxy, xjh, xys, glc, gcl, 毕业后他们几个兄弟就一直在一起玩。lxy当兵回来确实大有改观;hzq在江苏警校出来后现在分配到了家乡的警局工作;xys意外地艺考去了湖南音乐学院,现在据说是个艺人,其他几个人都已经工作了。其实他们并没有看到我,只是认出我妈妈了。。

我问lpz没有回来吗,怎么没有来。hzq示意我之前跟lpz有过不愉快的经历,现在似乎分道扬镳了。唉,lpz也许变了很多了。

我说自己很惭愧,毕业后就再也没有联系过他们了,事实上我连高中同学也几乎没有联系,前年jy从中科大到复旦来见过一面,那真的是还和高中时一样的畅快,可惜前一天我晚上有课不能赶到交大跟zgy jy三人聚首,我们“金(金言)阳(曹阳)光(朱光耀)”三人组毕业后似乎真的再没有一起过了。交大的其他几个同在上海就从来没见过面,此外就只有本校的lth偶尔见到会聊几句了。其实能再见面的也没有几个人了,zgy, jy, lth, yh, fzc, 女生里大概有一个还能见见,其他人可能都要变成陌生人了。

聊了大约一个小时,谈到大家各自的境况,一些同学已经结婚成家,hzq也问了我gcx的情况,我说大学后来几乎没有见过面,而且现在她已经出国,想必之后再没有任何交集了,尝试过,但也没有成功。

总之挺好,看到大家过了这么多年还能如初,确实很欣慰,自己还是当年那个老大哥,人总会变,但希望仍能以善相待,别活成自己讨厌的样子罢。


2020.10.01

9h,昨晚11点半到家。我发誓以后国庆再也不乘大巴回家了。

druid的yml配置

```
spring:
  datasource: 
#   数据源基本配置
    username: root
    password: 123456
    url: jdbc:mysql://192.168.15.22:3306/mybatis
    driver-class-name: com.mysql.jdbc.Driver
	type: com.alibaba.druid.pool.DruidDataSource
#   数据源其他配置
    initialSize: 5
	minIdle: 5
	maxActive: 20
	maxWait: 60000
	timeBetweenEvictionRunsMillis: 60000
	minEvictableIdleTimeMillis: 300000
	validationQuery: SELECT 1 FROM DUAL
	testWhileIdle: true
	testOnBorrow: false
	testOnReturn: false
	poolPreparedStatements: true
#   配置监控统计拦截的filters, 去掉后监控界面sql无法统计, 'wall'用于防火墙
    filters: stat,wall,log4j
	maxPoolPreparedStatementPerConnectionSize: 20
	useGlobalDataSourceStat: true
	connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
	schema: 
	  - classpath: sql/department.sql
	  - classpath: sql/employee.sql
```

2020.09.30

搞个硕博?万一呢,七年太长,五年还是能忍的


2020.09.29

完了,三天三夜刷完了三季60集的进巨,月底前是更不完spring boot了。

坐等进巨第四季。


2020.09.28

每次有题做不出来就很焦躁。

昨天中午十二点布置的作业,困死在一道题上做不出来,直到晚上十二点脑子里都在想怎么做,今早lh开始动手,也卡在这道题上出不来,花了早上半天水课跟他讨论无果。于是下课去问gyf,结果他刚好就没看这道题,心态爆炸。最终下午我在上英语课,他在上计量,硬是靠打字把这道题给讨论着解决了,到底还是gyf有东西。

PS:做不出来题,午夜怒刷补完《进击的巨人》第一季后半季,怎么说呢,要不今晚刚一波再刷完第二季?


2020.09.27

心血来潮下了个《进击的巨人》的资源,之前hy一直推荐我看,结果差点看了个通宵。自《钢之炼金术师F》之后我已经很久没有看过这么精彩的长篇作品了,感觉又回到了刷钢炼那时候的样子,两个晚上把64集的钢炼刷完。

本打算今天中午补一觉,十二点就发了市场机制设计的作业,做了一个下午都没做完,心态爆炸。

PS:超炮T完结,炮姐是真的JC社亲女儿,到第三季的质量丝毫不逊于前两季,反观魔禁科方都碎了一地。


2020.09.26

如果只有作业才能在周六把我逼出宿舍,那么希望作业来的更猛烈一些[Facepalm]

企业微信里看到中特和马哲群里有个叫武文静的,查了一下只知道本科不是本校的,因为cc的号只能看本科学生的信息,下次pre的时候稍微注意一下,不会真的是之前的小学加初中的同学考进来的吧,那感觉也太巧了,不过我知道她成绩还挺不错,考进来也不奇怪。

阳光明媚,是个拼命的好日子。


2020.09.25

作业手算DES,枯了,就一轮都要花半个多小时,考试考到就是拼手速了。这道题写完就可以复现一遍python的DES逻辑了,参考https://blog.csdn.net/z784561257/article/details/78174106

临睡前翻了翻票圈,时隔三个多月看到了S新的POST,大概之前都被屏蔽了,原来今晚也在操场跑了两公里多,没注意看,现在都是五分钟快速刷三圈就走人了,周末才有时间多跑几圈。

PS:待完善的DES模块(这边只是用来写作业的部分)👇,其实之前学stanford的公开课里说不管怎么样,都不要自己去实现标准加密算法,不管你怎么写,都会有漏洞(就算你的DES逻辑写对了,别人也能通过你代码运行的时间等外在因素来破解),总之用标准库,不要自己写

# -*- coding: UTF-8 -*-
# @Author: caoyang
# @Email: lzwcy110@163.com
# DES加密算法相关函数

import numpy as np

IP = [
	[58,50,42,34,26,18,10,2],
	[60,52,44,36,28,20,12,4],
	[62,54,46,38,30,22,14,6],
	[64,56,48,40,32,24,16,8],
	[57,49,41,33,25,17,9,1],
	[59,51,43,35,27,19,11,3],
	[61,53,45,37,29,21,13,5],
	[63,55,47,39,31,23,15,7],
]

PC_1 = [
	[57,49,41,33,25,17,9],
	[1,58,50,42,34,26,18],
	[10,2,59,51,43,35,27],
	[19,11,3,60,52,44,36],
	[63,55,47,39,31,23,15],
	[7,62,54,46,38,30,22],
	[14,6,61,53,45,37,29],
	[21,13,5,28,20,12,4],
]

PC_2 = [
	[14,17,11,24,1,5],
	[3,28,15,6,21,10],
	[23,19,12,4,25,8],
	[16,7,27,20,13,2],
	[41,52,31,37,47,55],
	[30,40,51,45,33,48],
	[44,49,39,56,34,53],
	[46,42,50,36,29,32],
]


E = [
	[32,[1,2,3,4],5],
	[4,[5,6,7,8],9],
	[8,[9,10,11,12],13],
	[12,[13,14,15,16],17],
	[16,[17,18,19,20],21],
	[20,[21,22,23,24],25],
	[24,[25,26,27,28],29],
	[28,[29,30,31,32],1],
]

P = [
	[16,7,20,21,29,12,28,17],
	[1,15,23,26,5,18,31,10],
	[2,8,24,14,32,27,3,9],
	[19,13,30,6,22,11,4,25],
]

def get_key56(key64):
	_key64 = np.array(key64)											 # 转为numpy格式便于操作
	_key64 = _key64.reshape(-1,)										 # 转为一维向量便于操作
	pc_1 = np.array(PC_1)												 # 转为numpy格式便于操作
	pc_1 -= 1															 # 真实的索引都是从零开始算起的

	res = []
	for row in pc_1:
		temp = []
		for i in row: temp.append(_key64[i])
		res.append(temp)
	key56 = np.array(res)
	c = key56[:4,:]
	d = key56[4:,:]
	return key56,c,d

def get_key48(key56):
	_key56 = np.array(key56)											 # 转为numpy格式便于操作
	_key56 = _key56.reshape(-1,)										 # 转为一维向量便于操作

	pc_2 = np.array(PC_2)												 # 转为numpy格式便于操作
	pc_2 -= 1															 # 真实的索引都是从零开始算起的

	res = []
	for row in pc_2:
		temp = []
		for i in row: temp.append(_key56[i])
		res.append(temp)
	key48 = np.array(res)
	c = key48[:4,:]
	d = key48[4:,:]
	return key48,c,d

def cycle_left(key,step=1):
	_key = np.array(key)												 # 转为numpy格式便于操作
	shape = _key.shape
	_key = _key.reshape(-1,)											 # 转为一维向量便于操作
	new_key = _key.tolist()[1:]
	new_key.append(_key[0])
	return np.array(new_key).reshape(shape)
	

def initial_permute(plant_text):
	_plant_text = np.array(plant_text)
	_plant_text = _plant_text.reshape(-1,)
	ip = np.array(IP)
	ip -= 1

	res = []
	for row in ip:
		temp = []
		for i in row: temp.append(_plant_text[i])
		res.append(temp)
	res = np.array(res)
	l0 = res[:4,:]
	r0 = res[4:,:]
	return res,l0,r0
			
	

if __name__ == "__main__":

	key64 = [
		[0,0,0,0],[0,0,0,1],[0,0,1,0],[0,0,1,1],
		[0,1,0,0],[0,1,0,1],[0,1,1,0],[0,1,1,1],
		[1,0,0,0],[1,0,0,1],[1,0,1,0],[1,0,1,1],
		[1,1,0,0],[1,1,0,1],[1,1,1,0],[1,1,1,1],
	]

	plant_text = [
		0,0,0,0,0,0,0,1,
		0,0,1,0,0,0,1,1,
		0,1,0,0,0,1,0,1,
		0,1,1,0,0,1,1,1,
		1,0,0,0,1,0,0,1,
		1,0,1,0,1,0,1,1,
		1,1,0,0,1,1,0,1,
		1,1,1,0,1,1,1,1,
	]
	'''
	# 示例: 可对比https://blog.csdn.net/z784561257/article/details/78174106
	key64 = [
		"0001","0011","0011","0100",
		"0101","0111","0111","1001",
		"1001","1011","1011","1100",
		"1101","1111","1111","0001",
	]
	key64 = list(map(lambda x: list(map(int,list(x))),key64))
	'''


	'''
	key56,c0,d0 = get_key56(key64=key64)
	print(key56)
	print("#"*64)
	c1 = cycle_left(c0)
	d1 = cycle_left(d0)
	key56_new = np.vstack([c1,d1])
	print(key56_new)
	print("#"*64)
	key48,c,d = get_key48(key56=key56_new)
	print(key48)
	'''

	res,l0,r0 = initial_permute(plant_text)

	print(res)
	print("#"*64)
	print(l0)
	print("#"*64)
	print(r0)
	

 


2020.09.24

进度堪忧,下午和晚上合起来进度只达到了预想的2/3,主要出了几个很恶心的问题查了好久,比较恶心的是这个。

如果想要用thymeleaf进行模板编写,控制器类一定要加注解@Controller而非@RestController,前者可以绑定而后者不行;

总之感觉springboot和django的框架差的还挺大,django就很容易上手,springboot的各种细节问题就特别多,而且像django的中间件和springboot的拦截器在处理这种面向切片编程的逻辑区别也挺大,django里只是每个应用(app)要注册一次,springboot里一个组件,一个功能类,一个配置类就都要注册,很细,很麻烦就对了。

发现每天跑步有助于睡眠质量,还行,也许只是单纯的宿舍条件比之前好一些了,还有就是大家都不打呼噜。。。


2020.09.23

springboot重新找了个雷丰阳的教程https://www.bilibili.com/video/BV1Et411Y7tQ,之前看的那个属实是个半吊子。

跟xhp几个讨论了一下分工,xhp带lh去搞前端vue,我带yj和wyy这边边学边做后端springboot,实在不行就用django凑合一下,国庆回来得把需求分析文档样图都搞好,难度很高,总之我做的这块还是不能拖前端的后腿。

发现好多导师都已经带学生做事了,我看到xhp和wyy在做flappy-bird的qlearning强化学习样例,一看就是刘桦带的,就我们宿舍三个还在放羊,lh找的导师niko直接就困在俄罗斯回不来了。。。


2020.09.22

下午去修车。发现自己特别容易把车骑坏,到手十天不到的车,早上出门发现后轮爆胎,1大皮都脱落了。明明昨晚十点回来都好好的,怎么一大早就坏了,下次停到教务处后门的雨棚里去了,感觉这路边停车有毒。虽然是二手的,全新也要两千多,以后有钱一定要买辆不会爆胎的车[Facepalm]


2020.09.21

今日痛点:javabean类必须至少有一个空的构造函数。


2020.09.20

下午过了一遍vue,感觉虽然相对于angular轻量级,但是好像比angular要细一些,内容要多不少。晚上接着搞spring-boot

拿CC的号查了一下杨超林已经是正教授了,本以为是院里最年轻的正教授(刚34岁),然后发现之前教我们离散的Nicola Gravin也评上正教授了(刚33岁)。此外江波也意料之中地评上了正教授,一击男袁洪松也终于评上了副教授,刚进来的韩潇也上副教授了,这样新晋的年轻一辈里还真是只剩史钞一个人没上高级职称了[Facepalm]

看了一下院里还是讲师的只剩6个人了,另外还有相当数量的助教授,助理教授,助理研究员,感觉差不多有一大半都是副高向上的了。

1. 一些比较快的maven镜像:
  - 阿里
```
<mirror>
	<id>alimaven</id>
	<name>aliyun maven</name>
	<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
	<mirrorOf>central</mirrorOf>
</mirror>
```
  - 华为
```
<mirror>
    <id>huaweicloud</id>
    <name>mirror from maven huaweicloud</name>
    <url>https://mirror.huaweicloud.com/repository/maven/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
```
  - ibiblio
```
<mirror>
    <id>ibiblio</id>
    <name>Mirror from Maven ibiblio</name>
    <url>http://mirrors.ibiblio.org/pub/mirrors/maven2/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
```
  - repo1.maven.org
```
<mirror>
    <id>central</id>
    <name>Maven Repository Switchboard</name>
    <url>http://repo1.maven.org/maven2/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
```
  - repo1.maven.apache.org
```
<mirror>
    <id>central</id>
    <name>Maven Repository Switchboard</name>
    <url>http://repo1.maven.apache.org/maven2/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
```
  - repo2
```
<mirror>
    <id>repo2</id>
    <name>Mirror from Maven Repo2</name>
    <url>http://repo2.maven.org/maven2/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
```
  - spring.io
```
<mirror>
	<id>sprintio</id>
	<mirrorOf>central</mirrorOf>
	<name>Human Readable Name for this Mirror.</name>
	<url>https://repo.spring.io/libs-snapshot/</url>
</mirror>
```
  - UK
```
<mirror>
    <id>ui</id>
    <name>Mirror from UK</name>
    <url>http://uk.maven.org/maven2/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
```
  - JBoos
```
<mirror>
    <id>jboss-public-repository-group</id>
    <name>JBoss Public Repository Group</name>
    <url>http://repository.jboss.org/nexus/content/groups/public</url>
    <mirrorOf>central</mirrorOf>
</mirror>
```
  - Google
```
<mirror>
    <id>google</id>
    <name>google maven</name>
    <url>https://maven.google.com/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
```
  - Maven china
```
    <mirror>
        <id>maven.net.cn</id>
        <name>Mirror from Maven in china</name>
        <url>http://maven.net.cn/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>
    </mirror>
```
  - Maven oschina
```
<mirror>
    <id>CN</id>
    <name>OSChinaCentral</name>
    <url>http://maven.oschina.net/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
```

 


2020.09.19

周六诅咒,总之周六总是做不成事情,学不进去东西,很烦。

宿舍里数院的老哥ywt参加全国研究生数学建模大赛,本来是问我们三个要不要参加的,yjz周末要陪女朋友,lh显然对这玩意儿不是很感兴趣,当然他也要陪女朋友,只是他每天都在陪。。我自己本科参加过拿了奖也懒得再参加一次了,所以就让他们有什么问题来问我好了。

事实上ywt跟数院另外两个人组的队伍连code都不会,MATLAB还是前几天现学的,而且也不会latex,啥准备也没有,感觉完全是心血来潮搞了一哈。。。

然后今晚他们哥仨十一点回来洗澡问我一段MATLAB代码的意思👇

mdMove2 = mdMove * TargetMove';
mdMove2(YxL<5) = -inf;
[~,Ind] = sort(mdMove2(2:5),'descend');

首先他们三个人竟然都不知道inf是什么东西。然后不知道mdMove2(YxL<5)是什么东西。虽然自己MATLAB也丢了几年没用了,但这些语法好歹能猜出个大概。解释了半天之后我突然想到你们难道不会在代码里把这些矩阵print出来看看结果不就知道大概语法是什么意思了,试了print, printf, fprint, 都不对,然后现场查了一下MATLAB的打印函数是disp(我也忘了打印函数是什么)

“哦,原来还可以这样。” 三个人恍然大悟。

这是数模第三晚,我知道他们可能,也许,要凉了。。


2020.09.18

spring boot入门,最终还是去找了网上的其他教程,下了个spring tool suite4,关键2019年起spring tool suite3开始断供,网上19年前的所有教程都是大部分基于spring tool suite3版本,教程里的URL全部都变成404了,结果怎么都配置不好。今天下了spring tool suite4的(链接https://spring.io/tools)jar包,直接解压就能打开IDE,都不用安装的,pom.xml也不用配置(我在eclipse新建maven项目后,到目前为止都不知道怎么把pom.xml文件改到不报错,网络上的教程都不管用,版本都对不上,这种框架式代码的配置确实很糟心,因为根本不知道背后的机制是什么,只能按图索骥的改)。每次问题解决就发现之前的徒劳是多么愚蠢。

总体来说后端架构django和spring应该不会差太多,主要都是路由配置以及数据模板的编写,顺利的话周末应该可以很快上手,毕竟后端也没什么高端的东西能写,增删改查呗,java跟python也不会差太多。


2020.09.17

昨天一晚,连springboot的一个起步的helloworld都没跑通,很想抽自己几个大嘴巴子。

晚上yy约了吃饭,最近他好像看了我不少blog,谈论了一些问题,甚欢。感觉确实还是应该找个方向突破的,人总是难以面面俱到,老大不小了。

我的blog里终究也没有写太多见不得人的东西,十年如一日写了十多本日记也给这一路走来遇到的人看了不少,博客又有什么要藏得呢,写出来也不怕丢人,菜就是菜,每次进入一个新阶段我都会渐渐失去上个阶段的所有东西,四年前我断了gcx,如今断了sxy,其实也没有什么不好的,人各有异罢,模仿别人总归落了下乘。


2020.09.16

打开尘封已久的Eclipse,发现自己连怎么新建一个java脚本都不会了[Facepalm]

Angular过了一遍之后准备开始着手SprintBoot,总之还是绕不开Java,感觉django这种后端是没有办法和angular还有vue这种前端对接的,至少他们的模板语法都不是通用的,该怎么编辑HTML页面呢?

无可奈何只能硬着头皮去学了。


2020.09.15

前端框架更新换代的太快了,昨天看不懂网课里的Angular,然后去菜鸟教程先学了一遍AngularJS,总感觉跟网课里的差得好远,回头今天发现网课里讲的是Angular4.x,菜鸟上的AngularJS大概是Angular1.x,这俩的差得亲妈都不认识了,一个是封装些方法,一个都变成重量级的框架。。。有django这种类似重量级框架的学习经验,对angular4.x还是比较容易上手的了。实话说要精通所有框架可能真的很难,要记的东西太多太多了唉,实在是搞不过来。

TMD午饭又刷了两遍卡,我已经记不清这是第几次做这种蠢事了,刷完感觉自己没刷上,手机也没有通知,又刷一次,然后就发现收到了两条付款记录。

PS:我发现班里那个外校考来的wyy背影侧脸都特别像sxy,返校那几天食堂经常碰到的原来是这位啊。。。真人换了发型现在看背影已经认不出来了。。。

# 3.1.2 安装及创建一个项目

1. 安装nodejs, 并验证以下语句:
  - node -v
  - npm -v
2. 安装angular相关包
  - 直接使用npm安装: npm install -g @angular/cli
  - 安装cnpm后使用cnpm安装: 
    + npm install -g cnpm --registry=https://registry.npm.taobao.org
	+ cnpm install -g @angular/cli
3. 创建一个新项目: ng new agproj1
4. 进入项目目录: cd agproj1
5. 安装依赖: cnpm install 或 npm install
  - 相当于找到项目目录下的package.json文件并安装
  - 安装的package保存在agproj1/node_modules下面
  - 报错解决方案:
    + 方案一: 重新运行cnpm install
	+ 方案二: 删除agproj1/node_modules/目录后重新运行cnpm install
	+ 方案三: 运行npm install
6. 启动项目: ng serve --open
  - 在浏览器中打开项目, 默认网页在agproj1/src/app/app.component.html
  
7. 项目目录下的文件结构:
  - ../e2e/目录: 端对端
  - ../node_modules: 依赖的包
  - ../src/目录: 主要代码目录
    + ../app/目录: 组件目录, 当中的app_module.ts文件重要, 引入的第三方模块需要在app.module.ts
	+ main.ts: 全局入口函数
	+ app.component.css/.ts/.html三个文件构成一个组件
  - ../package.json: 依赖包配置文件
  - ../karma.conf.js: 单元测试配置
  - ../tsconfig.json: typescript配置
  - ../tslint.json: 代码风格配置

8. angular第一次使用示例:
  - 自定义一个组件:
    + 在app里新建一个components文件夹来保存所有将要自定义的组件
    + 进入到../app/目录下: 
      * 执行命令ng g component components/header
      * 此时app.module.ts文件发生变化, 新组件已经导入到该文件中, 并且加以声明
	  * 在app.component.html中用 <app-header></app-header> 即可调用header.component.html里的内容, 包括header的css

2020.09.14

# 自定义指令编写
```
//这是教程里类似的写法
angular.module('myApp',[]).directive('zl1',[ function(){
  return {
    restrict:'AE',
    template:'thirective',
    link:function($scope,elm,attr,controller){
      console.log("这是link");
    },
    controller:function($scope,$element,$attrs){
      console.log("这是con");
    }
  };
}]).controller('Con1',['$scope',function($scope){
  $scope.name="aliceqqq";
}]);

早上中特去早了,还错进到到隔壁教室,然后发现老师是双专导师李宇,心想法学院的老师怎么开始代思政课了,想想也合理,哲史不分家嘛,直到他开始掏出民法总则我发现事情不太对头,回到隔壁教室时已是座无虚席,只能在第一排苟且了一上午[Facepalm]

下午三点英语课结束就留在四教,现在住五楼我是真的不想回宿舍,吃饭还得下来,太麻烦。

上周养成习惯,工作日都是在四教结束回寝前,顺路到田径场跑三四圈,周末就晚饭吃完,直接到操场跑完再回寝。在家的时候跑步机上已经可以5分钟配速跑到5公里,不过没能坚持几天,后来逐渐又掉到4公里,在田径场里跑控制不好配速,加上人多的时候只能尽可能快地跑,除了2号那晚状态好跑了五圈,后来基本上都很难再坚持到五圈,就这烂水平先这么凑合着吧。。。

一晃九月份过去半个月了。。。


2020.09.13

图书馆限额直接导致周末连食堂都是全是自习的人,更不要说在四教找个能充电的位置了。

恶补软工网课,目前前端是个大坑,angular和vue可能要双线并进的学,后端实在没时间学springboot就用django的老本吃吃拉倒,然后还有一个学习成本极高的web3D等着要肝。

昨晚装nodejs坑的一笔,先恢复了备份,第一遍错装到E盘根目录下,这居然不自动新建一个空文件夹,于是恢复备份重装;第二遍把E盘写成F盘,又恢复一次备份,第三遍才装对,然后明显感觉PC机越来越不行了,清理和备份的时候都卡的慢得很。


2020.09.11

1. MVVM模式:
  - 对比MVC模式(设计模式, 前后端都有模式存在):
    + Model: 模型, 数据(js变量)
	+ View: 视图, 用户所见界面(HTML,CSS)
	+ Control: 控制器, 事件交互, 如何根据视图与用户交互后改变数据(通过DOM对象绑定事件, 将变量进行修改)
  - MVVM模式概念:
    + Model: 负责数据存储
	+ View: 负责页面展示
	+ View Model: 负责业务逻辑处理(如ajax请求), 对数据进行加工后交给视图展示

lc讲课给我的感觉就是32岁评上副教授后对生活已经无欲无求,纯念PPT,都不带抬头的,不过还好毕业前自学了密码学,对她教得东西还是有所了解的。

我知道sc人很好,但是没上过他的课,今天第一次上了之后才知道居然能有这么好的老师,本科多些这样的老师,也不至于GPA落得这种田地。

这样看起来麻烦的课应该就是高软工和英语课了,晚上的统计课应该竞争很激烈,但总归是数学,用点心不至于搞得太差。

以前很想学真正的技术,想建网站,想做黑客,想开发APP,但是都只是浅尝辄止。现在被迫必须学技术,于是病急乱投医,这两天vue,xml,websocket,three.js,angular都看了一些,感觉非科班出身真的上手很难,这还是基于我相对系统性地自学了JS,JQ等前端的东西,后端Django也算是入门水平。不知道高软工最终能做到什么程度,毕竟只有两个组,期末的对比会很显著,他们那边有zy这样经验特别丰富的人,我们这边如果没有人能Carry就只能我来C了。压力很大,还要带两个基本啥也不会的女生。

PS:后台数据显示还是会有人周期性地来看我写的东西。有些话还是不能写了。


2020.09.10

高软工有点难,有点难,有点难。。


2020.09.09

上标、下标及积分等
功能 	语法 	效果
上标 	a^2 	\pagecolor{White} a^2
下标 	a_2 	\pagecolor{White} a_2
组合 	a^{2+2} 	\pagecolor{White} a^{2+2}
a_{i,j} 	\pagecolor{White} a_{i,j}
结合上下标 	x_2^3 	\pagecolor{White} x_2^3
前置上下标 	{}_1^2\!X_3^4 	\pagecolor{White} {}_1^2\!X_3^4
导数
(HTML) 	x' 	\pagecolor{White} x'
导数
(PNG) 	x^\prime 	\pagecolor{White} x^\prime
导数
(错误) 	x\prime 	\pagecolor{White} x\prime
导数点 	\dot{x} 	\pagecolor{White} \dot{x}

摸到一些有意思的东西,又重新激发了一些过去对数学的执念。

查了一下马哲的老师86年的读了三个博士,tql

这三天一直苟在四教,笔记本四年之后还能不充电扛五六个小时,质量确实可以

多做事,少操心。往事难追,别让以后的自己再重拾这些遗憾

立个flag,这学期坚持每天跑步


2020.09.08

旧花落了霜。


2020.09.07

时隔多年,再次被英语课制裁。听说读写,听不懂,说不清,读不通,写不完,本科分到A班被大佬虐我也就认了,现在随机分班还是被虐,cy你真的是菜得真实。

昨晚王英林教授拉我进课题组,今天就又让我做他C++课的助教;挺好,省得我花心思去找实习。可惜我的C++是个二流子水平,但是应该教教大一新生是没啥问题的,就指针那块还是要抽空重新拾一下。

最近精力在读论文,研究方向可能是NLG,包括KG等,如基于KG的data2text生成任务,我感觉data2text对数据集的质量和格式要求太高了,不过做得出来倒是很有用的东西。而且data2text像是image2text的后置任务,猜想是要先image2data的,否则直接image2text跨度还是太大了。不过也没有阅读过相关论文,仅仅是个猜想。

PS:两节水课跟songxiyuan分到一个班,早上就撞上了,试图打个招呼,似乎是被无视了。胃疼,烦躁得很。


2020.09.04

# 查看/绘图特征重要性:clf.get_fscore()
# plot feature importance using built-in function
from numpy import loadtxt
from xgboost import XGBClassifier
from xgboost import plot_importance
from matplotlib import pyplot
# load data
dataset = loadtxt('pima-indians-diabetes.csv', delimiter=",")
# split data into X and y
X = dataset[:,0:8]
y = dataset[:,8]
# fit model no training data
model = XGBClassifier()
model.fit(X, y)
# plot feature importance
plot_importance(model)
pyplot.show()
	

返校两天,3个新室友,lh是原来本科实验班的同学,这两天几乎每时每刻都在跟女友手游双排,都没时间搭理我们这些单身狗,而且我感觉他的性格跟我很像,也不是很喜欢说话的那种,这样及导致我们之间的交流有点困难;yjz是本科计科专业的四大天王之一(ljl, zgp, zy, yjz),实力不容小觑,找了陆品燕做导师,确实很有水平。还有一个ywt,是数院直升上来的硕士,于是我们四个“老生”重组了一个宿舍,大家都对学校知根知底,有算是比较方便了。

lth时隔四年又跟我成了同院同学,实在是造化弄人的很,他最终选择了叉院直博,我大概三年硕士之后很难再有精力与时间成本再来读博,也许我本就不适合读书考试这种事情。虽然相对管科那边我们的硕士要多一年,但是相对来说硕士阶段也可以更优化的筹备,管科的硕士明年这时候就已经秋招了,时间太紧促了,三年总归会好一些,虽然要多付出一年的成本,也没有什么办法。

八月底约了wk开学见面叙旧,今晚去找他,请他一起吃了顿火锅,聊了些事情。今后大家的路可能就各有不同了,有些伤感。

我今天好像在新食堂看到songxiyuan了,下意识的躲着走,感觉很难再去直面一些事情。

开始深究xgboost。

PS:今天体检,体重大增,我就纳闷了,我从今年一月回家,除了中途在返校了一个月,直到九月头一直居家,前期每天外出跑步+引体+俯卧撑,暑假两个月每天跑步机4公里+3分钟平板,最近两天都去操场跑五六圈,怎么会就一下子长了这么多。的是见了鬼。


2020.09.02

到校,3点干到11点,把宿舍终于摆平了。

帮yy搬行李,毕业的时候他15个包帮他一起送到体育馆,开学还是我帮他搬回宿舍,还好他是住在二楼,要是跟我一样住五楼我觉得可能会累死——一对40公斤的哑铃,9个150升的行李袋外加5个两米长的蛇皮袋。

新园的麻辣香锅大降价从40降到28.8,大概是学校有补贴了,然而感觉不太好吃。

PS:今年宁远楼竟然有女生入住.. 感觉硕士的住宿条件比本科要好一些,博士包括直博的都住在三门路的公寓,应该会更好。


2020.08.28

改良后的访问量爬虫

#coding=gbk
import re
import time
import requests
from bs4 import BeautifulSoup

HEADERS = {
	"Host": "caoyang.blog.csdn.net",
	"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:79.0) Gecko/20100101 Firefox/79.0",
	"Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
	"Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2",
	"Accept-Encoding": "gzip, deflate, br",
	"Referer": "https://mp.csdn.net/console/article",
	"Connection": "keep-alive",
	"Cookie": "uuid_tt_dd=10_19689341490-1598418701548-833886; dc_session_id=10_1598418701548.565343; TY_SESSION_ID=f29ed764-d43f-4da1-a8cd-0260881aaf37; c_first_ref=default; c_first_page=https%3A//caoyang.blog.csdn.net/; c_segment=14; dc_tos=qfom75; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1598414891,1598418700; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1598463330; Hm_up_6bcd52f51e9b3dce32bec4a3997715ac=%7B%22islogin%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isonline%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isvip%22%3A%7B%22value%22%3A%220%22%2C%22scope%22%3A1%7D%2C%22uid_%22%3A%7B%22value%22%3A%22CY19980216%22%2C%22scope%22%3A1%7D%7D; Hm_ct_6bcd52f51e9b3dce32bec4a3997715ac=6525*1*10_19689341490-1598418701548-833886!5744*1*CY19980216; dc_sid=f6a244f1f27d5b42931967f0e6c7a534; announcement=%257B%2522isLogin%2522%253Atrue%252C%2522announcementUrl%2522%253A%2522https%253A%252F%252Flive.csdn.net%252Froom%252Fyzkskaka%252Fats4dBdZ%253Futm_source%253D908346557%2522%252C%2522announcementCount%2522%253A0%257D; __gads=ID=9a40a973265ed2d2-226222da23c300af:T=1598418703:S=ALNI_MYjxhW9L1McIQ4QNcaPEQvEpDfs_Q; SESSION=ba46cddb-0c50-4ef8-85df-b228895d0033; c_ref=https%3A//caoyang.blog.csdn.net/; UN=CY19980216; BT=1598455940003; p_uid=U010000; UserName=CY19980216; UserInfo=2e3fd43d6f3343ca8908262570a6063e; UserToken=2e3fd43d6f3343ca8908262570a6063e; UserNick=%E5%9B%9A%E7%94%9FCY; AU=1E6; c_page_id=default",
	"Upgrade-Insecure-Requests": "1",
	"Cache-Control": "max-age=0",
	"TE": "Trailers",
}
INTERVAL = 75
URL = "https://caoyang.blog.csdn.net/article/details/103899103"
#URL = "https://blog.csdn.net/CY19980216/article/details/103899103"

def request_with_cookies(url,cookies=None,timeout=30):					 # 重写requests.get方法: 百度指数爬虫中大部分request请求都需要设置cookies后访问
	headers = HEADERS.copy()											 # 使用config中默认的伪装头
	if cookies is not None: headers["Cookie"] = cookies					 # 设置cookies
	response = requests.get(url,headers=headers,timeout=timeout)		 # 发起请求
	#if response.status_code!=200: raise requests.Timeout				 # 请求异常: 一般为超时异常
	return response	

cp = re.compile("\d+")
pre_pv = None
while True:
	try:
		response = request_with_cookies(url=URL)
		html = response.text
		soup = BeautifulSoup(html,"lxml")
		span = soup.find("span",class_="read-count")
		string = str(span.string)
		print(string,end="")
		pv = int(cp.findall(str(span.string))[0])
		if pre_pv is None:
			print("(..)",end="\t")
			pre_pv = pv
		else: 
			if pv-pre_pv==0: print("(!!)",end="\t")
			elif pv-pre_pv==1: print("(..)",end="\t")
			elif pv-pre_pv>1: print("(+{})".format(pv-pre_pv),end="\t")
			else: print("??",end="\t")
			pre_pv = pv
		profile = soup.find("div",id="asideProfile")
		dls = profile.find_all("dl",class_="text-center")
		for dl in dls:
			try: print(int(dl.attrs["title"]),end=",")
			except: continue
		print(time.strftime("%Y-%m-%d %H:%M:%S"))
		time.sleep(65)
	except Exception as e:
		print("  - 出现异常: {}".format(e))
		time.sleep(300)

改良后的爬虫可以用于刷私密文章,最近很久没有更新,是因为连账号都没登,一直在刷之前一篇没有过审的私密文章来弥补之前被和谐掉的那篇blog损失的积分,直接把脚本挂到服务器上去了,连续四天都没有出问题,算是非常鲁棒的一个爬虫了,平均每天可以刷1000多,但是由于私密文章必须模拟登录后才能访问,于是借用了cookie来模拟登录,再次登陆后服务器上的cookie就失效了,我最近也懒得登录,让脚本保持运行刷就好,正好临近开学,也挺忙的,等刷到7000积分再重新回归更新了。


2020.08.23

分享一个pandas一列扩展到多列的方法👇

import pandas as pd

df = pd.DataFrame({
    "a": [1,2,3,4,5,6,7,8]
})

df.loc[:,"a"] = df.a.map(lambda x: (x,x+1,x+2))

print(df.a.apply(pd.Series,index=["b","c","d"]))

比如需要将某个复杂的列拆分成多个列,如果一列一列的生成就需要不断地重复复杂列的拆分逻辑,可以一次性拆完后用pd.Series直接生成多个列即可。这种写法可以缩减lambda x: (x,x+1,x+2)这部分的时间(如果这部分是个耗时很长的函数),但是在pd.Series进行broadcast时并不能节约时间,反而不如一列一列的map来得快。


2020.08.21

# -*- coding: UTF-8 -*-
# @author: caoyang
# @email: caoyang@163.sufe.edu.cn

import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import sklearn.tree as st
from sklearn.externals import joblib
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import roc_auc_score
from sklearn.metrics import roc_curve,auc,confusion_matrix,precision_recall_curve,classification_report
from imblearn.over_sampling import SMOTE



from sklearn.metrics import roc_curve, auc, confusion_matrix,precision_recall_curve,classification_report
from sklearn import metrics

from scipy.interpolate import interp1d

class Evaluation():
	def __init__(self):
		pass
	
	def evaluate(self,label,proba):
		self.confusion_matrix(label,proba)
		self.auc(label,proba)
		print()
	
	def confusion_matrix(self,label,proba):
		prob = pd.DataFrame(proba).copy()
		prob[prob>=0.5] = 1
		prob[prob<0.5] = 0
		print(label,proba)
		cm = confusion_matrix(label,prob)
		print('cofusion matrix:')
		print(cm,'\n')
		return cm
	
	def auc(self,label,proba):
		fpr, tpr, thresholds = roc_curve(label, proba)
		roc_auc = auc(fpr, tpr)
		print('auc:',roc_auc,'\n')
		return roc_auc
	
	
	def plot_pr(self,dic):
		plt.figure()
		
		for k,v in dic.items():
			(label, proba) = v
			# 绘制PR曲线
			precision,recall,thresholds = precision_recall_curve(label, proba)
			plt.plot(recall,precision , lw=1, label=('P-R {}'.format(k)))
		
		# 绘制标准线
		plt.plot([1, 0], [0, 1], '--', color=(0.6, 0.6, 0.6))
		
		# 格式设置
		plt.xlim([-0.0001, 1.0001])
		plt.ylim([-0.0001, 1.0001])
		plt.xlabel('Recall')
		plt.ylabel('Precision')
		plt.title('Precision-Recall')
		plt.legend(loc="lower left",framealpha=0.7)
		
		
		plt.show()
		
		
	def plot_roc(self,dic):
		plt.figure()
		
		for k,v in dic.items():
			(label, proba) = v
			# 绘制ROC曲线
			fpr, tpr, thresholds = roc_curve(label, proba)
			plt.plot(fpr, tpr, lw=1, label=('ROC {}'.format(k)))
		
		# 绘制标准线
		plt.plot([0, 1], [0, 1], '--', color=(0.6, 0.6, 0.6))
		
		# 格式设置
		plt.xlim([-0.0001, 1.0001])
		plt.ylim([-0.0001, 1.0001])
		plt.xlabel('False Positive Rate')
		plt.ylabel('True Positive Rate')
		plt.title('Receiver Operating Characteristic')
		plt.legend(loc="lower right")
		
		
		plt.show()
		


# Path definition
acp_rawdata_root = "rawdata/"
acp_train_file = "train_data.csv"
acp_test_file = "test_data_A.csv"

train_df = pd.read_table(os.path.join(acp_rawdata_root,acp_train_file),header=0,sep="|",nrows=100000)
test_df = pd.read_table(os.path.join(acp_rawdata_root,acp_train_file),header=0,sep="|",nrows=2400)
sampled_X, sampled_y = train_df.drop(["label","communication_onlinerate"],axis=1),train_df[["label"]]
train_x, test_x, train_y, test_y = train_test_split(sampled_X,sampled_y,test_size=0.2)


## 逻辑回归
"""
clf = LogisticRegression(
	penalty='l2',
	C=0.1,
	dual=False,
	#class_weight='balanced',
	random_state=None,
	solver='sag'
)
print("开始训练...")
clf.fit(sampled_X,sampled_y)
print("  - 训练完成!")
predict_y = clf.predict(sampled_X)
predict_prob = clf.predict_proba(sampled_X)[:,1]

'''
print(predict_y)
input("#"*128)
print(predict_prob)
input("#"*128)
print(test_y.values.reshape(-1,))
'''

label = sampled_y.values.reshape(-1,)
proba = predict_prob.copy()

fpr, tpr, thresholds = roc_curve(label,proba)
roc_auc = auc(fpr,tpr)
print('auc:',roc_auc)

eva = Evaluation()
dic = {'y2y_hat':(label,proba)}
print(dic)

eva.plot_pr(dic)
eva.plot_roc(dic)
"""

## 决策树
"""
model = st.DecisionTreeRegressor(max_depth=4)
model.fit(train_x, train_y)
pred_y = model.predict(test_y)

label = test_y.values.reshape(-1,)
proba = pred_y.copy()

fpr, tpr, thresholds = roc_curve(label,proba)
roc_auc = auc(fpr,tpr)
print('auc:',roc_auc)

eva = Evaluation()
dic = {'y2y_hat':(label,proba)}
print(dic)

eva.plot_pr(dic)
eva.plot_roc(dic)
"""

被审核删了一篇2018年的blog,损失100多积分,补档了之后积分也没能回得来,真是亏大了。


2020.08.18

昨天在QQ邮箱的垃圾箱里看到了一封英文邮件👇

 

无聊给回了信👇

 

没想到今天居然真的收到了回复👇

太长直接上谷歌翻译的结果👇

你好我亲爱的约翰逊,

首先,我祈祷上帝会满足你所有的内心渴望。愿您的生活充满欢乐,幸福,和平与成功。愿上帝永远保护并确保您的安全。非常感谢您的留言。我很高兴认识您,但上帝更好地了解您,他知道为什么此时他将我指引给您,所以请不要担心。我坚信,为这个神圣的计划与我联系,这是上帝的命运和完美的意愿。我写这封信给我内心深处的悲伤,我的名字叫英国的Ashli​​ng Hamza Faris夫人,出生于伦敦。

我之所以与您联系是因为我别无选择,只能告诉您,因为我被感动向您敞开心heart,我嫁给了在科特迪瓦工作了十多年的Gideon Hamza Faris先生。在他于2010年去世之前。我们结婚时没有孩子。他因短暂的疾病而死,仅持续了五天。

自从他去世以来,我决定不再再婚,当我已故的丈夫还活着时,他将460万美元(400,60万美元)存入了科特迪瓦的一家主要银行,目前这笔钱仍在银行。他使这笔钱可用于从科特迪瓦出口可可。

最近,我的医生告诉我,由于长期患乳腺癌,我不会持续两个月的时间。实际上,医生告诉我,我的寿命不得超过一个月零两个星期,并警告我不要再考虑谁将继承我。我已决定将这笔钱捐给特权较少的慈善机构和孤儿院。在听完新闻稿后,我做出了这个决定。这则新闻是关于一名100岁的老太太的消息,她死后秘密捐出了她的财产。


拜托,您将按照我在此处说明的方式使用这笔钱。我希望您将总资金的40%供您个人使用,同时60%的钱将捐给街头的慈善机构和帮助孤儿院。


我没有一个孩子会继承这笔钱,我的丈夫亲戚甚至都不是一个好孩子,因为他们要为我已故丈夫的死亡负责,因为我要拥有我所有已故丈夫的财产,而且我不希望我丈夫的财产为那些谋杀他的人所使用的努力。他们还想把我逼出去,因为我没有生孩子。我成长为一个孤儿,没有任何人作为家人,只是为了维护上帝的名。

我希望您将您的完整信息转发给我,以便我可以向银行发送推荐信,证明您是受益人。

1.您的全名:......................................。

2.电话号码:.......................

3.联系地址:......................

4.出生日期:......................................

5.性别:....................................

6.职业:.....................................

7国家....

收到上述信息后,我会立即致信银行,并将您的存款单据发送给您,我会给您银行联系人,以便您可以直接与银行联系以进行转帐。另外,如果可能的话,我会爱您前往银行见证索赔并转移自己,因为我不需要任何延误。

请从现在开始,只对自己盖章,以免在转账到另一个目的地时出错,所以您必须谨慎,如果有什么想知道的请问我。希望收到您的答复

再次感谢您,上帝保佑您。

依然祝福,

Ashli​​ng Hamza Faris夫人

 

实话说现在的诈骗真的是太离谱了,故事都能编得这么逼真。。。


2020.08.17

老妈子把五十岁生日过了,大热天做个生日可太难了。

老妈子许愿她儿能找个好工作,未来三年里能谈个npy。

尽力吧,读完书确实也老大不小了。


2020.08.13

最近KOF13解锁了好多角色的所有配色,做了个明日香配色的kula,saber配色的Elisabeth,其他的还真没有什么灵感。36个角色现在有21个角色颜色已经全部解锁,统一配了给白毛黑衣的格式服,试了那么多颜色,确实感觉白毛最好看,果然国内人均白毛控(kula可以配出异色瞳)

明日香配色的kula
saber配色的伊丽莎白

 

 

SNK确实恶趣味,伊丽莎白的另一个模式的配色太顶了

 

尤莉配色一看就是lsp了

 

异色瞳kula

 


2020.08.10

学到一个手算AUC特别简单的方法,把测试样本分成标签为0和1的两个集合A和B,随机从A, B中分别取一个样本,B中样本的预测概率比A中样本的预测概率大的概率就是AUC,简单的古典概型计算。

20200807DIGIX竞赛赛道A的两个题目数据集数据分析情况如下👇,第一题所有字段都是类别型的字段,实在是太坑了,多少给点线索,纯ID不就是怂恿人去做决策树DT和随机森林RF,虽然是出于保护用户隐私的目的,但是这样根本没有什么实际意义唉,有实际的文字信息就有更多的操作空间了。

第二题好一些,半数以上的字段都是相关度的数值型字段,还有一些类别型的字段,但是字段数实在太多了,大约是要做特征工程的,也难怪到现在才九个人参加.. 整就第一题直接套模型调参就完事了呗,榜一现在也还没有过0.8的AUC,还是有很大操作空间的。

第三题不打算看,PC机根本做不了这种数量级的任务,两个压缩包就有20多G。。不过倒是个不错的已标注的高质量数据集,以后总能用到

# 1. 竞赛信息获取链接
1. Advertisement CTR Prediction https://developer.huawei.com/consumer/en/activity/devStarAI/algo/competition.html#/preliminary/info/digix-trail-03/data
2. Search Ranking Prediction https://developer.huawei.com/consumer/en/activity/devStarAI/algo/competition.html#/preliminary/info/digix-trail-02/data
3. Digital Device Image Retrieval https://developer.huawei.com/consumer/en/activity/devStarAI/algo/competition.html#/preliminary/info/digix-trail-04/data


# 2. 数据清洗梳理
1. Advertisement CTR Prediction: 
  - 训练集6.38GB, 共计41907133条记录; 测试集157MB, 共计1000000条记录;
  - 训练集与测试集的字段总数为36, 其中有35个字段同时出现在训练集与测试集中: 
    + 训练集比测试集多出一个字段label, 零一取值, 表明用户是否点击了指定广告
	+ 测试集比训练集多出一个字段id, 依次取值为1~100000, 标注行数, 无实际意义
	+ 相当于训练集比测试集多一个label字段, 预测任务即预测测试集的label字段值
  - 训练集与测试集各个字段均无缺失值, 推定缺失值已经被填充为缺省值, 仍需后续处理
  - 数据字典:
    + label: 训练集已标注的标签, 零一取值, 表明用户是否点击了广告
    + uid: 用户id
	  * 训练集共计1081436个uid, 全部是7位正整数, 取值范围1000001-2237673
	  * 测试集共计410246个uid, 全部是7位正整数, 取值范围1000010-2237671
	  * 测试集中有90420个uid无法在训练集中找到, 占测试集uid总数的22.04%
	+ task_id: 广告任务id
	  * 训练集共计4329个task_id, 全部是4位正整数, 取值范围1001-5992
	  * 测试集共计2096个task_id, 全部是4位正整数, 取值范围1005-5989
	  * 测试集中有262个task_id无法在训练集中找到, 占测试集task_id总数的12.5%
	+ adv_id: 广告材料id
	  * 训练集共计5319个adv_id, 全部是4位正整数, 取值范围1001-7020
	  * 测试集共计2615个adv_id, 全部是4位正整数, 取值范围1007-7020
	  * 测试集中有269个adv_id无法在训练集中找到, 占测试集adv_id总数的10.29%
	+ create_type_cd: task_id的广告创新点id, 取值范围[2,3,4,5,6,7,8,9]
	  * 训练集create_type_cd字段各值的频率分布: \{2:0.71%,3:7.22%,4:1.87%,5:1.61%,6:14.99%,7:68.72%,8:4.48%,9:0.39%\}
	  * 测试集create_type_cd字段各值的频率分布: \{2:1.29%,3:7.53%,4:1.95%,5:1.55%,6:15.42%,7:68.37%,8:3.39%,9:0.49%\}
	  * 训练集与测试集上各值的频率分布基本一致, 其中值7的频率接近七成, 各值分布存在明显差异
    + adv_prim_id: task_id的广告发布者id
	  * 训练集共计101个adv_prim_id, 全部是3位正整数, 取值范围101-214
	  * 测试集共计85个adv_prim_id, 全部是3位正整数, 取值范围102-214
	  * 测试集中有15个adv_prim_id无法在训练集中找到, 占测试集adv_prim_id总数的17.647%
    + dev_id: 广告开发者id, 关联task_id
	  * 训练集共计55个dev_id, 全部是2位正整数, 取值范围11-72
	  * 测试集共计39个dev_id, 全部是2位正整数, 取值范围13-71
	  * 测试集中有1个dev_id(dev_id=45)无法在训练集中找到, 占测试集dev_id总数的2.5641%
    + inter_type_cd: adv_id的展示方式id, 取值范围[2,3,4,5]
	  * 训练集inter_type_cd字段各值的频率分布: \{2:0.57%,3:12.09%,4:9.41%,5:77.93%\}
	  * 测试集inter_type_cd字段各值的频率分布: \{2:0.00%,3:12.84%,4:12.16%,5:74.99%\}
	  * inter_type_cd字段训练集与测试集上各值的频率分布基本一致, 其中值7的频率超过七成, 各值分布存在明显差异, 测试集上仅一行inter_type_cd取值2
    + slot_id: 广告槽id, 取值范围[11,12,13,14,15,16,17,18,19,20,21,22]
	  * 训练集slot_id字段各值的频率分布: \{11:10.04%,12:21.72%,13:7.37%,14:6.07%,15:2.62%,16:11.19%,17:19.91%,18:7.01%,19:3.31%,20:0.17%,21:8.59%,22:1.99%\}
	  * 测试集slot_id字段各值的频率分布: \{11:9.93%,12:22.57%,13:7.06%,14:5.59%,15:2.50%,16:11.22%,17:20.18%,18:7.25%,19:3.21%,20:0.13%,21:8.40%,22:1.96%\}
	  * slot_id字段训练集与测试集上各值的频率分布基本一致, 各值分布相对均匀
    + spread_app_id: 发布task_id的应用软件id
	  * 训练集共计70个dev_id, 全部是2位正整数, 取值范围11-89
	  * 测试集共计53个dev_id, 全部是2位正整数, 取值范围11-89
	  * 测试集中有7个dev_id无法在训练集中找到, 占测试集dev_id总数的13.21%
    + tags: 发布task_id的应用软件标签id
	  * 训练集共计30个tags, 全部是2位正整数, 取值范围11-42
	  * 测试集共计19个tags, 全部是2位正整数, 取值范围11-41
	  * 测试集中的所有tags都可以在训练集中找到
    + app_first_class: 发布task_id的应用软件一级分类id, 取值范围[2,3,4]
	  * 训练集app_first_class字段各值的频率分布: \{2:21.47%,3:0.56%,4:77.97%\}
	  * 测试集app_first_class字段各值的频率分布: \{2:24.69%,3:0.24%,4:75.07%\}
	  * app_first_class字段训练集与测试集上各值的频率分布基本一致, 其中值4频率超过七成, 值3几乎为零, 各值分布存在明显差异
    + app_second_class: 发布task_id的应用软件二级分类id
	  * 训练集共计19个app_second_class, 全部是2位正整数, 取值范围11-29
	  * 测试集共计16个app_second_class, 全部是2位正整数, 取值范围11-29
	  * 测试集中的所有app_second_class都可以在训练集中找到
	  * 备注: app_second_class与app_first_class无从属关系, 以测试集为例有12个的app_second_class对应多个app_first_class
    + age: 用户年龄层次id, 取值范围[-1,1,2,3,4,5,6,7]
	  * 训练集age字段各值的频率分布: \{-1:0.27%,1:2.61%,2:3.03%,3:3.95%,4:20.74%,5:29.30%,6:24.95%,7:15.15%\}
	  * 测试集age字段各值的频率分布: \{-1:0.14%,1:0.22%,2:3.05%,3:3.98%,4:20.56%,5:30.41%,6:26.00%,7:15.64%\}
	  * age字段训练集与测试集上各值的频率分布基本一致, 各值分布相对均匀
	  * 备注: 推定-1为缺省值, 1-7对应从低到高的不同年龄层次
    + city: 用户居住城市, 取值范围[101,102,...444]共计334个城市
	  * 训练集与测试集上频率分布前10的city排序完全一致
	  * 训练集与测试集上频率分布前20的city集合大致相同
	  * 除前20的city外其他city频率均低于1%
	  * 占比最大的city为207, 训练集与测试集分别占比4.78%与4.65%
	  * 可以认为city字段训练集与测试集上各值的频率分布基本一致, 各值分布相对均匀
	  * 备注: 推定287为缺省值, 频率分布前10的city分别为[207,437,193,110,275,194,231,121,333,416], 推定为[上海,北京,广州,苏州,南京,杭州,武汉,深圳,成都,西安]
    + city_rank: 用户居住城市的级别id, 取值范围[2,3,4,5]
	  * 训练集city_rank字段各值的频率分布: \{2:0.90%,3:46.08%,4:18.44%,5:34.57%\}
	  * 测试集city_rank字段各值的频率分布: \{2:0.65%,3:46.66%,4:18.67%,5:34.02%\}
	  * city_rank字段训练集与测试集上各值的频率分布基本一致, 各值分布相对均匀
	  * 备注: 推定2为缺省值, 3-5对应从低到高的城市级别, 且city与city_rank存在从属关系, 即同一city仅对应一个city_rank
    + device_name: 用户手机型号id
	  * 训练集共计91个device_name, 全部是2/3位正整数, 取值范围11-104
	  * 测试集共计89个device_name, 全部是2/3位正整数, 取值范围12-104
	  * 测试集中有1个device_name(device_name=62)无法在训练集中找到, 占测试集device_name总数的1.1236%
    + device_size: 用户手机尺寸id
	  * 训练集共计225个device_size, 全部是3位正整数, 取值范围101-349
	  * 测试集共计142个device_size, 全部是3位正整数, 取值范围101-349
	  * 测试集中有2个device_size(device_name=250|283)无法在训练集中找到, 占测试集device_size总数的1.40845%
    + career: 用户职业id, 取值范围[2,3,4,5,6,7,8,9,10]
	  * 训练集career字段各值的频率分布: \{2:2.29%,3:3.13%,4:42.38%,5:4.45%,6:2.65%,7:2.40%,8:1.73%,9:40.77%,10:0.19%\}
	  * 测试集career字段各值的频率分布: \{2:2.37%,3:3.18%,4:42.19%,5:4.53%,6:2.69%,7:2.46%,8:1.78%,9:40.61%,10:0.20%\}
	  * career字段训练集与测试集上各值的频率分布基本一致, 值4与值9的占比分别超过四成, 各值分布存在明显差异
    + gender: 用户性别id, 取值范围[2,3,4]
	  * 训练集gender字段各值的频率分布: \{2:76.76%,3:1.23%,4:22.01%\}
	  * 测试集gender字段各值的频率分布: \{2:76.07%,3:1.15%,4:22.79%\}
	  * gender字段训练集与测试集上各值的频率分布基本一致, 各值分布存在明显差异
      * 备注: 推定值3为性别未知, 由值2占比远超值4, 推定女性为2, 男性为4
    + net_type: 当行为发生时网络状态id, 取值范围[2,3,4,5,6]
	  * 训练集net_type字段各值的频率分布: \{2:79.47%,3:20.04%,4:0.39%,5:0.08%,6:0.01%\}
	  * 测试集net_type字段各值的频率分布: \{2:78.60%,3:20.85%,4:0.45%,5:0.08%,6:0.01%\}
	  * net_type字段训练集与测试集上各值的频率分布基本一致, 各值分布存在明显差异
	  * 备注: 推定2-4对应网络状态从好到坏, 5和6为缺省值
    + residence: 用户居住省份id, 取值范围[11,12,...,46]共计36个省份
	  * 经过检查除了city为287的城市外, 其他所有city与residence存在从属关系, 即同一city仅对应一个residence
	  * 备注: 推定city值为287的城市为未知城市, 特别地, 该城市的city_rank为2, 同样推定为缺省值
    + his_app_size: 发布task_id的应用软件占存储空间大小id, 取值范围[-1,1,2,3,4,...,20]共计21个软件尺寸
	  * 训练集与测试集上频率分布前三的his_app_size为[-1,4,6], 其中值-1占比最大, 分别为21.47%与24.69%
	  * 除[-1,4,6]外其他取值的his_app_size外频率分布均低于10%
	  * 备注: 推定-1为缺省值, 占比最多说明无法获取his_app_size, 1-20推定为size从小到大
    + his_on_shelf_time: 发布task_id的应用软件已发布时间id
	  * 训练集共计有4个his_on_shelf_time, 取值范围[-1,1,2,3], 频率分布为[21.47%,0.01%,10.4%,68.12%]
	  * 测试集共计有3个his_on_shelf_time, 取值范围[-1,2,3], 频率分布为[24.69%,3.97%,71.34%]
	  * his_on_shelf_time字段训练集与测试集上各值的频率分布基本一致, 训练集上的值1认为是可忽略误差
	  * 备注: 发现his_on_shelf_time与his_app_size在取值-1的频率分布上完全一致, 统计发现完全成对出现, 同理推定为默认值, 1-3推定为时间从短到长, 1可能为最新上市的app, 频率极低可视为误差项
	+ app_score: 发布task_id的应用软件评分id, 取值范围[1,2]
	  * 训练集app_score字段各值的频率分布: \{1:21.52%,2:78.48%\}
	  * 测试集app_score字段各值的频率分布: \{1:24.89%,2:75.11%\}
	  * app_score字段训练集与测试集上各值的频率分布基本一致, 各值分布存在明显差异
	  * 备注: app_score可能是以某个阈值来作为评分依据, 模糊性太高
	+ emui_dev: EMUI版本id
	  * 训练集共计18个device_name, 全部是2位正整数, 取值范围11-28
	  * 测试集共计16个device_name, 全部是2位正整数, 取值范围12-28, 缺少13和22
	  * 测试集中的所有emui_dev都可以在训练集中找到
	  * emui_dev为20的数据行在训练集与测试集上均占五成以上, 排名第二的14不足两成, 再往后的排序分布训练集与测试集不再一致
	  * 备注: 数据集里的用户都是华为手机用户? 抑或值20是缺省值? 待定
    + list_time: 用户手机型号已发布时间id
	  * 训练集共计19个list_time, 取值范围[-2,17] - [0]
	  * 测试集共计16个list_time, 取值范围[-2,17] - [0,1,2,3]
	  * 值9频率分布最高, 训练集与测试集分布频率分别为17.35%与17.17%
	  * 值1, 值2和值3在训练集的频率分布低于0.005%
	  * 值-1与值-2的在测试集的频率分布分别为倒数第一与倒数第二, 训练集排除[1,2,3]后为倒数第一与倒数第三
	  * 备注: 推定值-1与值-2为缺省值与下架的手机型号
	+ device_price: 用户手机型号价格id
	  * 训练集共计8个device_price, 取值范围[-1,1,2,3,4,5,6,7], 频率分布[0.27%,4.60%,17.94%,21.42%,35.72%,20.01%,0.00%,0.04%]
	  * 测试集共计7个device_price, 取值范围[-1,1,2,3,4,5,7], 频率分布[0.14%,4.58%,18.01%,21.58%,35.86%,19.77%,0.06%]
      * device_price字段训练集与测试集上各值的频率分布基本一致, 训练集上的值6认为是可忽略误差
	  * 备注: 发现list_time与device_price在取值-1的频率分布上完全一致, 统计发现完全成对出现, 推定为默认值
	+ up_membership_grade: 服务会员级别id, 取值范围[-1,1,2,3]
	  * 训练集up_membership_grade字段各值的频率分布: \{-1:87.80%,2:12.09%,3:0.08%,4:0.03%\}
	  * 测试集up_membership_grade字段各值的频率分布: \{-1:88.07%,2:11.83%,3:0.08%,4:0.03%\}
	  * app_score字段训练集与测试集上各值的频率分布基本一致
	  * 备注: 推定-1为非会员或缺省值
	+ membership_life_duration: 会员生命周期id
	  * 训练集共计21个membership_life_duration, 取值范围[-1,1,2,3,...,20]
	  * 测试集共计13个membership_life_duration, 取值范围缺[1,4,6,8,10,11,15]
	  * 训练集与测试集上除值-1与值18外, 其余取值的概率分布均不足0.01%
	  * 该字段分布极不均匀, 值-1频率分布为99.84%, 值18分布14%, 训练集与测试集的分布几乎一致
	  * 备注: 推定-1为非会员或缺省值
	+ consume_purchase: 付费用户标签id, 取值范围[2,3,4,5,6,7,8,9,10]
      * 训练集consume_purchase字段各值的频率分布: \{2:87.57%,3:0.94%,4:0.10%,5:5.67%,6:0.16%,7:1.13%,8:0.67%,9:0.27%,10:3.49%\}
	  * 测试集consume_purchase字段各值的频率分布: \{2:87.85%,3:0.93%,4:0.09%,5:5.62%,6:0.17%,7:1.08%,8:0.65%,9:0.25%,10:3.37%\}
	  * 该字段分布极不均匀, 值2频率分布接近九成, 其余的各值分布普遍低于1%, 训练集与测试集的分布基本一致
	  * 备注: 推定2为非会员或缺省值
	+ communication_onlinerate: 手机活跃时间, 以小时计
	  * 该字段格式特殊, 为若干[0,23]内的正整数按照从小到大的顺序用"\^"拼接得到, 如"0\^3\^4\^5\^6\^22\^23"
	  * 该字段存在-1取值, 推定为缺省值, 训练集中值-1占比0.953%, 测试集中值-1占比0.723%
	  * 训练集共计3777种communication_onlinerate(包含-1), 测试集共计718种communication_onlinerate(包含-1)
	  * 备注: 这是该数据集中唯一一个非id类型的字段, 也是包含信息最多的一个字段, 计划分成24个字段分别表示一天24小时中每个小时时段是否活跃, 缺省值-1可以按照平均值填充      
	+ communication_avgonline_30d: 每日手机活跃时间id, 取值范围[-1,1,2,3,4,5,6,7,8,9,10,11,12,13]
      * 训练集communication_avgonline_30d字段各值的频率分布: \{-1:0.32%,1:0.03%,2:0.04%,3:0.14%,4:0.24%,5:0.37%,6:0.59%,7:1.01%,8:1.94%,9:4.84%,10:17.30%,11:28.90%,12:25.02%,13:19.26%\}
	  * 测试集communication_avgonline_30d字段各值的频率分布: \{-1:0.19%,1:0.02%,2:0.03%,3:0.12%,4:0.21%,5:0.33%,6:0.54%,7:0.98%,8:1.85%,9:4.66%,10:16.87%,11:29.18%,12:25.50%,13:19.52%\}
	  * communication_avgonline_30d字段训练集与测试集上各值的频率分布基本一致, 主要取值点为10-13
	  * 备注: 推定-1为缺省, 其余各数值越大代表活跃时间越长
	+ indu_name: 广告产业信息id
	  * 训练集共计38个indu_name, 全部是2位正整数, 取值范围11-52
	  * 测试集共计33个indu_name, 全部是2位正整数, 取值范围11-51
	  * 测试集中的所有indu_name都可以在训练集中找到
	+ pt_d: 行为发生所在日期id
	  * 训练集pt_d字段取值范围[1,2,3,4,5,6,7], 频率分布[14.98%,13.76%,14.51%,14.03%,14.02%,14.36%,14.34%]
	  * 测试集pt_d字段取值范围[8]
	  * 备注: 推定pt_d字段为自然月份或HUAWEI内部月, 考虑到训练集中1-7各值分布非常均匀, 大概率是后者, 因为数据集是在自然月的7月上旬发布的

2. Search Ranking Prediction
  - 训练集6.98GB, 共计6355374条记录; 测试集882MB, 共计条849674记录;
  - 训练集的字段数为365, 测试集的字段数364
  - 该数据集没有表头, 训练集比测试集多出的第1列取值范围是[0,1,2,3], 代表查询id与文档id的相关度, 值越大代表相关度越高, 其余364列训练集与测试集一一对应, 含义相同, 具体如下
    + 第2列: 查询id, 该值在训练集中是32位md5(中间有4个"-"号,共计36位), 测试集中为1-5位正整数
	+ 第3列: 文档id, 该值在训练集中是32位md5(中间没有其他符号,纯32位), 测试集中为1-6位正整数
	+ 第4-6列: 查询
	+ 第7列: 文本匹配-1
	+ 第8列: 时间-1
	+ 第9列: 文档-1
	+ 第10-11列: 网络图-1
	+ 第12-37列: 文档-2
	+ 第38列: 网络图-2
	+ 第39列: 文档-3
	+ 第40-47列: 文本匹配-2
	+ 第48列: 文档-4
	+ 第49-59列: 文本匹配-3
	+ 第60列: 时间-2
	+ 第61-62列: 文本匹配-4
	+ 第63-68列: 文档-5
	+ 第69列: 网络图-3
	+ 第70-78列: 文档-6
	+ 第79列: 时间-3
	+ 第80-156列: 文本匹配-5
	+ 第157-201列: 搜索意图
	+ 第202-221列: 文档-7
	+ 第222-233列: 页面结构分类
	+ 第234-245列: 站点分类
	+ 第246-275列: 根据标题(title)的内容分类
	+ 第276-305列: 根据主体(body)的内容分类
	+ 第306-335列: 根据链接源头文字(anchor text)的内容分类
	+ 第336-365列: 根据关键词(keyword)的内容分类	
  - 特别地, 4-201列为数值型字段, 202-365列为类别型字段

2020.08.09

还行,一天就好了。

蠢爆了,搞了一天数据没搞明白字段是什么意思,原来DIGIX竞赛数据集下载页面上是有数据字典的[Facepalm]

河图新歌《寻常传奇 · 梦中火》,前作是《寻常传奇 · 水上诗》,之前也有这种取名待遇的只有《金榜外 · 杯酒洗诗》和《金榜外 · 纸上尘埃》,个人觉得都是极佳的作品,近期最爱的作品还是《无会期》和《一夕光》


2020.08.08

倒霉透顶,空调吹得感冒发烧了。


2020.08.07

赛事转载(转载)

准备参加一下这个竞赛,主要参赛对象限于全日制学生,至少笔者现在经验上应该不会输大部分的本科生,而且很有趣的是这三个试题刚好笔者都有所涉猎:

  1. 赛道A的的第一题:广告CTR预测,应该算是比较常规的机器学习预测模型,最后是AUC的评价指标,再普通不过了,如果都是常规的方法肯定难以分高下,可能要在预处理和后处理上做文章了,而且像这种数据基本上没有办法找到其他合理的可用的数据源,不过笔者参加过ACM2019的那个广告点击预测,那个数据集倒是能参考参考,不过ACM2019倒是更贴近赛题A的第二题。
  2. 赛题A的第二题:搜索排序,这个刚好跟ACM2019几乎是一样的,不知道这里的搜索文档是什么,ACM2019是对酒店搜索的排序预测,评价指标也是ERR,跟第二题一样,可能会考虑参加这一题,因为ERR的最能分出胜负的,一般来说是很难达到0.5向上的,普通模型一般在0.2~0.3左右,模型预测结果提升一个等级就是0.2-->0.25-->0.33-->0.5的跨度,区分度是很明显的。不过ACM的数据集贴近赛题一,因为也是提供了用户设备,用户信息以及各种在网络上的操作流程(Session)信息,但是ACM2019的任务却和赛题二相近,都是排序预测,指标ERR,这就很有意思了。
  3. 赛题B:图像识别。这个刚好是导师wyl给的本科毕设的一个题目,当时wyl给了英文单词改错,英文语法改错,文本摘要,阅读理解,图像识别这五个方向,因为wyl觉得图像识别太难让三个学生同时做了这个题目,笔者没有选图像识别这个方向,不过就最后答辩的情况来看,三个人做得都不行,图像识别应该算是相当困难的一个任务了,而且没有任何经验,大概不会选这一题。不过实话说如果是为了涨涨知识选这个图像识别倒也不坏

可以单人参加,虽然已经错过了一个月的时间(学院的消息也太不灵通了),不过还有八月的大半个月和9月的前20天,刚好下周离职,虽然研一的压力很大,但是一应该不太会影响学习生活,以后真的跟了导师估摸着也没有时间再出来参加比赛了。

淦!还等什么,万一拿个奖金最少也有2000刀呢!虽然选手来自世界各地,评委像周志华这些都是响当当的大牛,总归比Kaggle上的那些竞赛的难度小多了。

微信推文如下👇

2020 DIGIX全球校园AI算法精英大赛于今日启动

江苏省人工智能学会

 

广聚全球校园精英 挑战智能算法极限

7月8日,由省人工智能学会、华为终端云服务、华为南京研究所联合主办的2020 DIGIX全球校园AI算法精英大赛正式启动。2020 DIGIX全球校园AI算法精英大赛在往届基础上对赛事规模、评委、激励三个方面都进行了升级。大赛邀请全球校园算法爱好者一起憧憬未来,探索未来,共同迎接数字时代的新挑战,解决世界性AI难题,构建万物互联的智能世界,为全球校园算法精英打造出一个竞技、创新、展示、交流的开放平台。

 

 

 

赛事介绍

 

大赛简介 

AI技术的进步,将驱动以智能终端为中心的全场景智慧体验全面升级。全球校园AI算法精英大赛邀请全球校园算法爱好者一起憧憬未来,探索未来,共同迎接数字时代的新挑战,构建万物互联的智能世界,为全球校园算法精英提供一个竞技、创新、展示、交流的开放平台。

赛事组织 

主办方:江苏省人工智能学会(JSAI)、华为终端云服务、华为南京研究所。

协办方:华为欧洲研究院、华为印度研究所、华为俄罗斯研究所、华为土耳其研究所、华为芬兰研究所、华为荷兰研究所。

奖项设置 

奖项

机器学习赛道

1)广告CTR预估

2)搜索相关性预测

计算机视觉赛道

数码设备图像检索

一等奖x130,000美金30,000美金
二等奖x115,000美金15,000美金
三等奖x110,000美金10,000美金
优胜奖x122,000美金2,000美金

 

 

 

大赛赛题

本次赛事有两个赛道,每支队伍可选择一个或两个赛道参与选拔赛,但每支队伍最终只能选择一个赛道的成绩入围精英赛;

 

赛道A:机器学习赛道

1)赛题一:广告CTR预测

广告CTR预估是计算广告领域的核心问题,提升CTR预估的准确率是提升广告效果的核心技术。


本题目是在真实付费展示广告场景下,借助算法从广告用户行为数据(如常驻城市/手机在线时段/行为发生时间等)、广告任务的基础属性(如创意类型/交互类型/广告主编号等)和用户的基础信息数据(如年龄/性别/设备信息等)三类合计40多个字段信息,多角度综合刻画用户对广告商品感兴趣的程度(点击概率)。参赛选手基于给定的训练数据构建CTR预估模型,并基于给定的测试数据集提交预测结果。比赛采用AUC(Area Under Curve)指标来评价比赛结果。


期望通过本次大赛发现计算广告算法领域的人才,推动CTR预估算法的发展。

 

2)赛题二:搜索相关性预测

搜索排序是搜索引擎的核心挑战问题:给定一个Query,系统能够基于文档和Query的相关性,将候选的文档做排序,展现给用户。提升排序的准确度能够极大提升移动用户的搜索体验。


本题目将为选手提供内容搜索场景下用于排序模型构建的训练数据,包括相关度标签、queryid、文档id以及其它6类合计约100个特征:网络图(如PageRank指标等)、Query(如核心词个数/搜索意图等)、文本匹配(如BM25得分/紧密度特征等)、文档(如正文长度、标题长度、URL长度等)、分档分类(如网站分类/是否首页等)及时间(如网页发布时间等)。参赛选手基于给定的训练数据构建排序模型,并基于给定的测试数据集提交预测结果。比赛采用ERR(Expected Reciprocal Rank)指标来评价比赛结果。


希望通过本次大赛发现搜索引擎排序算法的人才,推动搜索引擎排序算法的发展。

 

赛道B:计算机视觉赛道

 

赛题: 数码设备图像检索

精确的图像检索是拍照购场景下的核心技术,是学术界和工业界的研究热点。


本题目将向选手提供真实拍照购场景下用于数码设备图像检索的训练数据集,包含手机、智能穿戴、PC、平板、音箱、路由器等粗粒度数码设备图像和细粒度(如不同型号外观的手机等)数码设备图像,完成数码设备图像检索任务,即给定一张含有数码设备的查询图像,算法需要在数码设备库中查找并返回含有该商品的图像。比赛选手基于给定的训练数据构建并提交模型,比赛使用top-1检索准确率和mAP@10来评价比赛结果。


希望通过本次大赛发现图像检索算法领域的人才,推动该领域的发展。

 

 

赛制赛程

 

赛程安排 

 

报名和组队 

1、参赛资格

◆全球共16个国家和地区具有正式学籍的全日制本科及以上在校学生均可注册华为开发者联盟帐号后报名参赛。 可参赛国家和地区包括:俄罗斯、土耳其、中国、印度、荷兰、芬兰、德国、奥地利,瑞士、英国、爱尔兰、法国、西班牙、卢森堡、比利时、意大利。

◆华为与其关联公司的雇员及其直系亲属不具备参赛资格。

◆选手可单人参赛,也可组队参赛,队员属于同一个区域(详见参赛条款)时方可组队参赛。

2、组队说明

参赛队伍每支队伍包括参赛队员和指导老师(可选),指导老师必须是在校老师。每支参赛队伍人数不得超过3人;研究生和本科生可单独组队,也可混合组队。

组队规则:

1)每人只能参加一支队伍;

2)每支参赛队伍人数不超过3人(学生不超过3人,可以有一名指导老师);

3)每支队伍设置一名队长,队长负责团队管理(审核入队申请、删减队员),以及提交比赛结果;

4)队员可申请加入队伍,也可进行退出队伍的操作;

5)队员在队期间提交的成绩属于队伍成绩,如果某位队员中途退出队伍,该队员在队期间的成绩仍然有效并属于队伍成绩。

资格审查:

1)大赛组委会负责对参赛选手和队伍进行资格审查;

2)参赛选手必须是全日制在校学生;指导老师必须是全日制在校老师

3)评审时如发现参赛队员不符合参赛规定,立即取消参赛队伍的参赛或获奖资格;

 

 

大赛评委 

顾问:

 

姓名

学校

周志华

南京大学

Pascal Van Hentenryck(美国)

佐治亚理工学院

Giuseppe De Giacomo(意大利)

罗马萨皮恩扎大学

 

评委(按姓氏拼音排序):

姓名

学校

Ah-Hwee Tan(新加坡)

新加坡管理大学

Ethem Alpaydin(土耳其)

奥兹耶金大学

Friedhelm Schwenker(德国)

乌尔姆大学

Lev Utkin(俄罗斯)

圣彼得堡彼得大帝理工大学

白翔

华中科技大学

车万翔

哈尔滨工业大学

程明明

南开大学

黄萱菁

复旦大学

林宙辰

北京大学

刘淇

中国科学技术大学

刘知远

清华大学

卢策吾

上海交通大学

孟德宇

西安交通大学

吴飞

浙江大学

吴建鑫

南京大学

俞扬

南京大学

张敏灵

东南大学

张兆翔

中国科学院

朱军

清华大学

FAQs: 

1. 单人可以作为一支队伍参加比赛吗?

个人可以以单人为团队参加比赛,但每个人只限于加入一支团队。

2.比赛为什么需要专家审核?

选拔赛阶段专家审核是为了确保不会出现作弊的情况,保证比赛的公平性,同时为参赛者提供与业界领军者近距离沟通的机会,精英赛阶段比赛结果将由自动评估和专家审核两部分组成。

3.我可以既参加赛道A又参加赛道B吗?最后是否都可以入围决赛?

参赛队伍可以同时参加两个赛道的打榜,但是最终只可以选择一个赛道的成绩作为最终进入决赛的成绩。

4.参加精英赛阶段的流程是什么?主办方支付参赛费用吗?

精英赛期间在华为指定地点举行,参赛者需要提前一天报道然后进行为期3天的封闭竞赛,主办方将提供比赛场地、算法开发环境等。非本地选手在此阶段发生的交通、住宿费用由主办方支付。

5.我是否可以只提交模型测试样本,不提交源代码?

不能。比赛的交付物包括测试样本、算法实现说明书和算法模型源代码三部分组成。

 

报名入口 

大赛采用线上报名,请在规定时间内登陆大赛官网

digix.jsai.org.cn

完成个人信息的注册与审核

手机报名请点击下方图片或者长按识别二维码

欢迎国内外各高校学子踊跃报名参赛

 

 


2020.08.06

马不停蹄,5天学完了106节共计36小时时长的兄弟连Linux视频教程的手录markdown笔记详细摘要,https://caoyang.blog.csdn.net/article/details/107764736,入个门吧,虽然很多知识以后不一定用得到。

今天葛冬冬突然在公司群里问大家有没有看过《二十不惑》电视剧,里面那个周总的简历上写得是在上海杉树工作过,好像剧情里还招了SUFE的毕业生,葛冬冬直呼编剧是内鬼。然后CEO罗小渠随机下令把“上海杉树”的关键词给买下来,免费的宣传还不是天上掉馅饼。。

实话说在杉数做了半年,四个创始人都是Stanford的博士毕业,专业还刚好是管理,管科,风控和IT,公司氛围和治理理念确实不同于普通的创业公司,上海这边葛冬冬安享地利,拿到了SUFE科技园里的厂房,不仅工作环境宽敞,还配备了吧台,厨房和健身房,公司氛围活跃,虽然工作压力都很大,但是创业公司总归忙比闲要好得多,最近也拿下了与南航和匡威的项目,小米,MARS,百威等多个项目在七月八月即将完成结项,与富士康的项目还取得了一项软件著作权的注册。确实是发展的很快,不管怎么说创始人对于公司的影响确实是很大,我很难想象说如果四个Stanford毕业的博士发挥他们各自专业上的天赋与能力可以达到什么水平,很希望能看到杉数能最终在科创版上市的那天。

https://www.shanshu.ai/


2020.08.03

IPM结项在即,zkz晚上群里喊话,明天一定要把仿真报告做好,发出去就能再入账35W,各位加油啊!

可惜仿真跟我也没啥关系,今天办好倒数第二项任务,明天是最后一项任务,做好差不多就可以提辞了,说起来好梦幻,整整五个多月,竟然一次公司都没去过,一直在做远程,不过实话说还挺自在的。


2020.08.02

假期过半,体能恢复到20分钟4公里。

不想上学。

Linux笔记

# 1. 文件处理命令
## 1.1 命令格式与目录处理命令 ls
1. 命令格式: 命令 [-选项] [参数]
  - ls -la /etc
  - 个别命令使用不遵循此格式
  - 当有多个选项时, 可以写在一起
  - 简化选项与完整选项
    + -a 等价于 --all

2. ls: 列出路径下的内容
  - 路径: /bin/ls
  - 权限: 所有用户
  - 功能描述: 显示目录文件
  - 语法: ls [-ald] [文件或目录]
    + -a: 显示所有文件包括隐藏文件(以'.'开头的文件是隐藏文件,一般是系统文件不让碰)
	+ -l: 显示详细信息, 包括引用次数计数, 所有者(初始为创建者,可转让,永远只有1个), 所属组, 文件大小(默认单位是bit), 最后修改时间, 文件名
	+ -d: 查看当前目录详细属性而非目录下的信息
	+ -h: 一般是-lh, 可以使得-l显示的详细信息中的文件大小是K/M/G的单位
	+ -i: 查看目录下文件的id, 唯一标识符
  - 文件类型: ls -l输出的开头是 '-'是文件 'd'是文件夹 'l'是软链接
  - ugo: 所有者 所属组 其他人
    + rw- r-- r-- 是权限信息: r读w写x执行

## 1.2 目录处理命令: mkdir, cd, pwd
1. mkdir
  - 路径: /bin/mkdir
  - 权限: 所有用户
  - 语法: mkdir [-p] [目录路径1] [目录路径2] [目录路径3]...
    + -p: 递归创建, 好像这个dos命令里没有这个
	+ 同样dos是没有一次性生成多个目录的命令的

2. cd: 切换目录
  - shell内置命令
  - 权限: 所有用户
  - cd .. 回到上级目录
  - cd [路径] 切换到指定目录

3. pwd: 显示当前目录
  - 路径: /bin/pwd
  - 权限: 所有用户
  - 无需参数
	
4. rmdir: 删除空目录(基本无用的命令)
  - 路径: /bin/rmdir
  - 权限: 所有用户
  - 语法: rmdir [路径]
  
5. cp: 复制目录/文件
  - 路径: /bin/cp
  - 权限: 所有用户
  - 语法: cp [-rp] [文件或目录1] [文件或目录2] ... [文件或目录n] [目标目录]
    + -r: 复制目录
	+ -p: 保留文件属性, 如保持文件最后修改时间等
  - 可以同时复制多个文件或目录

6. mv: 剪切/重命名
  - 路径: /bin/mv
  - 权限: 所有用户
  - 语法: mv [文件或目录] [目标目录]
    + mv /tmp/japan/cangjing /root # 复制文件夹cangjing到/root下
	+ mv /tmp/japan/cangjing /root/nvshen # 把cangjing复制到/root下改名成nvshen
	+ mv cangjing canglaoshi 把cangjing文件夹的文件名改成canglaoshi
  - 与cp一样可以同时移动多个

7. rm: 删除目录/文件
  - 路径: /bin/mv
  - 权限: 所有用户
  - 语法: rm [-rfm] [文件或目录]
    + -rf: 强制删除
	+ -m: 删除目录
    + rm -rf /    # 删库跑路
	+ rm -rf /etc # 
  
## 1.3 文件处理命令
1. touch: 创建空文件
  - 路径: /bin/touch
  - 权限: 所有用户
  - 语法: touch [文件名1] [文件名2] ... [文件名3]
    + 不建议带空格的文件名以及目录名, 否则需要用双引号(同dos)

2. cat: 显示文件内容
  - 路径: /bin/cat
  - 权限: 所有用户
  - 语法: cat [-n] [文件名]
    + -n: 显示行号
	+ 不适合查看长文件, 只能查看最后一页

3. tac: 显示文件内容(倒序显示)
  - 路径: /bin/tac
  - 权限: 所有用户
  - 用法同cat

4. more: 分页显示文件内容
  - 路径: /bin/more
  - 权限: 所有用户
  - 用法: more [文件名]
    + 空格/f: 翻页
	+ Enter: 换行
	+ q: 退出

5. less: 分页显示文件内容(可以返回上一页)
  - 路径: /usr/bin/less
  - 权限: 所有用户
  - 用法: less [文件名]
    + 空格/f: 翻页
	+ Enter: 换行
	+ q: 退出
	+ pageup: 返回上一页
	+ 方向键↑: 返回上一行
	+ 搜索: 输入 /<关键词> 即可
	  * 按n可以获取下一处匹配
  - less应该可以完全取代more

6. head: 显示文件前几行
  - 路径: /usr/bin/head
  - 权限: 所有用户
  - 用法: head -n [行数] [文件名]
    + 显示文件的前20行: head -n 20 /etc/services
	+ 默认10行
 
7. head: 显示文件前几行
  - 路径: /usr/bin/tail
  - 权限: 所有用户
  - 用法: tail [-nf] [行数] [文件名]
    + 显示文件的末尾20行: tail -n 20 /etc/services
	+ -f: 动态显示文件末尾内容, 如果修改了文件内容会动态更新
	  * 如监控日志
	
## 1.4 链接命令
1. ln: 生成链接文件
  - 路径: /bin/ln
  - 权限: 所有用户
  - 语法: ln [-s] [原文件] [目标文件]
    + -s: 生成软链接, 不加选项是硬链接
  - 软链接就是快捷方式
	+ ls -l 显示的是lrwxrwxrwx, 这意味着所有用户对该软链接文件有所有信息
	+ 软链接很小, 本质上打开原文件
  - 硬链接
    + ls -l 显示的结果与原文件基本没有差别
	+ 硬链接与原文件会同步更新, 类似是一个备份
	+ echo "www.lampbrother.net" >> /etc/issue # 更新一个文件
  - 硬链接与软链接的区别:
    + 如果删除原文件, 软链接当然无效, 硬链接永远有效
	+ 使用ls -i查看标识符(i节点), 硬链接的i节点与原文件相同, 软链接则不同
	+ 其实硬链接用的非常的少, 类似git
	+ 硬链接不能跨分区目录: 如/tmp下的文件不能在/boot里创建硬链接, 软链接则可以
	+ 软链接文件的ls -l的开头是l, 硬链接与原文件相同

# 2. 权限管理命令
## 2.1 权限管理命令chmod
1. chmod: 更改文件权限/目录权限
  - 路径: /bin/chmod
  - 权限: 所有者和root
  - 语法1: chmod [{ugoa}{+-=}{rwx}] [-R] [文件或目录]
    + chmod u+x Janpanlovestory.list # 给所有者增加执行权限
	+ chmod g+w,o-r Janpanlovestory.list # 给所有组增加写入权限, 给其他人去除读取权限
	+ chmod g=rwx Janpanlovestory.list # 给所有组读取, 写入, 执行权限
  - 语法2: chmod [mode=421] [-R] [文件或目录]
    + 用整型数表示rwx: r:4,w:2,x:1
	+ rwx:7,rw:6, 即求和
	+ rwx-rw-x: 用761表示, 532表示rx-wx-x
	+ chmod 640 Janpanlovestory.list
    + -R表示是递归修改: 将目录下所有的子容器都修改权限
  - rwx权限深入理解:
    + r: 读取权限, 可以查看文件内容 | 可以列出目录中的内容
	+ w: 写入权限, 可以修改文件内容 | 可以在目录中创建删除文件
	+ x: 执行权限, 可以执行文件 | 可以进入目录

## 2.2 其他权限管理命令
1. chown: 改变文件或目录的所有者
  - 路径: /bin/chown
  - 权限: root, 即便是所有者也没有权限
  - 语法: chown [用户] [文件或目录]
    + chown shenchao fengjie # 将fengjie文件夹的所有者改为shenchao
2. chgrp: 改变文件或目录的所属组
  - 路径: /bin/chgrp
  - 权限: root, 即便是所有者也没有权限
  - 语法: chown [用户组] [文件或目录]
    + chown lampbrother fengjie # 将fengjie文件夹的所属组改为lampbrother
3. umask: 显示, 设置文件的缺省权限
  - 路径: shell内置命令
  - 权限: 所有用户
  - 语法: umask [-S]
    + -S: 以rwx形式显示新建文件缺省权限, umask -S即可
	+ umask 077 # 则新建的文件是
  - linux中默认新建文件对任何用户不会有执行权限, 因此即便用umask设置了执行权限实际也不会有的

# 3. 文件搜索命令
## 3.1 find命令
1. find: 文件搜索
  - 路径: /bin/find
  - 权限: 所有用户
  - 语法: find [搜索范围] [匹配条件]
    + find /etc -name init # 在目录/etc中查找文件init(必须精确的是init, 而非包含init)
	+ find /etc -name *init* # 在目录/etc中查找文件init(包含init即可,*为通配符匹配任意数量字符)
	+ find /etc -name init* # 在目录/etc中查找文件init(以init开头)
	+ find /etc -name init??? # 在目录/etc中查找文件init(以init开头且后面是3个字母, ?为通配符匹配单个字符)
	+ find /etc -iname init # 不区分大小写的查找init
	+ find /etc -size +204800 # 查找大于100MB的文件: 注意linux系统每个数据块是0.5k, 因此100MB等于204800个数据块
	  * +n: 大于
	  * -n: 小于
	  * n: 等于, 极少使用
    + find /etc -user shenchao # 查找所有者为shenchao的文件
    + find /etc -cmin -5 # 在/etc下查找5分钟内被修改过属性的文件和目录
	+ find /etc -amin -5 # 在/etc下查找5分钟内被访问过的文件和目录
	+ find /etc -mmin -5 # 在/etc下查找5分钟内被修改过内容的文件和目录
	  * +5 -5 5 同 -size的意思
	+ find /etc -size +163840 -a -size -204800 # 80MB~100MB的文件
	  * -a: 表示and
	  * -o: 表示or
	+ find /etc -name inittab -exec ls -l {} \; # 在/etc下查找inittab文件并显示详细信息
	  * -exec/-ok [命令] {}\; 对搜索结果执行操作, {}是把之前的结果放进来, \是转义符, ;是结束
	+ 
	+ find /etc -type f # 只查找文件
	+ find /etc -type d # 只查找目录
	+ find /etc -type l # 只查找软链接
	+ find . -inum 31531 -exec rm {} \; # 在当前目录下查找i节点是31531的文件并删除
	  * 用inum可以查找当前文件的所有硬链接
	
## 3.2 其他文件搜索命令

## 3.3 帮助命令

## 3.4 用户管理命令

## 3.5 压缩解压命令

# 网络命令


# 关机重启命令



2020.07.30

前几天看到B站居然买了《猫眼三姐妹》,看了几集就停不下来了,三十多年前的动画无论作画还是剧情都不输今天,实在是良心作品。弹幕里一个个都是来回味童年的,我估摸着正经人的童年谁看这个啊[笑],还不都是趁父母不在偷偷看一些片段,有几个能把整部都看过的。。。


2020.07.28

yy问我有没有做过百度指数的爬虫,我试了试发现非常困难,因为canvas上的数据都被加密了,研究了一天找不到加密逻辑的JS是写在哪里了。然后在Github上找到了一个不用浏览器驱动做的爬虫,看了看别人写的,其实加密逻辑还挺简单的,就是找不到,JS逆向是真的好难,现在还是处于很菜的阶段,完全就是去碰运气,浏览器上断点调试什么的策略一直不知道该怎么做。这东西还是得靠经验。


2020.07.27

wyl邀请我研究生阶段进他的团队,以后主要在机器学习的大方向上,团队里不少都是做文本挖掘的,一想到以后就只能在研究方向上一天到晚啃论文做实验就真的头大。

总想什么都学一点,可是自己也不年轻了,最近IPM项目的着重点在可视化上,新来的同事陈正宇刚毕业就入职,现在担任PBI方面的工作,真的好厉害,一毕业就会PBI,很想把POWER BI这个数据可视化的东西也学一学,主要感觉PBI还挺有意思的,以后从事数据方面的工作很可能会用得到。

读研有啥好的,都是跟风罢了,哪有那么多学术天才,都是学术垃圾罢了,之前我去杉数面试,面我是个复旦的博士,他就跟我说,他觉得自己不适合学术,所以就来杉数了。

明早再给wyl回复吧,本来我也打算问问wyl还收不收硕导,毕竟是个正教授,手下基本都是些直博和博士,跟着也不寒碜。我记得管科那边很多都是研究员或者助理教授带的硕士。毕设也是wyl找我做的他出的题,最后我拿到了最高分完美收官,我估摸着去找他做导师他应该不会拒绝。现在他都来主动找我了,我也省了事,只怕接下来有的忙了,跟着正教授做恐怕压力会很大。杉数这边zkz还不放我走,学校又有新的活要整。

日子也就这么过了,其实我也已经很久不碰人工智能了,毕业前yy跟我说,人工智能,有多少人工就有多少智能,确然如此,我总是觉得学计算机还是学点实在的东西靠谱。

[敲脑袋] 还真是社畜思维


2020.07.25

上周心血来潮,想去把差不多快一年没登的yk账号给申诉回来。之前退坑的时候把手机邮箱都解绑了,然后用爬虫随机设了一段密码,又没有实名认证,确实是想尽办法也不能找回密码了,只得去试试申诉,还找到了两三年前的充值订单号作为申诉依据。

结果申诉失败,意外发现有人居然拿我手机号注册了yk账号,我人都傻了,于是我直接给这货的账号改了个随机密码,然后把我的手机给解绑了。

不要沉迷游戏,笔者就是这么一个做好事不留名的人。


2020.07.22

写了一套波草奈落起手的鬼胧四循环BC的脚本,虽然很帅气,但是伤害是真的感人。13的两个草剃都一样,连段要什么伤害,帅就完事了。


2020.07.21

opencv告一段落,没有切实的项目需求,纸上谈兵难以切实掌握。

重拾Linux,兄弟连的沈超跟李明确实讲得太好了,感觉两个人就是那种到了三四十岁还能跟二十岁左右时一样称兄道弟无所不谈的兄弟,让我实在是羡煞不已。

终于知道为什么这两天群里贼安静了,直到傍晚zkz在群里发了一份将近100页的纯英文User Manual,太顶了。


2020.07.20

opencv可以直接操控笔记本的摄像头。

interval = 60															 # 捕获图像的间隔(单位/秒)
num_frames = 500														 # 捕获图像的总帧数
out_fps = 24															 # 输出文件的帧率
cap = cv2.VideoCapture(0)												 # VideoCapture(0)表示打开默认的相机
size = (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),
		int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))						 # 获取捕获的分辨率
video = cv2.VideoWriter("video.mp4",cv2.VideoWriter_fourcc("M","P","4","2"),out_fps,size)	# 设置要保存视频的编码, 分辨率和帧率
for i in range(42): cap.read()											 # 对于一些低画质的摄像头, 前面的帧可能不稳定, 略过

# 开始捕获,通过read()函数获取捕获的帧
try:
	for i in range(num_frames):
		_,frame = cap.read()
		video.write(frame)
		# 如果希望把每一帧也存成文件,比如制作GIF,则取消下面的注释
		# filename = "{:0>6d}.png".format(i)
		# cv2.imwrite(filename,frame)
		print("Frame {} is captured.".format(i))
		time.sleep(interval)
except KeyboardInterrupt:												 # 提前停止捕获
	print("Stopped! {}/{} frames captured!".format(i,num_frames))
video.release(),cap.release()											 # 释放资源并写入视频文件

今日POST

终于出太阳,大概是出梅了罢。时间过的好快,一晃三分之一的暑假就过去了。


2020.07.17

opencv,感觉这个包很值得一学。

# -*- coding: UTF-8 -*-
# @author: caoyang
# @email: CaoYang@163.sufe.edu.cn


# cv2教程链接:
# https://www.cnblogs.com/shizhengwen/p/8719062.html

import cv2
import numpy as np

image1 = cv2.imread("1.jpg",cv2.IMREAD_COLOR)

# 1. 读取图像文件: imread
'''
print(cv2.IMREAD_COLOR)													 # 1: 默认值, 以RGB全彩图读入, 忽略alpha通道
print(cv2.IMREAD_GRAYSCALE)												 # 0: 以灰度图读入
print(cv2.IMREAD_UNCHANGED)												 # -1: 完整读入原图, 包括alpha通道

image1 = cv2.imread("1.jpg",cv2.IMREAD_COLOR)							 # 全彩图
image2 = cv2.imread("1.jpg",cv2.IMREAD_GRAYSCALE)						 # 灰度图
image3 = cv2.imread("1.jpg",cv2.IMREAD_UNCHANGED)						 # 完整图

print(image1.shape)														 # (1407,1000,3)
print(image2.shape)														 # (1407,1000)
print(image3.shape)														 # (1407,1000,3)
'''

# 2. 显示图像: imshow
'''
cv2.imshow("image1",image1)
cv2.waitKey(0)															 # 防止一闪而过
cv2.destroyWindow("image1")												 # 销毁image1窗口	
cv2.imshow("image2",image2)
cv2.waitKey(0)															 # 防止一闪而过
cv2.destroyWindow("image2")												 # 销毁image2窗口	
cv2.imshow("image3",image3)
cv2.waitKey(0)															 # 防止一闪而过
cv2.destroyWindow("image3")												 # 销毁image2窗口	
cv2.destroyAllWindows()													 # 销毁所有窗口
'''

# 3. 保存图像: imwrite
'''
print(cv2.IMWRITE_JPEG_QUALITY,type(cv2.IMWRITE_JPEG_QUALITY))			 # 1 int
print(cv2.IMWRITE_PNG_COMPRESSION,type(cv2.IMWRITE_PNG_COMPRESSION))	 # 16 int

cv2.imwrite("image1.png",image1,[cv2.IMWRITE_JPEG_QUALITY,95])
cv2.imwrite("image2.png",image2,[cv2.IMWRITE_PNG_COMPRESSION,9])
cv2.imwrite("image3.png",image3,[cv2.IMWRITE_PNG_COMPRESSION,9])
'''

# 4. 图片操作
## 4.1 翻转图像: flip
'''
image4 = cv2.flip(image1,0)												 # x轴翻转
image5 = cv2.flip(image1,1)												 # y轴翻转
image6 = cv2.flip(image1,-1)											 # 中心对称翻转

cv2.imshow("image4",image4)
cv2.waitKey(0)															 # 防止一闪而过
cv2.destroyWindow("image4")												 # 销毁image4窗口	
cv2.imshow("image5",image5)
cv2.waitKey(0)															 # 防止一闪而过
cv2.destroyWindow("image5")												 # 销毁image5窗口	
cv2.imshow("image6",image6)
cv2.waitKey(0)															 # 防止一闪而过
cv2.destroyWindow("image6")												 # 销毁image6窗口	
cv2.destroyAllWindows()													 # 销毁所有窗口
'''

## 4.2 颜色空间转换: cvtColor
'''
image8 = cv2.cvtColor(image1,cv2.COLOR_RGB2GRAY)						 # RGB转GRAY
image9 = cv2.cvtColor(image8,cv2.COLOR_GRAY2RGB)						 # GRAY转RGB: 不会便咸亨全彩图的, 只是增加一个通道

cv2.imshow("image8",image8)
cv2.waitKey(0)															 # 防止一闪而过
cv2.destroyWindow("image8")												 # 销毁image8窗口	
cv2.imshow("image9",image9)
cv2.waitKey(0)															 # 防止一闪而过
cv2.destroyWindow("image9")												 # 销毁image9窗口	
'''

## 4.3 给图片添加本文: putText或者
'''
image10 = cv2.putText(image1,"huakaiyilvbo",(100,100),cv2.FONT_HERSHEY_DUPLEX,3,(0,0,0),2)
cv2.imshow("image10",image10)
cv2.waitKey(0)															 # 防止一闪而过
cv2.destroyWindow("image10")											 # 销毁image8窗口
'''

## 4.4 画图
'''
np.set_printoptions(threshold=1)
image11 = np.zeros((512,512,3),np.uint8)								 # 创建一个宽512高512的黑色画布
cv2.line(image11,(0,0),(311,511),(255,0,0),10)							 # 画直线: 图片对象, 起始坐标(x轴,y轴), 结束坐标 , 颜色, 宽度
cv2.rectangle(image11,(30,166),(130,266),(0,255,0),3)					 # 画矩形: 图片对象, 左上角坐标, 右下角坐标, 颜色, 宽度
cv2.circle(image11,(222,222),50,(255.111,111),-1)						 # 画圆形: 图片对象, 中心点坐标, 半径大小, 颜色, 宽度
cv2.ellipse(image11,(333,333),(50,20),0,0,150,(255,222,222),-1)			 # 画椭圆形: 图片对象, 中心点坐标, 长短轴, 顺时针旋转度数, 开始角度(右长轴表0度, 上短轴表270度), 颜色, 宽度
pts = np.array([[10,5],[20,30],[70,20],[50,10]],np.int32)				 # 画多边形, 指定各个点坐标,array必须是int32类型
pts = pts.reshape((-1,1,2,))											 # -1表示该纬度靠后面的纬度自动计算出来, 实际上是4
cv2.polylines(image11,[pts],True,(255,255,0),5)						 	 # 画多条线: False表不闭合, True表示闭合, 闭合即多边形
cv2.putText(image11,"OpenCV",(10,400),cv2.FONT_HERSHEY_SCRIPT_COMPLEX,3.5,(255,255,255),2)
cv2.imshow("image11",image11)
cv2.waitKey(0)
cv2.destroyAllWindows()
'''

## 4.5 缩放,裁剪,补边

image12 = cv2.resize(image1,(200,200))									 # 缩放成200x200的方形图像
cv2.imshow("image12",image12)
cv2.waitKey(0)
cv2.destroyAllWindows()

image13 = cv2.resize(image1,(0,0),fx=0.5,fy=0.5,interpolation=cv2.INTER_NEAREST) # 注意只要不赋值第二个参数(即(0,0))就可以指定缩放比例, INTER_NEAREST意为相邻插值
cv2.imshow("image13",image13)
cv2.waitKey(0)
cv2.destroyAllWindows()

image14 = cv2.copyMakeBorder(image1,50,50,0,0,cv2.BORDER_CONSTANT,value=(0,0,0)) # 给图片加一条黑边
cv2.imshow("image14",image14)
cv2.waitKey(0)
cv2.destroyAllWindows()

image1[20:150,-180:-50]													 # 图片裁剪

选了一张手绘的松前绪花当成1.jpg👇

 


2020.07.15

百忙之中zkz问我还能hold多久,我反问你还想让我hold多久,她说再干一个月成不?我:???

今天看了一个百度数据分析岗的面试录像,全问的java,数据结构,多线程,hashmap,hadoop,spark,spring的东西,除了spark是近期一直在做的事情,其他全部一窍不通,真的很想把java捡起来,但又觉得想要面面俱到实在太困难,已经选了python大概不会中途转行了,最多是达到熟悉的程度,很难说再精通一门语言了。趁年轻多学点东西,实习做长了真的挺浪费时间。

给自己打个广告https://blog.csdn.net/CY19980216/article/details/107306712,我说你们光收藏不点赞让我很难受啊!收藏又不能给我加积分,我还等着升到LV7再白嫖CSDN点东西呢。


2020.07.14

新写的博客一日10收藏1点赞,流下了不争气的眼泪,搞得我在ghs似的。

jdr问我是不是要离职了,我也好想抽空溜了离职,可是每天都会有新的bug要改,改到哪年是个头唉。

jdr意思说太好了,“你可不能跑路,你跑了那几千行代码我可搞不明白”。

还是先做着吧,虚拟机都装好了,可是PC机的状态一日不如一日,现在的情况是万万恢复不得之前的备份,Linux的事情只能先搁置了。

很害怕开学的时候发现自己又是一无所有,新的起点又是从白手起家开始干,从几乎由零开始的大学四年走到今天,吃尽了没有技术的亏,至少这两个月我有能力也有时间去自由地选择我想从事的方向。


2020.07.13

尝试写KOF13火八无限葵花的脚本,本以为脚本打出无限葵花还不是手到擒来,昨天到今天结果调了不知道多久放帧的时间,连一循环都打不出来,只能做到葵花两段八稚女取消接大升龙,无限葵花的放帧点一直get不到,崩溃。转而去写红丸的无限空雷,也写不出来,一直在测试4426A的无限空雷,但是44后撤步一直在后退,根本无限不了,然后才知道还有269A的无限空雷,试了试,倒也还行,能打出几次。这些高难度连段还是放弃了,只能去写点简单的连段。

不过有一种想法,想把每个角色的出招表的脚本全部写出来,这样以后想测试连段直接去调用就可以了,刚把所有角色的文件夹创建好,什么脚本也没有写,但愿有一天能把每个角色的出招表都写出来,这辈子我这手残的水平是不可能打好拳皇的了,只能试着去做TAS之类的东西了,不过我倒是知道了该怎么写一键升龙,一键出招的方法,用python都可以简单实现。


2020.07.12

KOF13天狗和馆长,真的是人间性能,我这种菜比第一次天狗实战就反三,无脑JCD就完事了。

准备抽空写个脚本过MISSION,键盘手残党每个角色基本只能完成两关,几个熟练些的能过4~5关,碰到蓄力,反摇拉前的投技和BC连就直接扑街了。

logging使用

import logging

log_format(level='info')
logger = spark._jvm.org.apache.log4j
logging.getLogger("py4j").setLevel(logging.WARNING)
log_format(level='info')

spark.sparkContext.setLogLevel("ERROR")
# 日志配置
log_format()
logging.getLogger("py4j").setLevel(logging.WARNING)

2020.07.11

IPM上线,但是我依然跑不掉,预处理和后处理全部都是我写的,出问题还得找到我头上

zkz昨晚零点一刻下班还去健身,是个狼人。

熬夜整了个活,中国建设银行网上银行云宠物自动喂食脚本,好累,希望周末能睡两天安稳的午觉回回状态,这几天每天都坚持平板跟长跑,但是耐力却下降了,本来平板都能做到4分钟了,现在又掉到3分钟的水平,怎么想也是熬夜的错。


2020.07.08

zkz告诉我她昨晚在公司加班,碰到葛冬冬正好回公司办事,葛冬冬问zkz几个实习生怎么样,zkz说她给我说了不少好话。葛冬冬表示很惊奇,说cy上课吊儿郎当的,不认真听课,看不出来还很靠谱。

后来zkz让我离职后小心被葛冬冬抓来做苦力,她说葛冬冬已经盯上你了。

我就说嘛,像我这样能力出众的壮劳力,打着灯笼你也找不到,这次是送货上门了(原谅我小小地自满一波)。

好了好了,自吹自擂,然而项目还有很多问题要fix,好累啊。。。。。。


2020.07.07

加到凌晨一点,刚刚准备收工,结果发现键盘上的“D”键突然脱落了,安了半天才安回去。

冥思苦想了很长时间不明白为什么是"D"键会脱落,看了看键盘膜明显是S和K还有Ctrl破损的最厉害(老拳皇玩家了),难道还是我升龙凹多了。。。按道理D不是敲击次数最多的按键才对,虽然老笔记本已经坚挺了四年了。。。

第一感是S按的多,不只是打拳皇的原因,而且码字经常要按Ctrl+S,s本来也在python里算是比较常用的字母

正文开始,总结一下今天的一个大坑:

spark可能默认不支持笛卡尔积,需要手动开启这个功能👇(报错)

org.apache.spark.sql.AnalysisException: Detected implicit cartesian product for INNER join between logical plans 检测到在做笛卡尔积

 需要设置👇

spark.conf.set("spark.sql.crossJoin.enabled","true")

其实这个事情挺有意思的,我并没有写笛卡尔积,因为我试了半天join函数的how参数设为full, fullout, cross都一直报错,主要不知道on该怎么写(垃圾小菜不好好学SQL,到今天才知道除了左右内全四个连接,还有左外,右外,交叉,全外,左半,右半这些连接方式。。。真是涨姿势了),然后我灵机一动,发现可以用左连接实现笛卡尔积👇

df1 = sqlContext.range(5)
df1 = sqlContext.range(2)


df1.select("id",F.lit(1).alias("join")).join(df2.select("id",F.lit(1).alias("join")),on="join",how="left")

 即给各自添加一个字段join,并设为常数,再左连接在join字段上即可,结果这竟然可以被spark识别为是笛卡尔积,果然spark是奇葩中的奇葩,这也能看出来是cross连接吗。。。我写的是left啊!!!


2020.07.05

黑色周末,今天从早上九点加班到晚上十二点,极其离谱,中间除了两顿饭一个午觉就是马不停蹄地在赶,十一点半还没到我就已经困得不行了,zkz跟我说她烧了个水,三分钟睡着三次,实在是太伤了。

临近结项确实也没有办法,一期快结项的时候差不多也是这样,本来打算在七月上旬离职,现在显然是已经无路可退了。

但愿熬过下周五天能顺利结项。晚安。


2020.07.02

项目延期,得多熬一周了。

科大讯飞开放的免费试用手写识别三个月10W次服务量,实在是良心,我的建行云宠物OCR脚本基本已经完成了,抽空记录一下


2020.06.30

补完《花开伊吕波》,PA社的作品也许只看过《TARI TARI》和花开物语,给人的感觉就是再小的故事也能写得细致,再宏大的格局也能丝滑流畅。总之花开伊吕波无愧为神作,和被奉为经典的《白色相簿2》相比,花开物语应该是全方位的碾压。

相比于芳文社大都是没有剧情的百合日常,京都动画的精美画风,优雅展开与收尾;PA社兼具两者之长,画风优雅,对主角与配角乃至龙套角色的绘制都是极其优美,日常的剧情中却能对每个人物的进行鲜明细致地刻画,推动引人深思展开,观看过程往往很轻松,结束后却有总会有沉重的共鸣。

PS:今日操作系统的网课听完,预备知识补充了一下,接下来正式进军Linux。不过近期准备抽空做个OCR任务,关于建行网上银行里的那个云宠物输数字的脚本。


2020.06.29

人的本性就是喜欢对别人,尤其是年龄相对接近,的事情津津乐道。fym事件不置可否,没有了解到全部的真相就无权做任何评论,何况上升到学校。

IPM最后一周想必不会很好过,昨天就遇到很多恶心的问题。

pyspark后处理引出的另一个问题就是无法在逻辑处理部分进行try except的异常抛出,因为后处理时所有逻辑是一个整体,不能只对局部异常进行抛出。

今日又一个未解之谜,节前写的一个函数没有报错,现在运行会报错,排查后又是一处join后的结果不能display,大概是遇到了和之前相似的问题。然后整了半天搞不明白哪里不行,阴差阳错的把这个左连接改写成右连接就跑通了👇

以后能不写pyspark就不写pyspark,如果能重来一次,我一定好好学java。垃圾pyspark毁我时间。

可是这次还是没有彻底搞明白这个问题,下次再碰到可咋整。。。。。。。。。


2020.06.27

在学校呆了40天不到,昨天回来继续按照原来的四公里路线跑步,发现竟然连1.5公里都坚持不到就不行了。心想也许是昨天走了背着大包小包走了一天路脚酸的不行,而且昨晚也很热,板鞋弹性也不好,跑了不到一公里就脱水了。

今天下午午觉后趁雨停,换了双好点的鞋子又去跑了一遍,结果毫无长进。硬撑着断断续续跑了2.5公里。

花了近四个月才练出的耐力,虽然在学校训练量很少,每天只做三分钟平板支撑和1200下的高抬腿,只有周末不加班才会去操场跑几圈,结果回来立刻打回原型,实在是太真实了唉。没办法,只好从头练起了,希望月底前能恢复到两公里以上的水平。

PS:才想起来前几天yc跟我说SOE又有一个大瓜,我不看朋友圈也没在意,今天在学校微博下面的评论中看到一堆小三,还有很多污秽不堪的言语,一一举报了之后才想起来还有这件事。

想着上次的qfs还没过多久,到底是哪个神仙又来搞事情。用cc的号查了查fym的信息,绩点不高,毕业论文一塌糊涂,也许是个学生会主席吧(我哪知道)。一个个四年里本事没学到多少,拼了命的想往券商四大里钻,但凡多学点技术不至于动这些歪脑筋。

人各有志,追求不同,又有什么好说的呢?

顺带发现居然可以查到每个人的毕业论文题目,查了几个,ss写的图神经网络在信贷风控的用途(居然也写了95分,确实厉害,GNN这块应该是将来Deep Learning的一大研究热点,因为GNN是可以有推理能力的),两个会计的同学写的都是我看不懂的题目...,金融的lth写的倒还正常,离谱的是sxy居然写的猪肉价格和生猪的关系(这是怎么想到要写这个话题的[汗])。


2020.06.26

如果顺利的话下周IPM结项,实习告一段落。暑假最好能达到熟练使用Linux的水平,不管怎么说,走软工的路就得在技术上面面俱到了。


2020.06.24

@echo off
echo 请勿关闭本窗口
echo 正在清除系统垃圾文件...
del /f /s /q %systemdrive%\*.tmp 
del /f /s /q %windir%\prefetch\*.* rd /s /q %windir%\temp & md %windir%\temp
del /f /s /q "%userprofile%\Local Settings\Temp\*.*"
del /f /s /q %systempdrive%\*._mp
del /f /s /q %windir%\*.bak
del /f /s /q %systempdrive%\*.log
del /f /s /q %systempdrive%\*.gid
del /f /s /q %systempdrive%\*.chk
del /f /s /q %systempdrive%\*.old
del /f /s /q %systempdrive%\recycled\*.*
del /f /q %userprofile%\cookies\*.* 
del /f /q %userprofile%\recent\*.* 
del /f /s /q %userprofile%\recent\*.* 

echo 清除系统垃圾完成
pause >nul

准备等到最后一天再走,大概明晚楼里就只有我一个人了。

hy也许还是会选择KP,实话说本科毕业就能找个KP的咨询岗,如果没什么学术追求还读什么研。我一直觉得投研这行华而不实,总不如会计师事务所来得实在。

数了数自己的行李,寄存一个箱子,一个行李袋,一袋被子;自己带走一个箱子,一个书包,还真是轻装简行。

至少走的时候还是学生的心态,以后大概再没有这么轻松的心情了。

一如既往的悲观


2020.06.23

DDL确实永远是第一生产力,数据部分延期了整整两周,算法部分zkz竟然给硬生生的给拽回来了。

取证宣告毕业。


2020.06.21

DOS指令之Ping

# Ping命令
1. ping www.baidu.com
  - 通过结果中的TTL可以看出服务器系统
  - 可以看出百度服务器的IP地址
2. ping自己的网关
  - ping 192.168.1.1
3. ping -t www.baidu.com
  - 连续不停的ping百度
4. ping -n www.baidu.com
  - 返回的数据包大小
5. ping -l www.baidu.com
  - 限制发送缓冲区的大小(设小就会多发几次包)
6. ping -a 192.168.1.7
  - 通过ping IP地址获取主机地址(比如返回CaoYang)

'''
所有的ping指令
    -t             Ping 指定的主机,直到停止。
                   若要查看统计信息并继续操作,请键入 Ctrl+Break;
                   若要停止,请键入 Ctrl+C。
    -a             将地址解析为主机名。
    -n count       要发送的回显请求数。
    -l size        发送缓冲区大小。
    -f             在数据包中设置“不分段”标记(仅适用于 IPv4)。
    -i TTL         生存时间。
    -v TOS         服务类型(仅适用于 IPv4。该设置已被弃用,
                   对 IP 标头中的服务类型字段没有任何
                   影响)。
    -r count       记录计数跃点的路由(仅适用于 IPv4)。
    -s count       计数跃点的时间戳(仅适用于 IPv4)。
    -j host-list   与主机列表一起使用的松散源路由(仅适用于 IPv4)。
    -k host-list    与主机列表一起使用的严格源路由(仅适用于 IPv4)。
    -w timeout     等待每次回复的超时时间(毫秒)。
    -R             同样使用路由标头测试反向路由(仅适用于 IPv6)。
                   根据 RFC 5095,已弃用此路由标头。
                   如果使用此标头,某些系统可能丢弃
                   回显请求。
    -S srcaddr     要使用的源地址。
    -c compartment 路由隔离舱标识符。
    -p             Ping Hyper-V 网络虚拟化提供程序地址。
    -4             强制使用 IPv4。
    -6             强制使用 IPv6。
'''

好颓废,每次快离校就做不成任何事情,除了玩。


2020.06.20

开始学习DOS指令,没有什么特别系统的教程,只好学一点是一点。下午zkz 1V1 聪哥,又整出一堆问题,搞不好明天还得加班。

# 内部命令与外部命令
1. wget: 可以用于下载URL对应的资源
2. @echo off: 关闭回显(即命令行自身的显示功能)
3. @echo %<变量名>%: 输出变量名
4. 常规的bat写法
'''
@echo off
...
pause
'''
5. 注释: 
  - rem <注释内容>
  - :: <注释内容>
6. 退出命令行: exit

晚饭后照例想去操场跑几圈,发现操场到处都是毕业生穿着学士服、硕士服在拍照留恋,恨而离去。

hy考研失利去了北京中银,yc跟着朋友去创业,剩下我cy和yy还能再坚守几年校园生活,大约硕士还会是室友,到时候至少也是七年同寝,算是一段机缘了。

三个室友里我与yc相知最深,彼此对对方的过去都十分了解,不同于hy和yy,我们都是感情上的loser,也许正是如此才会彼此相惜。

我与hy最能谈得来,我们兴趣相投,同为江沪一带的人,教育背景也较为相似,最重要的是热爱编程技术,对代码有很强的偏执,相对于GPA则较为随缘,能考多少是多少,他运气差些,没有能像我一样擦着边拿到推免资格。

意外的是yy是四年里与我相关最为紧密的人,我们合作参加了美赛,国赛和计赛,都取得了不错的成绩,彼此对对方的实力都是认可的,而且也都成功推免,按理说我和yy应该是关系最好的人。但是yy为人豪放,交际广泛,常常夜不归宿,醉酒而归,最终还以专业前三的成绩毕业,确实是个传奇人物。而我很难融入他的圈子,更多的时候我们是共事者,而不轻易去交心。

hy yy 和我都算是院里的硬实力派,也许也是这种寝室氛围,我们三人才能都在毕设优秀率不足7%的情况下取得了90+的评定,只可惜今年不评选优秀毕业设计,真是白瞎了我整这么高的分数。

但不管怎么样,现在只剩我和yy,hy与yc大约再也不会回来了。hy临走前说他的青春结束了,不管怎么说考研失利对一个人的打击实在是很大很大,虽然中银给他开了满算20W的薪资,但是他一个上海人去北京工作实在是很不划算的事情,但愿他一个上海人能在北京有好的前程,毕竟三年或多年后我也将面临同样的抉择。

五天后我也将离开,不同于高中毕业,那时候最后一场考完就赶着去南京的火车参加自招考试,尔后又来到现在的学校参加自招。一切都急匆匆,等一切都结束也就没有了感伤。而现在我将一个人坚守在宿舍直到最后一天,我没有穿学士服,也没有拍毕业照,甚至没有按学校要求上传照片合成3D纪念照片。我总觉得并没有什么值得留念的,不管怎么说四年留给我的更多是遗恨,我也确实没有做到令人满意的程度,就这么悄无声息的离开,也罢。

 


2020.06.17

连续两日肝到两点,zkz表示今日必须是健康日,不加班。直到今天我才知道zkz是斯坦福毕业,只比我大四岁的话还工作了这么久大概是硕士毕业,不过同为斯坦福硕士的sgj都做到VP了,zkz咋还是个AE... 不过不管怎么说还是tql...

今天在写表连接的时候跟yy聊了几句,结果写成了表跟自己连接,一运行发现错了,赶紧想关闭jupyter,可惜已经来不及了,直接死机动不了,忍痛扒线。这个故事告诉我们写代码时一定不能分心。

今晚KOF13战绩斐然,居然五战三胜,两次遇到比我还菜的菜鸡,非常满足。


2020.06.16

昨晚遇到的pyspark两个坑点👇

  • 日期转换时F.to_timestamp("date",format="yyyy-MM-dd"),一定不能写成"%Y-%m-%d",也不能写成"yyyy-mm-dd",前者只有python的datetime这么写,其他语言都不这么写;后者就很离谱了,结果出来全是1月份,我TM还以为源数据出了问题,咋都是一月份的呢?又不给报错,真是狗到家了。
  • udf一定要写清楚函数返回类型,否则给你返回个java.object类下的奇奇怪怪的结果也是顶

今天新遇到的一个神坑:

在本地我生成一份带有date/timestamp类型字段的parquet,然后我将它上传到MARS的datalake中,在MARS的Azure平台的databricks使用pyspark读取该parquet文件,结果惊奇的发现所有的日期数据都向前移动了8个小时!

目前可能的原因有以下三个:

  1. parquet文件中的日期字段保存了时区信息,大概MARS使用的标准时区是格林威治标准时间(GMT),所以恰好是提前了8个小时。
  2. datalake管理数据时会自动调整时间戳/日期格式的数据
  3. Azure平台databricks会有时区校正的操作
  4. 我觉得以上三点基本都不太可能,最有可能的是pyspark本身读取文件的设定

这个坑最恶心的地方是不管是timestamp还是date格式都会受影响,即便是date,也会自动给你转成timestamp变成yyyy-mm-dd 16:00:00,目前认为只能以字符串保存是最为妥当的,可是显然字符串要比时间戳占用更大的空间,而且极其愚蠢。

今日POST

KOF13 等级匹配取得4胜,代价是输了60多把了。不得不说打AI永远不能理解升龙的重要性,AI永远不会压起身。

中途有一局用火舞恶心了一把对手穿三,顿时信心大增,然后接下来把把用火舞,结果各种倒地被馆长八神压的起不了身,下C又不能防空,确实是性能太low了。麦卓也是,抢空都很强,就是抗压太差了。


2020.06.15

最早的密钥交换算法是一个本科生毕业设计的作品,可惜当时他的导师并没有意识到这个算法划时代的意义。

密码学基本过了一遍了,之后准备抽空把dos指令学一下。

# 密钥交换

## 可信任的第三方(TTP)
1. 密钥管理:
  - 问题: n个用户, 彼此间都存储密钥是很困难的(要存储C(n,2)个), 如果有公钥只要一个就可以了, 每个用户都要存储n-1个密钥
  - 这时候引入可信任的第三方, 让第三方来管理所有人的私钥就好了
  - 每当两个人想要通信, 第三方会用他们各自的私钥加密一份共享密钥给彼此, 实现密钥共享
  - 这种机制只对窃听安全, 但是对Active攻击不安全
  - 我们能否设计出对于窃听和主动攻击都安全的?
    + 进一步的我们能否摆脱第三方TTP
	+ 

## Merkle's Puzzle
  - A给B发送2^32个puzzle, B随机挑选一个puzzle, 得到里面的密钥, 将剩下的发回给A, A知道了B选择了哪个puzzle中的密钥, 完成交换
  - 攻击者需要整整花费2^64次才能破解这个puzzle(而A和B的工作都是2^32次, A需要准备n个puzzle, B需要解密其中一个puzzle)
  - 攻击者需要花费通信者平方倍的时间: 平方鸿沟
    + 问题: 我们是否能做到比平方鸿沟更大的gap
	+ 事实上分组密码不能提高这个gap

## Diffle-Hellman协议
  - 指数鸿沟
  - 对称密码无法做到, 需要更高级的函数: 代数
    + 选择一个大质数p和g(1<=g<=p), 构成参数
	+ A选择一个a(1<=g<p)计算g^a mod p发送给B
	+ B选择一个b(1<=g<p)计算g^b mod p发送给A
	+ 那么此时它们已经交换了密钥: K(A,B) = g^ab mod p
	+ 即便攻击者可以窃听到AB互相发送的值, 它仍然不能解出结果
	  + 更为广泛的: 定义DH函数: DH_g(g^a,g^b) = g^ab mod p 要求这个是很难计算的
	  + 最好的破解DH函数的方法: GNFS, 对于n位长的质数需要运行exp(O(n^0.3333))——亚指数级
	  + 定义在椭圆曲线上的DH函数比定义在质数域上的更难解决
	  + 如果有人能在中间截获并修改AB互相交换密钥的值的话, 是极其危险的, 对MItM(man in the middle)是不安全的
	  + 非互动性, 每个人都公布出自己的g^i mod p, 就可以互相通信了
	    * 事实上如果一共是两个人就是DH问题
		* 如果有三个人, 这个问题也解决了
		* 如果4,5,6,。。。这个问题都没有能够被解决如何有个行之有效的协议
		
## 公钥加密
1. 公钥加密有三部分构成: G E D
  + G: 随机算法生成公钥pk私钥sk 的pair
  + E(pk,m): 加密算法
  + D(sk,c): 解密算法
2. 攻击者会看见pk, E(pk,x), 但是攻击者仍然不能解密
3. 但是仍然对MiTM(可以修正并发送信息的中间人)是不安全

PS:S留长发了...


2020.06.14

关于pyspark中较为advance的join写法

# 5. 将4中得到的结果与unit_dict连接得到: 目的
join = [(stock_tab1["sku_id"]==unit_dict["sku_id"])&(stock_tab1["unit"]==unit_dict["unit_from"])]
stock_tab2 = stock_tab1.alias("table_a")\
	.join(unit_dict.alias("table_b"),join,"left")\
	.selectExpr(["table_a.*","denom","numer"])						 # 连接完后取stock_tab1表的所有字段与denom和numer
stock_tab3 = stock_tab2.withColumn("qty_EA",F.col("qty")*F.col("denom")/F.col("numer"))

其实我还是不建议这么写,因为这样还是会发生列的重复,即便已经指定了选择哪些列。

今日POST

早起加到下午三点,接着睡又没睡着,好伤。

但愿接下来IT入场,不会再有很多事情了,能跟着去学点系统部署的经验就好了,可惜这块完全小白,去了也估计帮不上忙。

学点新东西吧。

PS:今天终于完成零的突破,遇事不决凹升龙~


2020.06.13

寻常传奇 · 水上诗


2020.06.12

七月结项准备回家养老,再这么下去我可能就见不到开学的太阳了。


2020.06.09

吐了,准备写篇博客记录一下pyspark令人匪夷所思的BUG。听前辈说pyspark确实有很多坑,我是没想到已经到了不讲道理的程度,一个正则替换的BUG直接成了世界未解之谜了。我知道现在的世道不是很讲道理,正则也不讲道理么?!

 


2020.06.08

100件事只做到了40件,果然是个假的SUFE人。

今天第一次遇到pyspark里的表的循环连接出现的报错,是真的给跪了。不管多少行的spark代码生成的表,实际编译都是一行,所以很容易发生循环连接的问题,关键是报了错只会告诉你java编译时在哪里出错了,又对不到python代码在哪一行,只能一行一行的运行去排错。

现在的经验是如果发生了循环连接,报的错一定又臭又长👇,下面的截图就是报错,我可以负责任的说,在这张截图下面还有两倍于这个截图长度的报错,我是真的日了。


2020.06.07

正则在数据库这一块确实太关键了,写udf实在是下下之策,可惜没有什么系统性的教程,很多只是零碎的知识点,只能靠经验的堆积才能达到精通的程度吗?

预感下周会是很艰苦的一周,必须全力以赴地肝了,可是还有至少整整四周才能结项,以现在的进度大概率是要延期,总结还是需求调研和业务调研不够详细,但是确实也很难一次就能把所有细节都兼顾到,与现实只是很细微的差别,哪怕只是经验上的差距,都很难靠算法来弥补。

一件趣事:

葛冬冬的COPT求解器终于大成,继LEAF求解器后又一力作。目前已经是国内第一个OR方向的COPT求解器,公司内部宣称是已经达到商用级别,在国际上在求解速度也超过了目前主流的cplex, gruby等求解器,求解器组的大佬确实是NB,也算是我们学院内部的一个顶尖成果。

前几天在公司群里群策群力求推荐一个中文名,gdd表示谁的建议最总被采纳公司直接奖励2kRMB,gdd自己也会额外赠送一份不低于公司奖励的礼品,然后群里各种什么“达摩克里斯之剑”、“朗基努斯之抢”、“赫尔墨斯之履”、“飞雷神”、“使徒18号”、“帝江”、“逐日之箭”、“男朋友求解器”,上至山海经图,上古神兽;下至北欧神话,热血日漫;总之又快又霸气就对了。


2020.06.06

pyspark与sql相关总结(1):正则替换

正则表达式:
SELECT REGEXP_REPLACE(  
'Ellen Hildi Smith',  
'(.*) (.*) (.*)', '\3, \1 \2')  # 交换顺序

df1 = df.select(F.regexp_replace("group_id","^0*","").alias("group_id_new"))	删除group_id前方的若干个零

苦逼周末继续加班,wjs跑去做小米的项目,zkz让我把MARSAzure上面他之前写的pyspark代码全部重构一遍,我日。

早起,然后下午睡了整整三小时,是真的困毙了。晚上出去搞了一顿,回头看操场还开放就去跑了5圈,虽然现在每天只是在宿舍里锻炼,体能相比之前在家也没下降太多。主要吃撑了,肚子跑得有点疼。

最近有些颓唐,看到很多优秀的人的事。找了部芳文社的番(A CHANNEL)来解闷,不得不说芳文社实在是太棒了。


2020.06.05

逃不过的pyspark,如果能重来我一定好好学SQL,什么数据处理都是浮云,学好数据库才是啥都不怕的王道。


2020.06.04

pyspark的dataframe转pandas可能出的一个问题:

timestamp类型的pyspark字段是不能直接转为pandas的,需要先astype("date")才能转

昨夜搞到一点半终于彻底搞清楚了CBC翻转字节攻击与这类攻击中著名的padding oracle攻击,惊叹不已,特别想在门户的登录系统上试试,不过padding oracle需要请求的次数实在是太多了,不借助先进的爬虫伪装技巧很难做到完美破解。由此特别想涉足CTF,结果发现windows根本装不了pwn包,这只能在linux系统上用,找到的代码一个都测试不了,真是太扫兴了。

然后临睡前看了看群里zkz, wq, ltt还在挑灯夜战,zkz是傍晚时让我交出我手头的代码,别跟着一起熬了。今天早上八点钟zkz又开始在群里发布文档,我是真的看傻了。

PS:

—— 夜色温柔

—— 夜色婉柔否?乃觅婉柔之人矣!


2020.06.02

今天试图破解公司的文件加密算法,然后就意识到自己真的是不自量力的很,无论是设计加密算法还是破译密钥真的都是绝顶聪明的人才能做的事情。

唯一的发现是这个文件加密算法是随机加密,然后加密后的文档里开头是固定的一串用于识别的字节,后面是在一串十六进制的字节间加入了很多类似噪声的字符,以至于无法用常规方法解码。总之既没搞清楚这个算法的逻辑是什么,也没能找得出密钥(我一直坚信既然是随机加密,而且每次加密完文件都一致的增大了8kb,那么密钥一定是藏在文件了,否则凭什么在我电脑上加密完的文件公司其他人也能在装了加解密客户端的计算机上查看),然后就一个劲地在做CPA(选择明文攻击),试图用小学生级别的找规律破解密码,实在是太可笑了。。。

明天要展示结果,7点多了谦哥和甜姐还困死在数据源上,今天我怕不也得通宵了【汗】


2020.06.01

# 使用分组密码

分组密码,也叫块加密(block cyphers),一次加密明文中的一个块。是将明文按一定的位长分组,明文组经过加密运算得到密文组,密文组经过解密运算(加密运算的逆运算),还原成明文组。
序列密码,也叫流加密(stream cyphers),一次加密明文中的一个位。是指利用少量的密钥(制乱元素)通过某种复杂的运算(密码算法)产生大量的伪随机位流,用于对明文位流的加密。

分组加密算法中,有
> ECB电码本模式
  > 1.简单,有利于并行计算,误差不会被传送;
  > 2.不能隐藏明文的模式;
  > repetitions in message may show in cipher text/在密文中出现明文消息的重复 
  > 3.可能对明文进行主动攻击;
  > 加密消息块相互独立成为被攻击的弱点/weakness due to encrypted message blocks being independent
> CBC密文组链接
  > 首先将数据按照8个字节一组进行分组得到D1D2......Dn(若数据不是8的整数倍,用指定的PADDING数据补位)
  > 第一组数据D1与初始化向量I异或后的结果进行DES加密得到第一组密文C1(初始化向量I为全零)
  > 第二组数据D2与第一组的加密结果C1异或以后的结果进行DES加密,得到第二组密文C2
  > 之后的数据以此类推,得到Cn
  > 按顺序连为C1C2C3......Cn即为加密结果。
 解密是加密的逆过程,步骤如下:

  > 首先将数据按照8个字节一组进行分组得到C1C2C3......Cn
  > 将第一组数据进行解密后与初始化向量I进行异或得到第一组明文D1(注意:一定是先解密再异或)
  > 将第二组数据C2进行解密后与第一组密文数据进行异或得到第二组数据D2
  > 之后依此类推,得到Dn
  > 按顺序连为D1D2D3......Dn即为解密结果。
  > 1. 不容易主动攻击,安全性好于ECB,适合传输长度长的报文,是SSL、IPSec的标准。
  > each ciphertext block depends on all message blocks/每个密文块依赖于所有的信息块
  > thus a change in the message affects all ciphertext blocks/明文消息中一个改变会影响所有密文块
  > 2. need Initial Vector (IV) known to sender & receiver/发送方和接收方都需要知道初始化向量 
  > 3.加密过程是串行的,无法被并行化(在解密时,从两个邻接的密文块中即可得到一个平文块。因此,解密过程可以被并行化)。
  
 

昨天加班跟zkz夸下海口,一定赶在昨晚把所有数据处理好,结果从下午两点直接肝到凌晨两点,中间除了吃饭洗澡和必要的锻炼外基本是马不停蹄地在赶(我TM就服了周六什么事也没有,就硬拖到周日下午,延迟症真是人人都有)。

然后今天中午补觉第一次做了梦中梦,先做的梦是梦到今天午睡hy和yc回来吵醒我了,他们要出去洗澡,我让他们回来别开灯,然后我就又开始睡了,结果又做梦。。。


2020.05.31

密码学学习笔记 1

# 流密码

1. 对称加密: 
  - 密钥空间K, 明文空间M, 密文空间C, 一般都∈{0,1}^n
  - 加密过程E: K×M ==> C
  - 解密过程D: K×C ==> M
  - 对称加密应当满足D(k,E(k,m)) = m
  - E往往是一个随机算法, D往往是确定性的算法

## The One Time Pad 一次性密码本
1. OTP是安全的, 但是是不经济的, 因为密钥长度与明文长度相同
2. 如c = m XOR k, 这个确实是安全的, 只看c绝对是搞不出明文的
3. 什么是安全的密码?
  - 定理: 若明文空间M中的两个长度相等的m1 m2, 密钥空间中任意一个k加密得到c的概率是相同的
  - 即Pr[E(k,m0)=c] = Pr(E(k,m1)=c)
  - Shannon定理: 如果密钥绝对安全, 则必然密钥空间的大小不小于明文空间
  - 显然OTP的异或加密是安全的, 对于唯密文攻击者是绝对安全的
  - 并且对于指定的密文, 有且仅有一个密钥能把明文映射到该密文(唯密文绝对安全);
  - 但是仍然有其他的攻击方式, OTP并非是绝对安全的;
4. 如果有办法能把与明文同长度的密钥安全发送出去, 那么直接发送明文不就完事了?
  - 总之这是一种理想化的加密方法, 实际几乎不能使用

出于爬虫里遇到的JS加密的问题,近期开始自学密码学,挑了B站上一个斯坦福大学的公开课https://www.bilibili.com/video/BV1Ht411w7Re,顺带补补英语听力,目前刷了前两集绪论和流密码,感觉无论是发明加密方式还是破解密钥真的都是绝顶聪明的人才能做得到的事情,跟自己学的一些东西比简直不是一个层次的水平。

周末加班,下周客户要看初步的结果。搞一个65M的parquet文件,结果pandas怎么也读不进来,甚至设置了只读一列都OOM,我心想不会这么夸张吧。。即便是用WINRAR打包csv文件也不过只能压缩20倍不到的水平,算上去也就1G多一些。赶紧用上刚学的pyspark,轻松就可以读进来,一查竟然有十亿多行?! 粗略估计压缩率得有将近100倍,parquet的数据存储方式实在是太卓越了,终于是理解了pyspark的优越之处。

虽然这个月因为答辩和返校翘了三天班,中间也有两三天基本没有什么事情,但是zkz还是给我算了全勤,想必是把加班的都近似算进去了。即便如此扣完税还不如去做混吃等死的助管,这个实习算劳务报酬的标准来扣税可实在是太艹了[捂脸]。


2020.05.29

LATEX TIP1 LATEX脚注代码

$\footnote{We use the supscript $t$ for parameters in the $t^{th}$ round}$

一专毕设95分,登CC账号看了看院里往年的情况,90分以上不足10%,95分以上屈指可数,目前全校公布出来的700多人里最高分也只有95。可以算是完美收官了(虽然我的实验结果还是挺差的...)。

大家的日子都不好过唉,贴函证还要贴到加班,ziben剥削的本质。。。

工作做久了也挺枯燥的,最近天天熬夜弄数据,就为了明天的交付,可是交付完了还得肝一个多月。

有趣的点子不常有,实现完很空虚,实现不了也很失落。

熬着吧,但愿到九月有趣的事情会发生。


2020.05.28

PYSPARK TIP4 pyspark.sql.functions(4)

  - avg(col)
  - base64(col)
  - bin(col) 转为二进制
  - count(col)
  - date_sub(df.date,1) 前一天 date_add(df.date,1) 后一天
  - date_format('date','MM/dd/yyy') 将日期格式的转为字符串
  - date_diff(df.d1,df.d2) # 两个日期的差距
  - dayofmonth(col)
  - dayofweek(col)
  - dayofyear(col)
  - weekofyear(col)
  - decode(col)
  - expr(str) # 很重要的一个函数
    + df.select(expr("length(name)")).collect()

今日POST

棘手的工作肝了一晚上,zkz跟我说年轻人少熬夜,然后又是凌晨发布文档,我心想你也不就比我大了四岁。。

明天中期交付,才熬过一半唉,确实有点压力。


2020.05.26

今天在Kaggle竞赛 ALASKA2 Image Steganalysis 了解到图片隐写技术,大约可以视为一种密码学加密方法,不过可怕的是普通的字符串加密总归还是能靠肉眼看出被加密了,这图片隐写肉眼完全是看不出来的,这要是放在WEB开发中加密真的能把搞爬虫的人心态弄炸。所以这个竞赛就是需要用机器学习算法去判断一张图片是否被隐写了加密信息。

之前听说手机拍照原图中会有图片拍摄的时间地点等信息,大概也是用隐写技术做到的。联想到前几日爬虫中常常遇到的加解密问题,如果不能熟习密码学算法,就算能找到JS中对应的加解密代码也没法看得懂。

凯爹考研失败了,周末准备陪他出去散散心。

回想昨日的消息,世事难料,几家欢喜几家愁,三年后又该何去何从呢?


2020.05.25

PYSPARK TIP4 pyspark.sql.functions(3)

  - avg(col)
  - base64(col)
  - bin(col) 转为二进制
  - count(col)
  - date_sub(df.date,1) 前一天 date_add(df.date,1) 后一天
  - date_format('date','MM/dd/yyy') 将日期格式的转为字符串
  - date_diff(df.d1,df.d2) # 两个日期的差距
  - dayofmonth(col)
  - dayofweek(col)
  - dayofyear(col)
  - weekofyear(col)
  - decode(col)
  - expr(str) # 很重要的一个函数
    + df.select(expr("length(name)")).collect()

 

今日POST

xmh从北京外交学院考研考到北大光华。

小学的时候跟gcx,xmh平起平坐,初中她们两个考去梅岭;高中我跟xmh在扬中,gcx在附中,结果高考偏是gcx考得最好,比我高了整整14分,xmh倒是最差,比我还低5分;如今到大学毕业,成败这东西还真是随缘的很呢,无论在哪里都是分数才能说得上话。


2020.05.23

PYSPARK TIP3 pyspark.sql.functions(2)

  - avg(col)
  - base64(col)
  - bin(col) 转为二进制
  - count(col)
  - date_sub(df.date,1) 前一天 date_add(df.date,1) 后一天
  - date_format('date','MM/dd/yyy') 将日期格式的转为字符串
  - date_diff(df.d1,df.d2) # 两个日期的差距
  - dayofmonth(col)
  - dayofweek(col)
  - dayofyear(col)
  - weekofyear(col)
  - decode(col)
  - expr(str) # 很重要的一个函数
    + df.select(expr("length(name)")).collect()

今日POST

网易云完结,顺带把QQ,酷我也肝了,相对来说QQ的难度稍微大一点,但基本上逻辑也没差太多。酷狗看了一下,觉得挺麻烦的不做了。

关于网易云我另外给出用selenium执行JS获取加密表单的方法,因为我总是觉得加密逻辑一旦改变,复现的逻辑就毫无意义。不过竟然两年都没有改过加密逻辑,甚至用于加密的密钥都不改(到现在都是“流泪”,“强”,“爱心”这几个短语,这竟然不定期改点词语,难道程序猿跑路没人管了?也太不敬业了)。不过个人认为逻辑大改不太可能,否则后端验证加密信息的算法也要调整,省事就啥也不改,也挺好。

之前我一直是以为没地方去了才会到博物馆,原来S是真的喜欢去博物馆。

晚上出去吃了一顿,现在这种小日子过得倒也不坏,呆宿舍里也没人叨扰我,每天打扫卫生,宿舍也不会很干净;虽然不太想出去跑步(因为懒得洗衣服),但室内有单杠哑铃也做些练习,可惜也延续不了多久了。


2020.05.22

PYSPARK TIP3 pyspark.sql.functions(1)

  - lit(value) 
    + df.withColumn('new_col', lit(1)) 创建新的一列默认值全是1的数据
  - asc asc_null_first 同上面的df.col的方法
  - ascii(col)
  - atan(col)
  - atan2(col1,col2)
  - concat(*cols) # 非列名
  - col(colName) 选定一个列(见apply的用法)
  - collect_list(colName)
  - collect_set(colName)
    + df2 = spark.createDataFrame([(2,), (5,), (5,)], ('age',))
	+ df2.agg(collect_list('age')).collect() # [Row(collect_list(age)=[2, 5, 5])]
	+ df2.agg(collect_set('age')).collect() # [Row(collect_set(age)=[5, 2])]

今日POST

做网易云音乐的爬虫,困死在盘理JS生成加密表单数据的逆向逻辑上,把网易云的JS的core代码从头看到尾,虽然找到了加密逻辑的部分,但是怎么都没搞明白是在哪里把加密信息给送出去的(我一直以为这种肯定是ajax,结果怎么也找不到在哪里发起请求的,JS毕竟三脚猫水平,拿不上台面,精通JS对爬虫还是有相当好处的)。

本想着是怎么用浏览器驱动输入JS代码运行直接拿到加密后的信息,查了一下居然已经有好几个大佬直接把加密的逻辑改写成了python代码直接生成加密后的信息用了 !? tql实在是

一直强逼着自己不用selenium,但是这个加密逻辑只要稍作改变,哪怕只是简单修改一下默认的密钥,就直接爆炸,更不要说把加密逻辑改得更复杂了(虽然我看这几个大佬都是两三年前做的爬虫了,到现在这个加密逻辑也没改过),按道理来说用selenium驱动运行JS脚本拿到加密信息来做的爬虫要更鲁棒一些。

本以为近期不会有什么事情的,结果下午晚些时候被zkz扔了一堆摸不着头的数据,晚上下班前zkz在群里打了预防针,下周阶段性交付,周末都养精蓄锐,做好每日熬夜的准备了。。。


2020.05.21

PYSPARK TIP3 pyspark.sql.functions 

6. pyspark.sql.functions 模块下的诸多方法: 虽然用udf基本上可以解决大部分的问题, 但一些内置函数总归可以有好处的
  - 这些函数都有一个通用的方法!!!!!!!!!!!!!!!!!
    + df.select(FUNCTION(...).alias("result")).collect()
  
  - abs(col)
  - approx_count_distinct(col) <==> 这个貌似跟理解的也不太一样
    + df.agg(approx_count_distinct(df.age).alias('distinct_ages')).collect()
  - array(*cols) 返回列表(跟collect()的效果差不多)
  - array_contains(col,value) 返回包含某个value的列单元(String)
  - array_distinct(col) 好像跟我理解的不太一样
  - array_except(col1,col2) 
  - array_intersect(col1,col2)

今日POST

上午开会zkz让我随时待命,我中午吃完饭就盯在电脑前没敢休息,结果整整一下午到晚上都没我事情?!

快困炸了我TM,顺手把pyspark过了一遍,基本算是掌握了,关键缺少实践。

现在我都不知道第五周之后开始部署系统和算法优化还有没有我的事情了,zkz似乎不太想让我涉足到生产系统里面,如果要我进去也挺可怕的,如果止步于此后面感觉我的事情也不是很多了。也没别的地方可去,大致先跟着做吧,数据这块烂摊子大概后期都得扔给我。

今晚开启一个大爬虫项目,我将它命名为FreeCrawl 计划,我还是很想重拾起去年的那个WEB项目的,实习总归还是个外人,能学的东西太有限了。还是做自己的事情来得快乐。

一个人呆宿舍里也挺好的,感觉比在家里效率高多了。听说SXY才开始实习,远程朝九晚九(怕不是以后都是日常噢。。。)


2020.05.20

PYSPARK TIP3 pyspark.sql框架一览

# pyspark

# 子模块sql: from pyspark.sql import *
1. sql模块下的主要模块
  - pyspark.sql.SparkSession 
    + DataFrame与SQL数据的函数切入点
  - pyspark.sql.DataFrame 
    + DataFrame数据对象
  - pyspark.sql.Column 
    + DataFrame列数据对象
  - pyspark.sql.Row 
    + DataFrame行数据对象
  - pyspark.sql.GroupedData 
    + Aggregation methods, 返回DataFrame.groupBy().
  - pyspark.sql.DataFrameNaFunctions 
    + 处理缺失值
  - pyspark.sql.DataFrameStatFunctions 
    + 统计方法
  - pyspark.sql.functions 
    + DataFrame中的内置函数
  - pyspark.sql.types 
    + 数据类型
  - pyspark.sql.Window For 
    + 窗口函数.

2. pyspark与pandas相互转换:
  - sqlContext.createDataFrame(df_pandas).collect()
  - df_spark.toPandas()

今日POST

完全溜不出去,进出门登记。出校门超过一小时就要请假,早晚还要测体温,真是白回学校了,就指着啥时候办完手续啥时候滚蛋了。

cc请我早上到教务处教一下新招的同事系统使用事宜,是个数学学院2015级的学姐。

女孩能在事业单位工作还是好,至少比zkz凌晨三点多在群里发pre的文件不知强到哪里去了。。

yy去离职去兴业证券实习了,果然还是券商有吸引力,听说现在在给老板做爬虫(那我上我也行)。。


2020.05.19

PYSPARK TIP2 SparkSession入门

# SparkSession 模块
1. 处理数据集的入口
2. 用于生成DataFrame, 操作SQL, 读取parquet文件
3. 属性builder:
  - appName(name)  
    + 设置应用名称(在UI界面展示)
  - config(key=None,value=None,conf=None)  
    + 设置一个配置的键值对
  - enableHiveSupport()  
    + 启用Hive支持
  - getOrCreate()
    + 如果没有全局的SparkSession对象,就以当前配置创建一个新的作为全局对象
    + 如果有则会将当前配置应用到全局对象中去
  - master(master)
    + 分配一个url: 如"local\[4\]"表示本地四核运行, "spark://master:7077"表示在集群上运行
4. 属性catalog
5. 属性conf
6. 方法createDataFrame(data,schema=None,samplingRatio=None,verifySchema=True)
  - data: RDD, list, pandas.DataFrame(用于创建DataFrame的数据源)
  - schema: 基本就是列字段名, 最常见即传入一个列字段名的列表, 也可以是一个Row对象

 今日POST

想不到返校宿管第一句话是来的这么早还要到六月底才走,能不能不要呆这么久,早点回家去。

唉,家里被父母嫌,到学校还被嫌弃,竟然没有能容我的地方。。。

花了两个多小时终于把宿舍打扫干净了,还好没有想象中的那么脏乱。

累 睡一觉先


2020.05.18

PYSPARK TIP1 读取数据

# csv读取
csv_path = r'F:\Internship\Cardinal_Operation\Projects\Project2_Mars\data\raw\source0509.csv'
df_patient = spark.read.format('csv')\
    .option('header', 'true')\
    .option('inferSchema', 'true')\
    .option('sep', '\t')\
    .load(csv_path)
print(df_patient.printSchema())
print(df_patient.select('DEST').limit(10).show())

print("#"*64)
all_csv_path = r'F:\Internship\Cardinal_Operation\Projects\Project2_Mars\data\raw\*.csv'
df_patient =  spark.read.format('csv')\
    .option('header', 'true')\
    .option('inferSchema', 'true')\
    .load(all_csv_path)

print(df_patient.count())

今日POST

PySpark确实比较困难。

不多说,明日返校。


2020.05.17

LATEX TIP16 数学符号

\section{希腊字母}
$\alpha \beta \gamma \delta \epsilon $

今日POST

最近练拳皇98已经可以三问通关最高难度的电脑了,想之前第一次从拳皇97转到玩98连葵花都按不全,觉得自己拳皇水平已经大成。决定上STEAM匹配几把拳皇13。结果连输10把,选八草门连对手第一个人都过不去,现在总战绩0胜27负,超神到已经完全匹配不到对手了(这STEAM的匹配机制也太恶心,把把给我匹配99级的,把我打得跟弱智一样)。


2020.05.13

LATEX TIP15 数学符号

%小括号
\[
\begin{pmatrix}
0 & 1 \\
1 & 0 
\end{pmatrix}
\]

%中括号
\[
\begin{bmatrix}
0 & 1 \\
1 & 0 
\end{bmatrix}
\]

今日POST

应该可以从毕设中解放出来了,自我感觉答辩得很好,全身心投入工作ing。

回顾一下居家四个月,基本做到了坚持每天跑步,最近很忙,每天加了2分钟平板支撑,训练量不如之前,也基本上是坚持4公里的。搞定了两篇毕业论文,实习两个多月,最重要的是刷了不少番。

上个月组里谦哥给小米的系统里架算法,结果小米只让用PySpark写,协商下来不给用pandas写数据部分的代码。痛苦的谦哥疯狂加班把所有的pandas代码重构成PySpark,并且修改了自己的工作签名为“PySpark是世界上最烂的语言”。

组里其他人还是很同情谦哥的,把所有的数据处理代码全都重构确实太恶心了。

结果这个月就轮到我们的项目组给玛氏在Azure上搭PySpark的代码了……

总之接下来准备提前先把PySpark学一下,有空想做些有趣的事。

最近发现S天天发“制作食物”的POST,很是羡慕,反正我到现在在做饭上还是零经验。。。


2020.05.12

LATEX TIP14 数学函数(4)

\subsection{自动编号}
交换律见式\ref{eq:no1}
\begin{equation}
    a+b=b+a \label{eq:no1}
\end{equation}
如见公式\ref{eq:no2}
\begin{equation}
    1+2=2+1
\end{equation}

 

今日POST

虽然还没到我答辩,不过就我听的前面这几个人的,我顿时信心大增[笑]。

亏是没有分到什么主要研究机器学习方向的老师在这个组里,应该也不至于能问倒我。

—— 答辩完毕,自我感觉良好,解放!!!!!!!!!


2020.05.08

LATEX TIP13 数学函数(3)

\subsection{自动编号}
交换律见式\ref{eq:no1}
\begin{equation}
    a+b=b+a \label{eq:no1}
\end{equation}
如见公式\ref{eq:no2}
\begin{equation}
    1+2=2+1
\end{equation}

今日POST

早上答辩,之前一直说好是陈述10分钟,提问5分钟,答辩前半小时临时决定只让陈述3~5分钟,结果写好的稿子和准备好的PPT又不忍心改,想要飞快的读完又被打断,提问完全一问三不知,没想到线上答辩也能紧张成这样,果然不是自己专业的东西真的讲起来没什么信心。好在老师评价说写得还是很用心的,毕竟整了两万多字,没有功劳也有苦劳唉。

刚整完了今天的活,临睡前翻了翻博客发现上线了收藏系统,居然还能有近200的收藏,一篇篇博客翻了看看,果然是那个两年前顺手写的PPT自动下载的博客收藏最多,有60个,其他一些猎奇的爬虫和竞赛也有不少收藏,有一段时间不做爬虫回看以前的东西还有些新鲜感,不过总之都只是些愚技,不足挂齿。真正有价值的技术还是需要时间的沉淀的,至少现在真的还是太年轻了。

很想在人工智能这个方向做下去,但就现在实习的情况来看又觉得真正有用的人工智能还是太难太难了,感觉技术资源上已经被完全垄断了,微软、谷歌、阿里、腾讯这些巨头,打不过若是还加入不了,都只是末流罢了。


2020.05.07

LATEX TIP12 数学函数(2)

$\sin^2x + \cos^2x = 1$

$\sqrt[2]{2x+3}$

$\sqrt[3]{2x-5}$

今日POST

莫名其妙地明天二专就答辩了,今晚才把定稿提交到答辩群里,我也真的是服了。不过看了看其他人写的,我稍微放心了一点。。。法学本专的才写了一万字出头,我吃力不讨好地整了两万多字,就怕明天答辩被要求大改就心态炸了。这线上答辩直接把稿子写好也没啥好慌的了。

现在倒是很担心下周二的一专答辩,虽然能讲不少东西,这两周电脑接连跑得都上了一层厚灰了,但跑的结果还是P都不如,只能靠灵活的话术了,反正实验结果也就那么一页,我真的是没有信心再跑了。


2020.05.02

LATEX TIP11 数学函数

\section{数学函数}
$\log$
$\sin$
$\cos$
$\arcsin$
$\arccos$
$\arctan$
$\ln$

今日POST

一专完稿,查重1.4%,就这么办了,我也没辙了,之后也许会继续调调模型,不过也有点想做些别的事情了。

戚风蛋糕是什么鬼?


2020.04.30

LATEX TIP10 设置字体

%%%%%%%%%%%%%%%%%%%%%%%
% -- 中文字体 --
%\setmainfont{Microsoft YaHei}  % 微软雅黑
%\setmainfont{YouYuan}  % 幼圆    
%\setmainfont{NSimSun}  % 新宋体
%\setmainfont{KaiTi}    % 楷体
%\setmainfont{SimSun}   % 宋体
%\setmainfont{SimHei}   % 黑体
% -- 英文字体 --
%\usepackage{times}
%\usepackage{mathpazo}
%\usepackage{fourier}
%\usepackage{charter}

今日POST

我心态崩了,数据增强再训练之后居然模型评估丝毫没有改变,心中生疑,检查发现之前效果提升是因为模型预测输出全部都是delete,结果生成了一份空白的提交文件,离谱的是空白文件的评估结果居然也能有20%以上的Precision/Recall/F0.5,比大部分的普通模型的结果都更靠谱。。。我理解应该是损失函数要把delete的权重调低,因为equal的权重低了之后delete操作占了绝对大头,疯狂重调模型,心态真的是爆炸了。

最近筹划再买一台PC机专门用来跑代码了,这年头实习边开视频会议边跑着代码真的难顶,内存完全吃不住。

PS:今天临睡前翻了一下weibo,发现原来sxy也会发日常的POST,唉,要是我再跟高中同学聚一下怕是要给yh,jez之辈好好嘲弄一番了,也不知道我们仨“金阳光”组合其他两人现在都怎么样了,真希望还能是从前学生时的心态。


2020.04.28

LATEX TIP9 数学公式

\begin{math}
     a+b=b+a
\end{math}

今日POST

大突破!马不停蹄地跑了几十种参数与架构的GEC模型,召回率一直卡死在2%不到,终于在昨天午饭时突然灵光一现,想到可能可以调整损失函数来的定义上实验出了靠谱的结果,仅在NUCLE 50000个数据集上训练下来召回率终于突破了20%,准确率也有极大的提升,总算是能交差了。

最近每天起床电脑都烫得能煮鸡蛋,真的怕这台游戏本会突然报废,到时候真的是心态炸了。

现在就看看在Lang8上1000000数据上能不能进一步提升了,关键实在是太耗费时间了,要全部跑完至少得两天两夜,留给操作的空间确实是不多了。


2020.04.24

LATEX TIP8 插入表格:个人觉得插表格实在是太繁琐了,感觉用Excel2TEX这种外部工具直接把现成的表格转成tex对于那些复杂的表格要靠谱得多,不过latex的表格风格确实是很好看,比word的大气多了。

\begin{table}
  \caption{Sample table title}
  \label{sample-table}
  \centering
  \begin{tabular}{lll} % 这代表有几列  可以写成|||就是实线 |c|c|c|就是居中
    \toprule
    \multicolumn{2}{c}{Part}                   \\
    \cmidrule(r){1-2}
    Name     & Description     & Size ($\mu$m) \\
    \midrule
    Dendrite & Input terminal  & $\sim$100     \\
    Axon     & Output terminal & $\sim$10      \\
    Soma     & Cell body       & up to $10^6$  \\
    \bottomrule
  \end{tabular}
\end{table}

今日POST

这几天模型跑的我真的是要抓狂了,BERT模型训练一个batch就要两三分钟,我担心一跑两三天中途意外挂掉,于是决定每100个batch就给先存一个备份模型,结果把"if n_batch%100==0:"写成了"if n_batch%100:",我TM一觉醒来磁盘直接爆掉了,给我备份了一百多个2G多的模型,我TM心态爆炸,还好可以用跑了100多个batch的模型继续训练,然后一跑才发现忘了备份之前训练的logging文件,跑了100多个batchlogging文件直接给"open(logpath,"w") as f:"给清空了,用来绘图的数据全没了。

【土拨鼠尖叫】啊啊啊啊啊啊啊啊啊啊啊——————————————————————————————

等我有钱了一定买一个顶配的GPU服务器专门给自己用[汗],回不了学校只能用PC机跑BERT真的是日了狗了。


2020.04.21

LATEX TIP7 生成目录

\makecontent

今日POST

感觉回到了去年八月份时的焦虑


2020.04.17

LATEX TIP6 多行带花括号的公式

%多行括号公式

$$
\left\{  
             \begin{array}{**lr**}  
             x=\dfrac{3\pi}{2}(1+2t)\cos(\dfrac{3\pi}{2}(1+2t)), &  \\  
             y=s, & 0\leq s\leq L,|t|\leq1.\\  
             z=\dfrac{3\pi}{2}(1+2t)\sin(\dfrac{3\pi}{2}(1+2t)), &    
             \end{array}  
\right.  
$$

这里面有个大坑,\right后面的小数点一定不能省略,否则会报错到怀疑人生。总之LATEX编译报错对新手实在是太不友好了,语法不通全靠瞎蒙,不会排版全靠模板。

今日POST

纯手写了3000多行的满足我强迫症的代码,整个毕设文件夹占了50G+的磁盘,可惜并不能跑出靠谱的结果,我。。。


2020.04.14

LATEX TIP5 希腊字母(一)

\section{希腊字母}
$\alpha \beta \gamma \delta \epsilon $

今日POST

去银行办卡听说她毕业要去加拿大,也许这是我能知道的最后一个消息了。

现在想想也就大一开学见过几次,一晃四年真的就这么过去了。


2020.04.13

LATEX TIP4 无法直接打印出的符号(一)

小于号用 \textless
大于号用 \textgreater
上标用^{上标}
下标用$_{下标}$
下划线用\_
~用\~{}

今日POST

做GEC时准备创新加入词性特征,由此找到了kaggle上一个很好的词性(命名实体)标注数据集

https://www.kaggle.com/abhinavwalia95/entity-annotated-corpus/data

这个数据是命名实体识别竞赛的数据集,就是少了一点,只有五万不到,不过稍微增强一下到几十万不是问题,关键是用来做GEC的增强语料算是质量比较高的了,我总是觉得论文里说的那些wikipidea,gigaword不是很适合做GEC的语料(也许是我吃不到葡萄说葡萄酸)。

看到kaggle首页上也开始有关于COVID-2019的竞赛了,数据科学家终于也要试着拯救世界了么。。。

推荐河图新歌《无会期》


2020.04.11

LATEX TIP3 LATE设置水印

%%%%%%%%%%%%%%%%%%%%%%%
%  设置水印
%%%%%%%%%%%%%%%%%%%%%%%
%\usepackage{draftwatermark}         % 所有页加水印
%\usepackage[firstpage]{draftwatermark} % 只有第一页加水印
% \SetWatermarkText{Water-Mark}           % 设置水印内容
% \SetWatermarkText{\includegraphics{fig/ZJDX-WaterMark.eps}}         % 设置水印logo
% \SetWatermarkLightness{0.9}             % 设置水印透明度 0-1
% \SetWatermarkScale{1}                   % 设置水印大小 0-1  

今日POST

昨天二专群给了查重接口,试查了一下自己用一周糊出来的东西,刚两万字,重复率15.1,正好够用。

然而一专到现在已经没有了风声,根本没有人催我。用latex先写了六七页理论性的东西,还在糊实验结果,整个慌得不行。

坚持了近三个月,已经可以做到18分钟跑四公里,现在体测一公里肯定是不在话下,可惜再也没有体测了。

唉,得是要到五月份才能开学了。


2020.04.08

LATEX TIP2 LATEX并排插入图片

\begin{figure}[htbp]
\centering
\subfigure[pic1.]{
\begin{minipage}[t]{0.25\linewidth}
\centering
\includegraphics[width=1in]{111.eps}
%\caption{fig1}
\end{minipage}%
}%
\subfigure[pic2.]{
\begin{minipage}[t]{0.25\linewidth}
\centering
\includegraphics[width=1in]{111.eps}
%\caption{fig2}
\end{minipage}%
}%
\subfigure[pic3.]{
\begin{minipage}[t]{0.25\linewidth}
\centering
\includegraphics[width=1in]{111.eps}
%\caption{fig2}
\end{minipage}
}%
\subfigure[pic4.]{
\begin{minipage}[t]{0.25\linewidth}
\centering
\includegraphics[width=1in]{111.eps}
%\caption{fig2}
\end{minipage}
}%
\centering
\caption{ pics}
\end{figure}
 

今日POST

时间推进,好多事情变得局促起来了。

先跟着把项目二期做完,12周的时间,之后再做打算了。


2020.04.07

这年头CSDN都不让发布日常POST的博客了,审核了好几遍都不让更新,做人太难了。。。

那就每次更新分享一个TIP好了,正好也算是督促自己学点新东西。

最近因为远程办公PC机上被迫安装了文件加密系统,编辑各种文件都会被强制加密导致无法在公司外部分享,所以用的是latex写论文导出pdf。就分享一些latex的小TIP吧。

LATEX TIP1 LATEX脚注代码

$\footnote{We use the supscript $t$ for parameters in the $t^{th}$ round}$

LATEX的脚注格式$\footnote{<脚注内容>}$,无须手动对脚注进行编号,在 <脚注内容> 中使用 $t$ 可以返回当前脚注的编号。

今日POST

上周MARS TEST&LEARN项目完结,完结当天凌晨三点半zkz在群里发布了用于pre的PPT,好在汇报十分成功,客户相当满意,也不枉这一个多月来的努力。有时候确实如此,不管996也好,007也罢,趁年轻时还有热情,能做出让自己有点成就感的事情,哪怕只有一件两件,也算是知足了。


2020.04.03

Mars Test & Learn, End


2020.04.01

这周五跟boss汇报完就项目一期就完事了。

zkz和zst几个天天都熬到一点多,搞得我只干到十二点都有点不好意思。


2020.03.31

OMG,四月新番,刀剑完结,春物完结,都是有生之年系列,青春终于都完结了。

希望别是日本疫情大爆发结果延期了,也就趁现在再追点番了,以后再追莫不被人耻笑。


2020.03.30

成功在996负压中用七天拼凑出万余字的法学论文交付给李宇了。

接下来七天面临的困难就是怎么仅靠 8核CPU 8G内存 和 4G显存 跑通令人智熄的模型,再从零开始写出一篇靠谱的实验报告。

狗被逼急了再高的墙也能跳得过去,但偏偏赶在就是这周组里项目要结项,从上到下都忙得要死。

我就纳闷了凭什么到现在还是不推迟答辩时间,当真一回学校就开始答辩了么?只靠一台笔记本真的没办法弄出靠谱的结果。可把人给急坏了。


2020.03.29

今天(周日)凌晨起来上了个厕所,发现两点半的时候项目经理给发了两份文件给处理一下。。。

虽然由于疫情还素未谋面,但是我还是很难想象一个只比我大四岁的女性职员可以这么拼。。。

这样真的对自己身体太摧残了,这么年轻就已经这个样子了,到三十岁不出问题我都不信。。。

相比那些做行政办公的真的是没法比。。。


2020.03.27

我现在发现做数据分析跟那些做审计的区别也不大,本质上不是拿出正确的分析结果,而是客户想看到的结果。

总之合上书本,就再没有正确答案可言了。


2020.03.26

DDL是第一生产力,CY你也沦落了。


2020.03.24

做了一个很惊悚的梦,先是梦到毕业去了新学校,和两个高中室友zgy和jy又住了同一间宿舍,时隔四年我们“金阳光”组合又重新聚首,特别高兴,然后就梦到上课时前桌坐着sxy和shy . . . 后面的事情就已经记不清了,只觉得梦中的自己都是大脑一片空白。这几天明明每天不是在看法学论文,就是在算各种指标,也不知道怎么就梦这么一出。

从昨晚到今天,NQC算到我怀疑狗生,我都不能说服自己相信我算出的结果,却还要给别人解释我的结论。现实跟理论总是相差的太远了,总归是纸上得来终觉浅,假若我是这次的项目经理,我可能真的会被逼疯。


2020.03.23

七天,如何从法盲到法学学士。


2020.03.21

CSDN@Saeki777 或者是 weibo@Saeki_梦乃,近期真的抽不开身,请不要再在weibo私信我了。


2020.03.19

零点,农历二月廿六。

自寻烦恼,自讨无趣。

罢了,不必做无意义的事情。

生快。托你的福,现在在杉数与比同道的人一起做自己很擅长,也很喜欢做的事情,总归觉得自己还是有点价值的。

希望你也一样。


2020.03.18

今天真是开眼界了,四个人分工开发,只给一天时间就要把数据处理,模型,仿真,评价代码全部写好,然后就要开始调参分析。人被逼急了真的啥事儿都能做得出来。

很意外有RANK三百多的大佬给我点赞。


2020.03.16

小镇恢复了以往的平静,每个人都在平凡地生活。

二十多年来故城似乎没有变化,老街旧巷依然在,就与泛黄纸张中记录着的文字一样。

以前喜欢吃的面馆现在仍喜欢;

以前喜欢去的地方现在还会去;

以前喜欢做的事情现在还在做……

于无人处独放歌。

穿着兜裆裤的小朋友,在人群中不知廉耻地游梭。

比我大不了几岁的父母们,骑着电单车在接送比我小很多的孩子们。

越发年迈的瘫痪老妪,摇着手动车在岔路口深情又无神地观望。

窗外竟是如此的平凡。

花开人聚,花败人去,他们知道,他们总会离开;

但这花,这巷,这镇它依旧是那副模样。

滴滴——

听,这嘈杂的声音;

看,这闪烁的图形。

却终有一天,我再也无法回到过去。


2020.03.15

原地爆炸,补了一天《花开伊吕波》,PA三部曲真的是名不虚传,PA社的人物作画与刻画实在是太精致精细了。


2020.03.13

一到晚上十点就困,看十分钟屏幕眼睛就感觉不太行了,真的是年老智衰了。

河图新歌《一夕光》很好听,少有的低音曲(印象中只有《倾尽天下》是比较低的了),唱起来很有韵致,词也写得相当好。

没什么好番能拿来消遣,也没有精力去找番看。

S也断了很久没有更新POST了,今天刚看到有一条wb,想必也是很忙了。

不知道这种局势下的投行的境况怎么样,总之生存且艰。

但愿这学期能有始有终,别再给我整些破事了。


2020.03.11

河图《一夕光》


2020.03.09

雨下了一天一夜,回来快两个月,第三天没有出去跑步,第一次是大年初二晚上的大雨,第二次是生日晚上的大雨。

才发现组里有一个是大我两级的试点班学姐,查了一下3.6的GPA,应该是毕业就来工作了,还是求解器组的人。总算找到个拉得上关系的人。远程也看不到人,除了工作也没什么适合交流的,工作时间版聊也怪奇怪的。早知道还是寒假前去做一周的。

时间越来越局迫,虽然不指望能有什么好事发生,但也想回去见点活人,要不就真的是凉透。

向导找我线上开课,我忽然有些不知所言。。。

想到 gcx 也困在家里快两个月了,也许大家都是最后一次呆在这个小镇上这么长时间了,她就在离我几百米的地方。可是我们还是没有见过彼此。

有些伤感,许多人莫名其妙就地在我生命中消逝不见,好在我仍能于白纸黑字上觅得踪影,却徒留遗憾。


2020.03.06

午夜零时三十分,XXX邀请你参加视频会议。

呆滞地从被窝里钻出来,一条咸鱼失去了梦想。

曾经有很多追求,现在只想保住头发。


2020.03.05

头疼欲裂,左眼太阳穴疼了一天,再也不想看着荧屏了。这就是我将来的命运吗(在秃难逃)。。。

纪念一下关注到三位数,继等级刷到LV6白嫖了个域名后,又一夙愿达成~

等我闲下来还是想写点blog,不知道毕业前还能不能有闲下来的机会了。

很想毕业前去旅游一次,否则也太遗憾了,希望到时候能请得出来假吧。


2020.03.03

生于忧患,死于安乐。

真的是安逸的日子过多了,对比之前做助管,感觉做行政是真的舒适,这给别人谋策太伤身了,午觉睡到一半还给拉去开会。晚上刚到午夜。

工作到底是为了薪酬还是价值实现?做简单的事情觉得埋汰了自己,想去做点能体现自己价值的事情,却往往会适得其反。现在有种用自己的兴趣去挑战别人饭碗的拼命,很多我要研究很长时间的问题模型可能在别人看起来直接套用就完事了。年轻时的热情或许很快就会透支,真的卡得很死,很害怕到时间做不出东西,又害怕适应了之后会觉得很无趣。

但是即便如此我仍然坚持每天抽时间出去跑六公里,这次在家时间久争取要养成一个好习惯,到现在已经坚持四十多天了,回学校可能就没这么多时间了。

一个多月没有更新博客,之前是懒,现在是真的没有时间,上天保佑毕设能拿到良好。


2020.03.02

从事算法的工程师做起事来是真的狠,一天的工作量我刚看懂要做些什么,别人已经全部做完了。。。

压力山大,没什么空闲时间写论文都,晚上都得做到十一点才能搞完一天的工作量。两篇毕设怕不是要凉凉唉,返校不严于律己就要自取灭亡了。

最近抽空补番《南家三姐妹》,不错的老番,很平实的幽默。


2020.03.01

我从未见过如此厚颜无耻的开学第一课。。。


2020.02.26

《云归处》河图/不才[演唱] · 狐离[作词]

https://www.bilibili.com/video/av55392637

手书作品,虽然表意偏于耽美而背离了歌曲词作者狐离的本意,但是风格优雅,也不失为一种美丽的曲解。


2020.02.25

女人对口红没有抵抗力,男人对口红也没有抵抗力。

女为悦己者容[苦笑]

好想彻底遗忘[苦笑]


2020.02.24

从-5℃ 宅到 25℃,晚上穿羽绒服出去跑步,别人看我的眼神跟看弱智一样。

可惜还得挨到三月底才能返校,没办法只好被迫接受远程,总不能再啃一个月。。。

眼镜折了,后悔之前在丹阳没多整几副。


2020.02.18

挺好,坚持了一个月,现在终于可以一口气跑上五公里了。

要是能把跑步坚持到跟写日记一样就好了。


2020.02.03

好了返校限制时间推迟到23号。

这次回来虽然事情没做多少,但是每天高质量睡眠9小时以上,三餐不落,牛奶鸡蛋水果管饱,每天八杯水,晚饭后趁路上没人出去慢跑一小时,坚持了半个多月来卓有成效,还有几部高质量的一月新番(今年的一月新番质量还可以,异度侵入、虚构推理、某科学的超电磁炮T,都相当好看)可以追。

要不是各方所迫,谁TM要跑回学校做苦差事,默默无闻地做个最底层的普通人,与世无争,就算是种田也算得上是件美差。


2020.02.02

用老爬虫第三次重置了自己的游戏账号密码,我发誓要是再注册账号我就是狗。


2020.02.01

我是狗。


2020.01.31

明天再不写论文我就是狗。

但真的看不进去书了,又不让我返校。


2020.01.29

堕落到每天跟阿阳、英Gay打Factoriol。

—— CY啊CY,这样是不行的!

然后明天接着打。


2020.01.28

傍晚出太阳了。

春天会远么?


2020.01.26

今天打算更新点长的,刚才看了B站凉风Kaze更新的视频https://www.bilibili.com/video/av84941209,是对U神六年前的MAD作品https://www.bilibili.com/video/av345660进行逐帧解说,令人叹为观止。

对于动漫我直到三年前才开始接触,以前我对电影,电视剧以及动漫几乎是绝缘,对我来说音乐,下棋与桌游基本是我全部的娱乐。我三岁开始下棋,不认字前象棋军棋上的汉字已经是了然于胸,后来高中被带进三国杀的坑,一直打到高考第二天的晚上。后来大学以后被室友带进B站,才开始接触动漫。

一些人对动漫有高度评价,认为那些说动漫只是给小孩子看的人是愚昧的。平心而论,真正的好动漫是极少的,没有必要把动漫吹捧得这么高。我从2017年暑假开始补第一部番《刀剑神域》,到2020年暑假为止粗略估计补了近百部番剧,还不算这几年的追番。2018年我曾经用了两天刷完了64集的钢炼,清明3天刷了200集的妖尾,到今天也可以算是有一定的阅片量了。

为什么会看动漫?对于大部分宅来说,应该都是出于欲望。我也不例外,起初都是看了像《刀剑神域》、《天降之物》(事实上天降第二季应该算是比较有深度的番了)、《约会大作战》、《俺妹》、《埃阿芒罗老师》这类的后宫番,很多人的入宅番无外乎此。这类动漫本质在剧情、深度上没有可言,桥段大致相仿,只是单纯的爽番,很容易吸引男性,但看多了自然会审美疲劳。

所以看了一段时间后我看到了第一部让我深有触动的纯爱番《龙与虎》,《龙与虎》算是第一部让我触动的番剧,我对它的评价很高,因为脚本是日本一位女性作家写的,剧情在细节上描写的极为细腻,令人遐想。难能可贵的是,这部番剧到了的尾声部分越发精彩,其结局可谓巅峰,私以为《龙与虎》是校园恋爱类中无人能出其左的番。

于是自《龙与虎》后,我看了很多这种类型的纯爱作,包括《冰菓》、《会长是女仆大人》、《赤发白雪姬》、《野良神》、《月刊少女野崎君》等,确实很甜,我也心向往之,在番剧中找到了一些所谓的慰藉。

直到我看了《白色相簿2》,虽然我知道是一部胃疼作,但还是抽时间补了。补完我就后悔了,感觉一言难尽,但我同样认为《白色相簿2》是双女主类中最顶尖的作品,因为很真实。这是我第一部看完之后还想去玩相关游戏的作品,我记得那是2018年的国庆,我全网搜白色相簿2的游戏资源,因为我想知道动画后续究竟是什么,但是很失望,《白色相簿2》能封神的只能是序章单线,终章多支线后就没有所谓的剧情可言了,因为我觉得多结局是没有意义的,我只想知道真正的结局会是什么样的。

自此后我觉得纯爱番太虚幻,理想中的乌托邦,可欲而不可及。生活中更多的是悲剧,需要的是反思。于是从《钢之炼金术师》开始,我开始看了很多自以为有深度的番剧(大部分都是悲剧,所以给人很大的思考上的压迫感)。

  1. 《钢之炼金术师》可谓神作,64集的长度,几乎零差评,用了2天通宵看完(因为真的停不下来),深有感触。
  2. 《罪恶王冠》,虽然评分很差,因为很多人认为烂尾,这部作品是纯原创,没有小说/漫画作为脚本,加之大河内也是个鬼才,所以其实我认为不同人可以从中看出不同的东西,至少我认为《罪恶王冠》无论在作画还是深度上都是绝对顶尖的水平(极少让我二刷的番剧)。
  3. 《我的青春恋爱物语肯定有问题》,大老师确实名不虚传,弹幕中很多都是夸赞大老师的人,我不知道看这部番剧的人年龄分布怎样,但我觉得未成年人很难从中真正有所共鸣,成年后自闭久了,看到《春物》这种作品真的很惊艳。
  4. 《命运石之门》,也算是一部比较有深度的作品(但跟例举的其他几部不同,这是一部偏科幻的作品),也是公认的神作。
  5. 《电波女与青春男》,这部番在我看完后也很迷惑,但细细回想觉得也是一部偏开放式的神作,而且是一种绝无仅有的风格,给人留下的思考空间可以算是极其庞大的。

这段时间是我觉得动漫真正是一门艺术的时间,我觉得很多人对动漫确实是有极其错误的偏见,但到后来再看类似的作品就再难产生那种思想上的压迫感了,有几部后来看的也算是有深度的作品(《Angel Beats》《夏洛特》《可塑性记忆》,主要这些作品偏催泪向,而且很多时候看到一半就知道结局会怎样了,就没有那种触动感了),觉得真的不如之前的作品有启发。

再后来我开始看京都动漫(很遗憾京都动漫被纵火)的日常番,《玉子市场》、《轻音少女K-ONs》是我2019年印象最深的两部番剧,怎么说呢,这两部番有一个共性,就是剧情不温不火,但是就像温水煮青蛙一样,虽然剧情上不是很吸引人,不会有很大的触动,但是越看越想看,直到看完就会有失去一个朋友的那种很失落的感觉,因为真的有一种我这种人说不来的精彩。此外这类日常作中可以算是优秀的还有《Lovelive》、《干物妹小埋》(心情差的时候二刷,真的有效)等。

再后来这学期心态发生了极大的改变,开始变得看不进去动漫。只有纯少女系的百合番还能入得了眼,加之我发现了芳文社这个神奇的动漫公司,刷了一堆芳文社的作品,包括《迷途贴》、《此花亭奇谭》(这部是神作,不单是单纯的百合番)、《一起一起这里那里》(少有的芳文社的纯爱番),《恋爱研究所》等,觉得百合真的是很美好的东西(限二次元),看起来没有任何压力,绝对的纯洁,关键芳文社作画真的好。这时候看动漫已经非常单纯的就是寻求快乐,这学期有所上升之后就觉得还是需要及时行乐的。

其他零零散散的也有不少神作:

  1. 《狼与香辛料》(这部作品算是意外之喜,没有想到这么好看,强烈推荐)
  2. 《GOSICK》(私以为推理番中的巅峰作,维包子这个人物设定很有创新)
  3. 《凸变英雄》(国产神作,竟然能过审也是奇迹)。

当然也有很多剧情向的作品,论深度谈不上神作但确实很耐看:

  1. 《Fate Stay Night》(私以为Fate系列中最优秀的一作)
  2. 《杀老师》(因为番名难过审,还有《三年E班》《章鱼老师》《黄老师》等别名,其实也可以算到神作中,但是剧情真的太好了,我个人觉得它的剧情掩盖了它结局升华的光芒,是一部非常优秀的作品),相比于《钢炼》,个人觉得后者在剧情及深度上都在《杀老师》之上,所以就没有把他们放在一起了。
  3. 《某科学的超电磁炮》:B站镇站神作,而且还是一部百合番。
  4. 另外新番中也有不少:《刀剑神域 Alicalization》《鬼灭之刃》《这个勇者明明超强却过分慎重》《女高中生的虚度日常》等,这两年的新番里确实有很多好作品,但仍然缺少时间的沉淀,我就不一一举例了。

其实我今天突然想写这些,一方面是局势之下,人心惶惶,我觉得人们需要一些慰藉,对我来说看番是最好的放松方式了,有人说看完一部番就像失去了一个好朋友,我对此可以说是深有感触,跟一个真正能算得上朋友的人交流,真的很快乐。另一方面是这么多年看了这么多番,也想做个总结,虽然这里我只是列举了小几十部番剧,但我真正看过的远超这些,也不乏很多烂作,俗作,大部分也都是中庸之作。我一直觉得看番与看书一样是个学习的过程,一部真正有价值的番剧,足够让人反复观看与回味。


2020.01.25

(1)

也许S只是群发了祝福,但S无法知道是我列表中唯一给我发送新春祝福的人。

然后晚上被近期诸事烦得不行,又手贱去翻了S的微博,看到18年8月份的POST,我才发现自己是多么幼稚。

什么都怕麻烦,所以我总是把不擅长的事情想得过于简单,以为一切都能跟想象中的一样顺利。不去做会害怕失去,但没有真正了解对方就做又过于草率,到头来不过是强加意愿在别人身上。

以前我一直隐居幕后,以君子自居,以德自律,喜怒不形于色。这学期我取回了那些本属于我的名誉与认可,才发现以前只是我太弱小,只要稍微膨胀一些,也不过与俗人无异。

(2)

连续两天数字翻倍,事态堪忧。如果缺乏有效举措,在三月来临之前,结果不堪设想。

家里从爸爸咳嗽到现在妈妈也被传染了,我回到镇上后每日坚持环镇五公里的跑,身体素质还算过得去,健康状况也还良好,即便真的被传染了病毒倒也不怕会死,关键父辈祖辈这些人若当真感染了,恐怕是凶多吉少,不死也得脱层皮。

到时候我就真的是孤家寡人了,好在现在养活自己倒也没太大问题。

PS:为什么镇江到现在都没有确诊病例呢?按理说镇江也算是交通枢纽,总比我们这种偏僻小城好。醋难道真的有用。。。


2020.01.24

此城,于我已无用。                                                                                                                     —— 李儒 · 焚城

可能有些人不想活,但在真正的灾难面前,没有人不怕死。

但为了消除灾难,总是需要有人付出代价,如今尚有老一辈人能挺身而出,等到了需要我们这一代人站出来的时候,又是否能有人愿意做出牺牲。

由俭入奢易,由奢入俭难。我们这一代人安逸的日子过得太久了,嘴上功夫是比手上功夫厉害不少,不知道在灾难到来的时候,究竟是去做救世主、炮灰,抑或是拖后腿的人。

学习强国,不只是挂在嘴边。不求能强国,但求能自强。


2020.01.23

人总是对未知的事物恐惧。

小孩子无知,所以不害怕;老年人见得多,所以也不害怕。

因此消除恐惧的方法无非有两种:

  1. 学习。用已知填补未知,以达到消除未知,乃至根除问题。
  2. 睡觉。立竿见影,一睡就是一天,眼不见心不烦。

若命中自有劫数,再怎么防范也无济于事。天命这东西人活得越久,越容易去相信。

有点遗憾自己不是学医的,想想自己还有三个高中同学在武大读书,不少同学还是学医的。总是希望将来的某一天,自己学的东西能用在拯救和保护自己想要珍视的人身上。

总之诸位安好。


2020.01.22

1. 下午把阿凯买的服务器配了一下,把爬虫都挂上去,终于可以用自己的机子做正事了;

2. 相对于SARS,无论是医疗技术,媒体传播还是人口素质都不再是十七年前能同日而语的,虽然那时我们还小,很多事情都没有记忆,但怎么也算是活过来了。


2020.01.19

1. 女孩子追起星来就完全像是个小孩子了,哪还是90后的老阿姨。不过AYG确实是个唱功实力派。

所以说有信仰就能长命百岁,像我这种没信仰的注定得是挂得早的。

2. 我今天才看到她1月7日有回复邮件的,虽然也没什么区别。

3. 想要大年初一去一趟镇江金山寺,没什么特别的理由,也许确实是我身上背负了太多负能量,烧香拜佛说不定有点用。


2020.01.18

我发现自己总是在这种细枝末节的问题上钻牛角尖。

但今天算是杠上了,我要真想过审,还能拦住我不成。

果然解决问题的最好办法就是解决提出问题的人。

我本以为这种漏洞只是在91flac这种小众网站上会有,然后测试了网易云网页版,同样有类似的漏洞,所谓的版权付费真的不是智商税么,我就想知道究竟是谁在愚弄谁?

我觉得只要我愿意,我可以一个晚上给它把曲库全部弄下来,这年头一切不就是透明的么,版权如此,个人信息也是如此。


2020.01.17

意外地失眠了,脑子里满是乱七八糟的东西,到两点才睡着,三点三刻又起来赶车。

回家,空气清新,心情舒畅,似乎也是一种解脱。

我好像有点明白佛系追星是怎么回事了。。。

大补觉回了一口血,起来发现说人奖和社奖兼得者只会发一份奖金,这确定不是院里给贪污掉了吗。。。

看了几个朋友这学期的成绩,满足地离开了,哈哈哈~


2020.01.15

生命也许就是这样,多一分经验便少一分幻想,以实际的愉快平衡实际的痛苦。​​​​


2020.01.14

可以,一路水到LV6,还嫖到个自定义域名。


2020.01.13

下午跟CC算是形式上告别了,虽然还有几天才会彻底结束。

替她办了整整一年的杂活。可能这一年里陪伴我时间最长的就是CC了,对我来说陪伴是友谊最好的,也是唯一的增进方式。也算是生出点感情,就连我这种话极少的人在办公室里也会跟她聊上几句。

然无宴不散,我变得越来越容易其他人和事的影响,如果不出意外我本该继续留在CC手下。

虽然我并不喜欢锋芒毕露,但若是一直如此,再锐利的锋芒可能也会沦为鸡肋。

趁年轻还是要出去做些事情。我的青春已经留下太多遗憾,至少在还算擅长的事情上,我还想再狂几年。


2020.01.11

意义非凡的事情总是碰巧发生的。只有不重要的事才有周全的计划。                                             ——珍妮特·温特森《时间之间》 ​​​ ​​​​


2020.01.08

缘是可遇不可求的。                                                                                                                                         ——Vae《不煽情》


2020.01.01

2020年想单独用一篇博客用来给自己发帖,没什么理由,就是想写。

评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符 “速评一下”
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页