http://a.icharm.me/wp-content/uploads/2018/09/豆芽图片20180925090455742.jpg

笛湖

Spring boot redis 使用踩坑

连接失败 windows下开发spring boot项目,需要使用redis服务代替session工作,所以直接使用homestead的虚拟机来提供数据库、redis服务等,免去自己配置各种服务的麻烦,redis服务本来使用laravel连接的时候一切正常,但是换到使用spring-boot-redis连接就提示连接被主机中的其他软件关闭,然后一直在reconnect,错误如下: 2018-08-30 15:35:05.969 ERROR 8892 --- [0.0.1-80-exec-1] m.i.o.C.Common.CommonController : org.springframework.data.redis.RedisSystemException: Redis exception; nested exception is io.lettuce.core.RedisException: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。 2018-08-30 15:35:06.038 INFO 8892 --- [ioEventLoop-4-3] i.l.core.protocol.ReconnectionHandler : Reconnected to 127.0.0.1:60030 2018-08-30 15:35:06.138 INFO 8892 --- [ioEventLoop-4-4] i.l.core.protocol.ReconnectionHandler : Reconnected to 127.0.0.1:60030 2018-08-30 15:35:06.241 INFO 8892 --- [ioEventLoop-4-1] i.l.core.protocol.ReconnectionHandler : Reconnected to 127.0.0.1:60030 2018-08-30 15:35:06.338 INFO 8892 --- [ioEventLoop-4-2] i.l.core.protocol.ReconnectionHandler : Reconnected to 127.0.0.1:60030 2018-08-30 15:35:06.439 INFO 8892 --- [ioEventLoop-4-3] i.

Ryzen+Rx580安装MacOS High Sierra 10.13.2

9月份的时候组装了一台电脑,本来是Ryzen5+GTX1066,也尝试装过黑苹果,但是GTX1066在MacOS表现不是很好,性能丧失严重就不说了,关键是整个系统都没有那么流畅,还不如的笔记本的黑果,所以后面就没有继续弄了,机缘巧合的情况下,在闲鱼上和一位大兄弟互换了显卡,GTX1066换RX588,他买的早几个月,但是最近RX588可是又被矿老板炒上了天,说实话,我还有一种赚到的感觉!? 有了Rx580马上又忙活起黑果,这次的装完后的效果不错,很流畅。不过还是有一些问题,大体还是不错了! 配置 CPU: AMD Ryzen 5 1600x 主板: 技嘉AB350M Gaming 3 显卡: 蓝宝石 Rx580 8G 无线网卡: BCM94360(转PCI,蓝牙接USB) 有线网卡: Realtek® GbE网络芯片 (10/100/1000 Mbit) 声卡: Realtek® ALC887 系统报告 1 工具 Mac一台或者黑苹果电脑一台,系统必须是10.11.6及其以上,不然无法制作high Sierra安装U盘。 2.Clover_v2.4k_r4359 Clover Configurator 2 4.AMD破解内核等 所有工具的下载地址:https://pan.baidu.com/s/1eea5uB79oskyseQE0XVWSg 密码:4lco BIOS设置 AMD-V / SVM = Disabled (AMD虚拟化技术,安装成功后可以打开, 如果找不到可以查看:[技嘉AB350主板开启Ryzen CPU 虚拟化支持][1]) SATA Ports = AHCI IOMMU = Disabled HPET = Enabled EHCI Hands-off = Enabled XHCI Hands-off = Enabled Serial Port = Disabled Parallel Port = Disabled 制作安装U盘 制作原版的安装U盘,需要在Mac下操作,首先在App Store下载High Sierra.

技嘉GIGABYTE B350M Gaming 3 关闭 secure boot

基本信息 主板: 技嘉 AB350m Gaming 3 BIOS Version: F7a 一直在找这款主板的secure boot选项,每次都没找到,联系技嘉客服,竟然回答我说没有!,还好google到一位国外的小伙找到了这个选项,发现这个设计真的有点操蛋。 步骤如下: 开机 F2 进入bios BIOS - Window 10 Features 设置为windows 10 CSM Support 选项出现了,设置其为 Disabled 然后 Secure Boot 在最后一行出现了 Fuck隐藏的够深的 Tip win10 feature 设置为win10后,win7开不了机, 这个选项还要还原为other os 2018.1.6 更新: BIOS version f10 之后取消了Windows 10 Feature这个选项,而是直接显示CSM Support,当CSM为enable时(兼容模式打开)Secure Boot默认关闭,不显示,当CSM为disabled时,Secure Boot选项才会出现 1 2 3 4

技嘉AB350主板开启Ryzen CPU 虚拟化支持

技嘉主板 AB350m Gaming 3 BIOS version: F7a 开启Ryzen CPU 虚拟化支持(如果未开启,则无法安装64位的windows or linux 操作系统) 开机F2 进入BIOS 依次选择 M.I.T -> Advanced Frequency Settings -> Advanced Cpu Core Settings -> SVM Mode = Enable 1 2 2

ESP8266使用AT指令连接服务器(回传判断思路)

最近在做一款单片机系统,使用的是AVR128单片机作为上位机,其中使用ESP8266接入互联网,大体的想法是,上位机通过串口向esp8266发送AT指令,来达到请求服务器接口的目的,服务器上的接口是使用PHP写的简单的HTTP接口。 最初的方法 esp8266的AT指令返回的信息非常的不规范,没有统一的格式,所以对回传的判断是有一定的困难的。刚开始使用的是最简单的方法通过充足的延时和指令的重复发送来确保每一个AT指令的正确执行。 上位机在初始化的时候会重启esp8266,这时候延时5秒的时间(用来esp8266的重启和自动连接好已连接过的热点) 发送TCP连接指令(AT+CIPSTART=“TCP”,“www.icharm.me”,80),这时候延时2秒(可以缩短为一秒,视服务器情况) 发送进入透传模式指令(AT+CIPMODE=1),延时500ms 发送进入透传发送模式指令(AT+CIPSEND),延时500ms 然后发送请求接口的数据(GET http://www.icharm.me/index.php?ac=100002)延时1s等待服务器的返回 如果上面的每一条指令都能正确的执行的话,肯定是可以触发服务器的接口的。但是经过测试发现,这种方法并不靠谱,经常会出现问题。 有关ESP8266怎么连接服务器的可以参考: 检查回传 因为上面的方法稳定性太差,所以哀差闷开始分析esp8266回传信息,试图找到一种通用的规则来判断AT指令的成功执行。 哀差闷的设想是保证每次开机后都顺利的进入透传发送模式,所以怎么保证进入了透传发送的模式,只有检查每一条AT指令的回传。确保每一条指令的成功执行。 首先需要知道的是:每发送一个AT指令,ESP8266会返回一下你发送的指令,接着紧接回车换行(0x0D 0x0A),再返回指令执行的信息,再紧接回车换行(0x0D 0x0A),最后返回指令执行的情况(OK或者ERROR),最后再紧接一个回车换行。 接下来分析下AT+CIPSTART=“TCP”,“www.icharm.me”,80 这条AT指令的回传信息。发送这条指令的时候esp8266有四种回传情况:(/n/r 代表回车换行) 未连接wifi,这时候会返回:no ip /n/r ERROR /n/r 等信息 已连接wifi,但没有网络访问权限 ,这时候会返回 CONNECT CLOSE /n/r ERROR /n/r 已经和服务器建立连接,这时候会返回 ALREADY CONNECTED /n/r ERROR /n/r 成功和服务器建立连接, 返回OK 再来分析下AT+CIPMODE=1 指令的回传情况,这个比较简单,成功返回OK, 失败返回ERROR,重复设置也会返回OK,所以这条指令可以通过判断是否为OK或ERROR。 指令AT+CIPSEND 的返回信息比较简单,成功返回 > 失败返回ERROR。 从上面可以知道,判断返回是否为OK或者ERROR并不能达到预期的目标,而且在单片机程序中,串口接受缓冲数组长度有限,会出现覆盖掉前面的一部分信息的情况,甚至出现ERROR这单词的前一部分在数组的末端,后一部分在数组的前端的情况。 所以哀差闷想了一个办法,先从串口中断接收函数入手,弄两个接收缓冲数组A,B,首先对接收到的字符进行判断如果为0x0d(即回车)时,则舍弃,同时从A数组中取出0x0d前面的一个字符存入B,如果为0x0a则直接放弃, 否则将存入数组A。 这样数组B中存放即为每一个回车的前一个字符。后面将通过判断数组B中的字符来判断,从面上面的情况中,可以总结出成功的情况有三种: 数组B最后一个字符为K (即OK) 数组B最后一个字符为R (即ERROR),但数组B倒数第二个字符为D,这种情况代表ALREADY CONNECTED /n/r ERROR 数组B最后一个字符为 > 除了上面的三种情况,其他的都视为失败。 代码分析 可能经过上面的说明,还是不太明白,可以参考一下哀差闷的代码。但因为单片机的不同,代码会不同,请参考着看: 中断接收函数: //*********************************************************************** // USART1中断接收字符串 //*********************************************************************** #pragma interrupt_handler uart1_rx_isr:iv_USART1_RXC void uart1_rx_isr(void) { uchar temp = UDR1; //从数据缓冲器中接收数据 放入temp中 if(temp == 0x0d ){ //将每一个回车符前面的一个字符串记录下来,用作判断的标志 if(RxBufWr_wifi == 0){ //RxCharBuf_wifi即为数组A, wifi_flag即为数组B, RxBufWr_wifi为数组A的写入指针, flagWr为数组B的写入指针 wifi_flag[flagWr] = RxCharBuf_wifi[15]; }else{ wifi_flag[flagWr] = RxCharBuf_wifi[RxBufWr_wifi-1]; } flagWr++; flagWr &= 0x0f; //数组长度为16,当写入指针为达到16时 自动归零 if(flagWr !

git pull 冲突解决

git菜鸟应该会经常遇到的问题, 就像博主这样。服务器上pull更新时遇到冲突。主要是环境配置文件冲突,由于从SVN转到git,所以保留了SVN那种部署代码的方式,git有更好的部署方法flow,可惜还不会使用。配置文件分为本地和线上。有时候为了方便直接上服务器上修改配置文件,然后在本地完成一个新功能的时候,push到仓库里。再在服务器上拉取更新。就会爆冲突。这时候,索引的版本号会变为最新。但是更新的代码并没有实际合并到当前分支,再次尝试拉取的时候会提示已是最新版本。类似如下: [root@smsms]$ git pull origin master:master remote: Counting objects: 680, done. remote: Compressing objects: 100% (517/517), done. remote: Total 680 (delta 166), reused 664 (delta 156) Receiving objects: 100% (680/680), 11.17 MiB | 22.13 MiB/s, done. Resolving deltas: 100% (166/166), completed with 7 local objects. From https://gitlab.oneit.com/mei/smsms d1cfc68..9e7ba97 master -> master Warning: fetch updated the current branch head. Warning: fast-forwarding your working tree from Warning: commit d1cfc689545cdf70a9e29254d4473fcb7fe66efc. error: Entry 'inc/global.