wakeonlan! 树莓派远程开机
你需要对树莓派做一个内网映射,可以在外网访问树莓派以及整个局域网的设备。我用的是frp,但本教程并不包含内网映射 frp配置请查看《frp内网穿透 树莓派+阿里云服务器》 实现远程开机是通过一个软件,你可以用以下命令下载它 1apt-get install wakeonlan 使用12# wakeonlan -i [广播地址] [MAC地址] 下面是例子wakeonlan -i 192.168.1.255 FF:FF:FF:FF:FF:FF 广播地址一般局域网的广播地址是192.168.X.255,X位置可能会不同,根据你的内网地址的广播地址填写 MAC地址在windows系统中,打开CMD,输入ipconfig...
dateMaker.js
这是about页面中用到的一个js程序,可以根据一个起始日期计算距离当前的差值,精确到毫秒。 程序本体:由一个dateMaker获取数据函数和一个time_valide日期格式化函数组成 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475function dateMaker(id) { var dom = document.querySelector('#'+id); // 计时器间隔 var interval_time = dom.getAttribute('interval-time') !== null ? parseInt(dom.getAttribute('interval-time')) : 1000; // 额外添加的时间,逗号隔开 var plus_time =...
被恶心了两次的PHP安装错误
web开发中我是用的XAMPP集成环境,安装的PHP版本是5.6,我又单独下了个7.3版本,这样只需要单独写个配置文件,之后切换加载不同的配置文件就可以切换PHP版本了。 这次的问题是,昨天PHP-7.3的目录坏了,原因至今不详 打不开也删不掉,我决定这个先暂时放一放,直接去下载一个新的PHP 于是在官网下完后,解压、改名,接下来修改配置文件,新的PHP是没有php.ini这个文件的,但在文件夹下有两个文件php.ini-development和php.ini-production是php.ini的模板,分别对应着开发版和线上版,根据需要复制一份然后把名字改成php.ini就可以 这还没结束,你还需要开启扩展,比如;extension=openssl,把你需要的扩展前面的分号去掉 这次的问题运行Apache、Mysql一切正常,打开最近用Laravel开发的网站发现,它报了个错! 1Call to undefined function...
魔兽争霸3连接PvPGN服务器
魔兽争霸III首先你的魔兽必须得是正版,输入CDKey激活的那种(大概吧),你可以在这里下载 war3.zip 1.09G 提取码 goqr Battle.net Gateways Editor这是战网网关编辑器,修改成PvPGN服务器的地址 下载:gwe.zip 208.0K 点击 Add Gateway 添加Name 随便Zone 没提供的话就0吧IP PvPGN 服务器IP或域名 WarCraft 3 PvPGN Loader这是运行所需要的文件,有它你才能连接PvPGN服务器 下载:w3l.zip 20.0K 把解压缩得到的 w3l.exe、w3h.dll、wl27.dll 放到魔兽争霸目录下,运行 w3l.exe 打开游戏 点击Battle.net,然后注册或者输入用户名和密码登陆,即可看到以下界面
树莓派搭建PvPGN服务器
简介PvPGN 和 PvPGN PROPvPGN 全称:Player versus Player Gaming Network,是一款免费的开源跨平台服务器软件,支持Battle.net和Westwood Online游戏客户端PvPGN在2011年停止维护,PvPGN PRO是PvPGN的一个分支版本,持续维护更新。 详情查看Github项目 搭建参考官方教程 首先下载编译 PvPGN 源代码所需的软件、工具 这里用的存储方式是mysql,所以下载了libmysql++-dev,你可以不下载mysql数据库,根据自己的需求来,甚至可以用文件存储的方式保存玩家信息等 其他存储:pgsql、sqlite3、odbc 1sudo apt-get -y install build-essential clang libc++-dev git cmake zlib1g-dev liblua5.1-0-dev libmysql++-dev 这会下载一堆编译所需工具 然后下载 PvPGN 的源代码,找个目录执行命令下载并解压 12wget...
Chrome插件跨域请求
Chrome插件中,可以跨域的地方只有background js和popup js这两个地方,popup js是右上角那个弹出页,只有弹出的时候才有效,所以定义跨域监听大概不现实 这样只能在background js,我们需要在background js中定义一个监听函数,来监听其他页面传过来的信息。根据传来的值,判断是否是API请求 下面是一个有get和post的简易解决方案 1234567891011121314151617181920212223242526272829chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) { switch(request.type) { case 'get': fetch(request.url) .then(function(response) { return response.json() }) .then(function(json) {...
Objective-C 笔记 – 网络请求
获取页面数据 123456789101112- (void)viewDidLoad { [super viewDidLoad]; // URL NSURL * url = [NSURL URLWithString:@"https://m.baidu.com"]; // 请求 NSURLRequest * request = [NSURLRequest requestWithURL:url]; // 连接服务器 [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) { // data是返回数据的16进制,需要转换 NSString * html = [[NSString alloc]...
Objective-C 笔记 – NSOperation
本质上是GCD的并发队列异步执行,是对GCD的面向对象的封装,是苹果大力推荐的并发技术 与GCD的对比: GCD: iOS 4.0 推出 针对多核处理器做了优化的并发技术 是C语言 提供一次执行、延迟执行、调度组 将任务添加到队列(串行、并发、主队列、全局队列),并且指定执行任务的函数(同步、异步) NSOperation: iOS 2.0 推出 底层是GCD 面向对象 提供最大并发线程、队列暂停继续、取消所有操作、指定操作之间的依赖关系 将操作添加到队列(并发),然后立即异步执行 NSOperation 是一个抽象类,继承NSObject 特点:不能直接使用 目的:定义子类共有属性和方法 子类: NSInvocationOperation NSBlockOperation 123456789101112- (void)demo1 { NSInvocationOperation * op = [[NSInvocationOperation alloc] initWithTarget:self...
Objective-C 笔记 - GCD
全称是Grand Central Dispatch,🐮🍺的中枢调度器,纯C语言,提供非常多强大的函数。 1234567891011121314151617- (void)viewDidLoad { [super viewDidLoad]; [self gcdDemo1];}// 同步执行方法,这里不执行完就不会执行下一个任务- (void)gcdDemo1 { // 创建队列 dispatch_queue_t q = dispatch_get_global_queue(0, 0); // 定义任务 block void(^task)() = ^{ NSLog(@"%@", [NSThread currentThread]); }; // 添加任务到队列并执行 dispatch_sync(q, task);} 也可以直接写成 123dispatch_sync(q,...
Objective-C 笔记 – 多线程
互斥锁12345678910111213141516171819202122232425262728@property(nonatomic, assign) init tickets;- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event { self.tickets = 20; NSThread * t1 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTickets) object:nil]; [t1 start]; NSThread * t2 = [[NSThread alloc] initWithTarget:self selector:@selector(saleTickets) object:nil]; [t2 start];}- (void)saleTickets { while(YES) { [NSThread...