Minecraft Forge服务器搭建
放一个Minecraft服务器搭建的博文,免得后面什么时候要用上又把过程忘了。。。
这个教程后半段是参考了网络上的教程,因为现在没有搭建的需要所以还没进行实际操作(逃
此处搭建服务器为linux服务器,minecraft版本为1.12.2
安装MCSManagerMCSManager用于网页端管理mc服务器,不需要可以跳过这一步
MCSManager仓库
# 安装 Node 版本控制工具(若没有 wget,请安装它)wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash# 关闭终端重新打开再执行以下命令# 项目支持 8.0 版本以上,这里使用11版本nvm install 11.0.0nvm use 11.0.0# 克隆仓库git clone https://github.com/suwings/mcsmanager.git# 进入目录cd mcsmanager/# 安装依赖库npm install# 启动面板sudo npm start #或 sudo node app.js
...
celery任务队列学习
学习celery是为了后面写一个抢票系统,先咕咕咕一下。。
本文主要实现在Django中使用celery,安装模块为django-celery celery redis
Celery的基本架构(此处是一堆废话)
Celery的架构有三个部分:消息中间件、任务执行单元、任务结果存储
消息中间件(Broker):任务调度队列,接收任务并将任务存入队列。Celery不提供队列任务,本文使用RabbitMQ(因为我配置的redis一直没法让celery连接上)
任务执行单元(Worker):任务执行处理单元,它实时监视消息队列,获取队列中调度的任务并执行。
任务结果存储:用于存储任务的执行结果,以供查询
Django中celery的配置首先配置环境,python环境安装celery django-celery,本地配置 RabbitMQ数据库,我本地建的项目名为CeleryTest
项目基本目录结构:
123456789101112131415161718CeleryTest├── app│ ├── __init__.py│ ├── admin.py│ ├── apps.py ...
记一次小程序开发
锲子本来以为参加不了已经凉了的比赛,后面被学长拉进了坑然后四个人连着开发了十天,设计方案改了又改最后重新定了方向最后三天通宵两天才弄完。
一开始接触这个比赛是在10月份的时候被拉去跟着搞腾讯的云开发讲座,然后当时也想组队参加但是没有点子也就没怎么想了。
正式开始开发的时候才发现比赛所给的API还有一系列操作过于睿智,甚至图片切割的API都是用自己服务器实现。
得到了些什么
对JS的异步处理熟悉了一些
了解了一个应用程序大概的设计模式
明白了在团队中交流的重要性
了解了微信小程序的开发流程
明白了自己所学过少
接触到了一点python网络编程
知道了在多人项目中使用git进行版本控制的重要性
大概可以开始django + vue的博客项目了
明白了互联网公司的996是怎么来的
小记在一开始学长想的方案是做一个基于腾讯云人脸识别API的寻人平台,但是在开发了5天的时候发现这个项目对于找到人的一方用户是没有驱动力上传图片的
于是后面换成开发一个寻宠平台,但是这个规划后面也凉了,因为在一次讨论分工过后突然发现我们的核心功能离AI越来越远
在思考了半天(真的是半天)之后,另外一个学长想到可以做 ...
《汇编语言》学习笔记
寄存器(reg): CPU中存储数据的器件
在8086CPU中,有14个寄存器,可以分为8个通用寄存器、1个指令指针寄存器、1个标志寄存器以及4个段寄存器
通用寄存器:用于传送和暂存数据,也可参与算术逻辑运算,并保存运算结果。AH&AL = AX (accumulator):累加寄存器,主要是在进行运算的时候存放操作数,同时所有的I/O指令都使用这一寄存器与外界设备传送数据BH&BL = BX (basic):基址寄存器,用于地址的索引CH&CL = CX (count):计数寄存器,用于计数,在移位操作以及循环(loop)时作为隐含的计数器DH&DL = DX(data):数据寄存器,用于数据传递。在书中以8086CPU为例,如果是要用32位的数作为被除数时,通过使用DX与AX存放数据,DX放高16位,AX放低16位SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置(也就是当前栈顶的偏移地址)BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置SI(Source Index):源变址寄存器,可 ...
逆向工程学习--Acid burn
0x00 前言
这些CreakMe小程序是从吾爱破解上找到的160个练习然后最近在学逆向&汇编就拿来练练手
0x01 注册码的破解最近才开始学用Ollydbg不熟悉。。然后快捷键还有功能什么的还没有把握所以一开始动态调试就是一个断点一个断点的下跟踪程序的运行,要找到主要执行的地方就异常的慢。。看了一下别人做的才学会在运行过程中F12直接暂停程序运行跟踪汇编位置。。程序界面是这么一个样子:就是要输入用户名对应注册码的样子,先随便输入一个,然后等提示框,F12暂停定位到对应的位置Alt-K到堆栈界面,可以看到MessageBox函数的调用有两个对MessageBox的调用,能大致确定是下面一个才是后面弹出提示框的时候调用的函数然后进到这个函数的位置,在调用MessageBox的函数头部打个断点,再重复一次运行到断点位置能看到右下角的栈窗口看到被压栈的有个可疑的字符串。。试一试输入然后提交试试,然后就成功了调用的这个函数应该是为了输出失败信息,然后在这之前应该有一个函数是用于验证注册码的,可以在栈里看到,这里用于下面的分析注册码生成算法
0x02 注册码算法分析从上面调用Messa ...
PE文件结构
前言
PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)——百度百科
简述PE文件使用的是平面地址空间,代码和数据被合并在一起,组成庞大的组织结构。文件的内容分割为不同的区块(如.data、.idata、.text,这些区块甚至可以自己命名),区段中包含代码数据,各个区块按照页边界来对齐,区块没有限制大小,是一个连续的结构。每块都有他自己在内存中的属性,比如:这个块是否可读可写,或者只读等等。在加载的时候,windows加载器遍历整个PE文件并决定文件的哪个部分被映射,这种映射方式是将文件较高的偏移位置映射到较高的内存地址中。
基地址PE文件加载到内存后,内存中的版本被称为模块。映射文件的起始地址被成为模块句柄,可以通过模块句柄访问内存中的其他数据结构。这个初始的内存地址也被称为基地址(ImageBase)。
VA & RVAVA:进程虚拟内存的绝对地址RVA:相对虚拟地址,从某个基准地址开始的相对地址虚拟地址 ...
Codeforces1207-C Gas Pipeline
题目大意:在$x$轴的非负区域,有长度为$n$的路,需要在这条路上铺设管道;如果在某个位置是十字路口的话,需要将这个位置的管道高度铺设在$y = 2$的位置上面,而在非十字路口的位置,可以铺设在$y = 1$的位置,也可以铺设在$y = 1$的位置,而不同高度的情况下需要对应高度的管道架;设一单位的管道需要的费用是$a$,一单位管道架需要的费用是$b$,求铺设到终点所需的最小费用
被B题卡了快一个小时才看C题。。满足最优子结构和无后效性就是DP了这次又是写出了C的时候没写出B呢。。。设$f_{i,j}$为铺设到$i$位置的时候高度为j的最小花费那么可以得到转移方程在$s_i$为1的时候:$$\begin{cases}f[i][0] = INF\f[i][1] = min(f[i-1][0] + 2a,f[i-1][1] + a) + 2b\\end{cases}$$在$s_i$为0的时候:$$\begin{cases}f[i][0] = min(f[i-1][1] + 2a,f[i-1][0] + a) + b\f[i][1] = min(f[i-1][0] + 2a,f[i-1][1 ...
Codeforces1207-B Square Filling
题目大意:给出两个$n \cdot m$的矩阵$A$和$B$,一开始矩阵$B$全为0,每次可以选定一个坐标$(x,y)(1 \le x < n、1 \le y < m)$,将$(x,y)、(x,y + 1)、(x + 1,y)、(x + 1,y + 1)$都变成1,求将矩阵$B$变为$A$的最小步数,并输出所有的操作的坐标。
这个思维题又把我卡死了,C题都写得出来但是我写不出这个B,结束前3分钟才给A掉然后没时间写别的了。。要操作的次数最少,也就是说每次操作要保证改变的0的数量最多把一个0的位置变成1,假设这个坐标是$(x,y)$,那么可以通过修改$(x - 1,y - 1)、(x - 1,y)、(x,y - 1)、(x,y)$这四个位置来达到那么每次直接扫描一下$B$中是0但$A$中是1的位置,如果操作的区域中在$A$中没有0,就可以求出一个能使得这次操作最大化的操作位置来进行操作显然时间复杂度是$O(nm)$的,然后我这里还带了一些常数,但是影响不大
这一场从$\Delta$-80+在最后3分钟拉回来。。最后涨了一分。。。(我还真是个弟弟。。思维题必杀我
1234567 ...
Codeforces-Round#580(Div.2)解题报告
A - Choose Two Numbers给出两个数组,长度分别为$ n、m(1 \le n \le 100、1 \le m \le 100)$,找出两个分别属于两个数组的数,使得它们的和不在两个数组里
暴力
裸暴力,手滑了两发白给。。
123456789101112131415161718192021int n,m;int a[300],b[300];bool mp[1000];int main() { mst(mp,0); ios::sync_with_stdio(0); cin>>n; for(int i = 1;i <= n;i++) cin>>a[i],mp[a[i]] = 1; cin>>m; for(int i = 1;i <= m;i++) cin>>b[i],mp[b[i]] = 1; for(int i = 1;i <= n;i++) { for(int j = 1;j <= m;j++) { ...
Codeforces-570-div3解题报告
div3都能给我打掉分,我真的是个菜狗了。。
A - Nearest Interesting Number
给出一个数$ n $问大于等于它的哪个数的每个位相加起来和是4的倍数
枚举
123456789101112131415161718int a;int main(){ cin >> a; for(int i = a;i <= 2000;i++){ int tmp = i; int x = 0; while(tmp){ x += tmp % 10; tmp /= 10; } if(x % 4 == 0){ cout<<i<<endl; break; } } return 0;}
B - Equalize Prices
给出一个数列$a_i$,问能不能找到一个尽量大的数 ...