推荐一款比较实用的互联网资源存档工具:ArchiveBox,可离线保存你浏览过网页内容,其中包括 HTML 页面、PDF 文件、图像视频等内容。
其中较为强大的部分,是开发者可通过命令行工具,自定义网站的提取内容以及输出格式,并在后期通过 ArchiveBox 提供的可视化界面管理离线内容,操作轻松便捷。
如果担心数据的安全性及私密性,亦可选择自行托管服务器。ArchiveBox 支持 Windows、Linux、macOS 等主流操作系统,拥有多种不同方式的安装方式。
GitHub:github.com/ArchiveBox/ArchiveBox
航天投资控股的破事警告
😅
后来据王晋年院士回忆,在被打期间,他隐约记得张陶一直在叫嚷“老子就是要当、老子有花不完的钱、老子就是要打死你......”
为了方便本科生撰写小型论文或实践报告,浙大一名学生在 GitHub 开源了一个仿 LaTeX 主题:Typora LaTeX theme。
让创作者能更注重于内容输出,而非样式排版。在书写时,凭借简单标记,并替换样例模板中的个人信息,便可输出媲美卷王由 LaTeX 排版的精美论文与报告。
GitHub:github.com/Keldos-Li/typora-latex-theme
多项式解析
#include <cstdlib>
#include <ctype.h>
#include <stdio.h>
#include <sstream>
#include <vector>
// 项
struct term
{
int mul;
int exp;
};
// 多项式
typedef std::vector<term> poly;
enum poly_parse_state
{
ppoly_init, // 初始状态
ppoly_mul, // 系数
ppoly_var, // 变量
ppoly_exp, // 指数
ppoly_tem, // 产生一个项
ppoly_suc, // 产生一个多项式
ppoly_err // 错误
};
// 状态转移
#define transfer_state(s) {state = s; continue;}
// 解析多项式
poly parse_poly(std::string polystr)
{
std::istringstream is(polystr);
std::string buff;
term t{.mul = 0, .exp = 0};
poly p;
int state = ppoly_init;
while(1)
switch(state)
{
case ppoly_init:
{
int ch = is.get();
if(isdigit(ch))
{
buff.push_back(ch);
transfer_state(ppoly_mul);
}
if(isalpha(ch))
{
t.mul = 1;
transfer_state(ppoly_var);
}
if(ch == EOF)
{
transfer_state(ppoly_suc);
}
transfer_state(ppoly_err);
}
case ppoly_mul:
{
int ch = is.get();
if(isdigit(ch))
{
buff.push_back(ch);
transfer_state(ppoly_mul);
}
if(isalpha(ch))
{
t.mul = (int)strtol(buff.c_str(), NULL, 10);
buff.clear();
transfer_state(ppoly_var);
}
if(ch == '+')
{
t.mul = (int)strtol(buff.c_str(), NULL, 10);
buff.clear();
t.exp = 0;
transfer_state(ppoly_tem);
}
if(ch == EOF)
{
t.mul = (int)strtol(buff.c_str(), NULL, 10);
t.exp = 0;
buff.clear();
transfer_state(ppoly_tem);
}
}
case ppoly_var:
{
int ch = is.get();
if(ch == '^')
{
transfer_state(ppoly_exp);
}
if(ch == '+')
{
t.exp = 1;
transfer_state(ppoly_tem);
}
if(ch == EOF)
{
t.exp = 1;
transfer_state(ppoly_tem);
}
}
case ppoly_exp:
{
int ch = is.get();
if(isdigit(ch))
{
buff.push_back(ch);
transfer_state(ppoly_exp);
}
if(ch == '+')
{
t.exp = (int)strtol(buff.c_str(), NULL, 10);
buff.clear();
transfer_state(ppoly_tem);
}
if(ch == EOF)
{
t.exp = (int)strtol(buff.c_str(), NULL, 10);
buff.clear();
transfer_state(ppoly_tem);
}
}
case ppoly_tem:
{
p.push_back(t);
transfer_state(ppoly_init);
}
case ppoly_suc:
{
return p;
}
case ppoly_err:
{
fprintf(stderr, "poly parse error\n");
p.clear();
return p;
}
}
}
// 输出多项式
void print_poly(poly p)
{
for(term t : p)
{
printf("%d * x ^ %d\n", t.mul, t.exp);
}
}
// 多项式测试
void poly_test(std::string name, std::string s)
{
printf("test [%s] | input: %s\n-----\n", name.c_str(), s.c_str());
print_poly(parse_poly(s));
puts("");
}
int main()
{
poly_test("pure mul", "2");
poly_test("pure exp", "x^2");
poly_test("pure var", "x");
poly_test("mul & var", "2x");
poly_test("mul & exp", "2x^2");
poly_test("poly", "x^2+2x+2");
return 0;
}
GitHub 上一款开源的语音聊天软件:mumble,具备低延迟、通信质量高、安全私密性强等特点,适合用于通话或游戏交流。
该软件服务器端与客户端源码均已开源,用户可自行托管到自己服务器,客户端支持 Windows、Linux、FreeBSD、macOS 等主流操作系统。
官网: 网页链接
GitHub:github.com/mumble-voip/mumble
莉特雅 literal
写代码业余爱好者 amateur coder