开源的一款单机麻将游戏,使用C++开发。
Cocos2d-X定时任务实现参数传递
通常Cocos2d-X实现定时任务通过
void Node::schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay); void Node::scheduleOnce(SEL_SCHEDULE selector, float delay);
这两种方式,都是传递 SEL_SCHEDULE 类型的方法指针,查看SEL_SCHEDULE定义可以发现定义如下:
typedef void (Ref::*SEL_SCHEDULE)(float);
这个定义只传递一个 float 参数,如果需要传递参数怎么办呢,其实可以通过如下方式:
getScheduler()->schedule(CC_CALLBACK_1(AAA::run, this, 参数1, 参数2), this, 0.0f, 0, 2.0f, false, “定时器名称”);
void Scheduler::schedule(const ccSchedulerFunc& callback, void *target, float interval, unsigned int repeat, float delay, bool paused, const std::string& key)
定时任务的Node一定要加入到 场景中才会执行哦。!
C语言的bit位控制工具FvMask
实际中经常通过bit的 0 或者 1 来控制系统状态,可能就需要个专门用来控制bit的工具类,下面就分享个。
例如:
m_dwRuleIndex = 0;
FvMask::Add(m_dwRuleIndex, _MASK_(1)); //第一个bit位置改为1
FvMask::Del(m_dwRuleIndex, _MASK_(1)); //第一个bit位置改为0
FvMask::HasAny(m_dwRuleIndex, _MASK_(1)); //判断第一个bit位置是否为1
#pragma once namespace FvMask { template<typename TFlag, typename TMask> bool HasAny(const TFlag flag, const TMask mask) { return ((flag&mask) != 0); } template<typename TFlag, typename TMask> bool HasAll(const TFlag flag, const TMask mask) { return ((flag&mask) == mask); } template<typename TFlag, typename TMask> void Add(TFlag& flag, const TMask mask) { flag |= mask; } template<typename TFlag, typename TMask> void Del(TFlag& flag, const TMask mask) { flag &= ~ mask; } template<typename TFlag, typename TMask> TFlag Remove(const TFlag flag, const TMask mask) { return (flag & (~ mask)); } template<typename TFlag, typename TMask> TFlag IsAdd(const TFlag oldFlag, const TFlag newFlag, const TMask mask) { return (((oldFlag&mask) == 0) && ((newFlag&mask) != 0)); } template<typename TFlag, typename TMask> TFlag IsDel(const TFlag oldFlag, const TFlag newFlag, const TMask mask) { return (((oldFlag&mask) != 0) && ((newFlag&mask) == 0)); } } #ifndef _MASK_ #define _MASK_(flag) (0X01 << (flag)) #endif
根据两点的经纬度计算距离C
通过地球上的两点经纬度计算物理距离,单位是米
double rad(double d) { return d * M_PI / 180.0; } /** * 获取距离 * @param lon1 * @param lat1 * @param lon2 * @param lat2 * @return */ double distance(double lon1,double lat1,double lon2, double lat2) { double radLat1 = rad(lat1); double radLat2 = rad(lat2); double a = radLat1 - radLat2; double b = rad(lon1) - rad(lon2); double s = 2 * asin(sqrt(pow(sin(a/2),2)+cos(radLat1)*cos(radLat2)*pow(sin(b/2),2))); s = s * 6378137; return s; }
WordPress 安装插件 cURL error 77
第一步:执行命令
yum install ca-certificates
第二步:重启php-fpm
/etc/init.d/php-fpm restart
重新安装插件,搞定!
eclipse启动CrossApp失败,sun/misc/BASE64Encoder
提示错误如下:android每次运行都是报这个错Errors occurred during the build. Errors running builder ‘Android Package Builder’ on project ‘包名’. sun/misc/BASE64Encoder
原因是系统安装了JDK1.9,卸载JDK1.9 切换到 JDK1.8 后一切正常!
C语言十六进制字符串与字节数组相互转换
直接上代码片段
/** * 字节数组转字符串 * @param source * 字符数组 * @param length * 字符数组长度 * @param target * 字符串 */ void uint8_2_hex(unsigned char *source, unsigned int length, unsigned char *target) { unsigned char ddl, ddh; for (int i = 0; i < length; i++) { ddh = static_cast<unsigned char>(48 + source[i] / 16); ddl = static_cast<unsigned char>(48 + source[i] % 16); if (ddh > 57) ddh = static_cast<unsigned char>(ddh + (97 - 58)); if (ddl > 57) ddl = static_cast<unsigned char>(ddl + (97 - 58)); target[i * 2] = ddh; target[i * 2 + 1] = ddl; } } /** * 字符串转字节数组 * @param source * 字符串 * @param length * 字符串长度 * @param target * 字节数组 * @param n * 转换后长度 */ void hex_2_uint8(const unsigned char *source, size_t length, unsigned char *target, size_t &n) { n = 0; for (int i = 0; i < length; i += 2) { if (source[i] >= 'a' && source[i] <= 'f') { target[n] = static_cast<unsigned char>(source[i] - 'a' + 10); } else if (source[i] >= 'A' && source[i] <= 'F') { target[n] = static_cast<unsigned char>(source[i] - 'A' + 10); } else { target[n] = static_cast<unsigned char>(source[i] - '0'); } if (source[i + 1] >= 'a' && source[i + 1] <= 'f') { target[n] = static_cast<unsigned char>((target[n] << 4) | (source[i + 1] - 'a' + 10)); } else if (source[i + 1] >= 'A' && source[i + 1] <= 'F') { target[n] = static_cast<unsigned char>((target[n] << 4) | (source[i + 1] - 'A' + 10)); } else { target[n] = (target[n] << 4) | (source[i + 1] - '0'); } ++n; } }
通过wget下载JDK
一定要添加Cookie处理,要么会下载失败!!
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.tar.gz
区块链相关的一些开源库
加密算法库:https://github.com/trezor/trezor-crypto
区块链相关的各种加密、编码算法库
以太坊IOS开发库:https://github.com/ethers-io/ethers.objc
使用Object-C编写的以太坊开发库
以太坊钱包:https://github.com/ethers-io/EthersWallet-ios
使用ethers-io框架开发的IOS以太坊钱包
椭圆曲线加密:https://github.com/bitcoin-core/secp256k1
比特币椭圆曲线加密库
SECP256K1库IOS版:https://github.com/beyonderyue/ios-secp256k1
SECP256K1编译为IOS库
以太坊JAVA版:https://github.com/ether-camp/ethereum-harmony
基于ethereumJ实现
WordPress环境 云服务器CentOS 装机全过程
0x00、首先你要有台云服务器,并在控制台安装CentOS7.4-64位
0x01、使用SSH Shell链接服务IP
常用SSH Shell 工具有 windows: XShell、Secure Shell等等
Linux系统下可以直接使用终端 iTerm
0x02、修改SSH登录端口
一、修改sshd_confg配置文件
找到文件中的 Port 22 ,把前面的#注释去掉,改成自己想要的端口!
二、开放端口防火墙
1、执行:iptables -I INPUT -p tcp -m state –state NEW -m tcp –dport 端口号 -j ACCEPT
2、执行:iptables-save
3、执行:iptables -nL –line-number 可以查看端口开放情况
4、执行:systemctl restart sshd.service 重启SSH服务
0x03、安装LNMP
整个安装过程需要几十分钟
1、执行:wget http://soft.vpser.net/lnmp/lnmp1.5.tar.gz -cO lnmp1.5.tar.gz && tar zxf lnmp1.5.tar.gz && cd lnmp1.5 && ./install.sh lnmp
选择MariaDB 10.2.14、Install PHP 7.2.6、 Don’t install Memory Allocator
0x04、安装GIT(可选)
由于网站代码托管在GIT上,所以通过GIT来更新网站。
注意:nginx等网站服务器一直要禁止.git目录的访问
在server{}段内增加
location ~ /\. { deny all; }
0x05、上传网站代码
如果使用git,直接通过git clone https://github.com/xxxx.git 获取代码
0x06、nginx配置vhost与SSL
配置wordpress (用于解决固定链接问题),进入cd /usr/local/nginx/conf 创建 wordpress.conf 内容为:
cd /usr/local/nginx/conf/vhost 创建 abc.com.conf 和 abc.com.ssl.conf 配置域名服务和SSL
内容为(abc.com.conf)
server { listen 80; server_name abc.com; return 301 https://$server_name$request_uri; }
(abc.com.ssl.conf)
server { listen 443 ssl; server_name abc.com; ssl_certificate /opt/abc.com/Nginx/1_abc.com_bundle.crt; ssl_certificate_key /opt/abc.comNginx/2_abc.com.key; index index.html index.htm index.php; root /website/abc.com/; error_page 404 /404.html; include enable-php.conf; include wordpress.conf; location /nginx_status { stub_status on; access_log off; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 12h; } location ~ /\ { deny all; } access_log /website/wwwlogs/abc.com.log; }
ssl_certificate和ssl_certificate_key为证书路径
0x07、修改php.ini配置
打开vim /usr/local/php/etc/php.ini
找到disable_functions 把 scandir 删除.
重启/etc/init.d/php-fpm restart
0x08、修改网站目录Owner和权限
改成www用户\组(千万别搞错目录)
chown www:www -R 网站目录
chmod -R 755 wp-content/
0x09、创建网站数据库用户