普通视图

发现新文章,点击刷新页面。
昨天以前ephz3nt

protoc 引用 Google 外部 proto 无法找到文件问题

2020年12月16日 08:00
最近在跟着阿三哥学习gRPC,有一步需要引用google/protobuf/timestamp.proto导致使用protoc生成的时候报错 protoc --proto_path=proto proto/*.proto --go-grpc_out=pb --go_out=pb google/protobuf/timestamp.proto: File not found. laptop_message.proto:12:1: Import "google/protobuf/timestamp.proto" was not found or had errors. 网上搜索大部分都是说去https://github.com/protocolbuffers/protobuf/releases下载protoc包把里面的include下面的google文件夹 文件夹复制到 /usr/local/include/google。几经操作还是一样报错,后面在官方issue找到答案。 如果你的protoc是放在 $GOPATH/bin 下,那么需要把protoc包里面的include文件夹复制到 $GOPATH 下即可。

Java ExcelUtil 库导出Excel表格报错问题

2020年12月11日 08:00
环境信息 运行环境: Docker 使用镜像: adoptopenjdk/openjdk11:alpine 问题概述 同事新写的接口,功能大概是访问提供某些参数会返回一个 Excel 表格。在本机测试正常,但是部署到测试环境下载下来的表格内容是 {“code”:500 data”:null,“message”:“Handler dispatch failed; nested exception is java.lang.InternalError: java.lang.reflect.InvocationTargetException”} 控制台报错信息 org.springframework.web.util.NestedServletException: Handler dispatch failed; nested exception is java.lang.InternalError: java.lang.reflect.InvocationTargetException at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1055) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE] at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE] at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE] at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) ~[tomcat-embed-core-9.0.29.jar!/:9.0.29] at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.2.RELEASE.jar!/:5.2.2.RELEASE] at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.29.jar!/:9.0.29] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.29.jar!/:9.0.29] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.29.jar!/:9.0.29] at org.

Google SRE 运维解密笔记

2020年9月23日 11:00
本书对于 SRE 的定义 我们认为如果软件工程师主要专注于设计和构建软件系统,那么应该有另外一种职业专注于整个软件系统的生命周期管理。从其设计一直到部署,历经不断改进,最后顺利退役。这样一种职业必须具备非常广泛的技能,但是和其他职业的专注点都不同。Google 将这个职业称为站点可靠性工程师(SRE: Site Reliability Engineering)。 “无论对一个软件系统运行原理掌握得多么彻底,也不能阻止人犯意外错误。” 只有靠着对细节的不懈关注,做好充足的灾难预案和准备工作,时刻警惕着,不放过一切机会去避免灾难发生。这就是 SRE 最重要的理念! 第一章:介绍 不能将碰运气当成战略。 - SRE 俗语 SRE 团队要承担以下几类职责 可用性改进 延迟优化 性能优化 效率优化 变更管理 监控 紧急事务处理 容量规划与管理 在保障服务 SLO 的前提下最大化迭代速度 在企业中,最主要的矛盾就是迭代创新的速度与产品稳定程度之间的矛盾。 在 SRE 模型中,我们选择正面面对这种矛盾,使用的工具是错误预算。 “错误预算"起源于这样一个理念: 任何产品都不是,也不应该做到 100%可靠(显然这并不适用于心脏起博器和防抱死系统等)。因为对最终用户来说,99.999%和 100%的可用性是没有实质区别的。 多少才是? 基于用户的使用习惯,服务可靠性要达到什么程度用户才会满意? 如果这项服务的可靠程度不够,用户是否有其他的替代选择? 服务的可靠程度是否会影响用户对这项服务的使用模式? 如果一个服务的可靠性目标是 99.99%,那么错误预算就是 0.01%。这意味着产品研发部门和 SRE 部门可以在这个范围内将预算用于新功能上线或产品创新等任何事情。 监控系统 监控系统是 SRE 团队监控服务质量和可用性的一个主要手段。 一个需要人工阅读邮件和分析警报来决定目前是否需要采取某种行动的系统本质上就是错误的。监控系统不应该依赖人来分析警报信息,而是应该由系统自动分析,仅当需要用户执行某种操作时,才需要通知用户。 一个监控系统应该只有三类输出 紧急警报 - alert 意味着收到警报的用户需要立即执行某种操作,目标是解决某种已经发生的问题,或者是避免即将发生的问题。

Google SRE 生存指南笔记

2020年9月9日 21:55
《SRE 生存指南》- Nat Welch 系统中断响应与正常运行时间最大化 SRE 简介 SRE 是指 Site Reliability Engineer (网站可靠性工程师)。他是软件工程师和系统管理员的结合,一个 SRE 工程师基本上需要掌握很多知识:算法,数据结构,编程能力,网络编程,分布式系统,可扩展架构,故障排除。 - 百度百科 Site: 一个网站 Reliability: 被定义为"值得信赖的质量或一贯可靠的质量” Engineering: 被定义为"熟练地运用技巧以达到某种目的的行动” 语录 故障是常态,正常才是异常 个人不应该害怕事故,而是要确信如果事故发生,团队将会响应和改进系统,而不是关注发生事故带来的耻辱和愤怒。事故是我们可以从中学习的东西,而不是让人害怕和羞耻的事情! 1. 简介 SRE 的目标是提高服务可靠性,帮助业务实现并改善用户的服务体验 SRE 定义: 一个专注于熟练地维护一个网站以使其持续可靠的领域 互联网上的软件永远做不到完全可靠,这里有两个原因 互联网是一个分布式系统,各部分经常出现故障,这会影响服务可用性。 软件是人编写的,所以 Bug 不可避免,而 Bug 会导致系统宕机。 可靠性层次结构 Mikey Pyramid

Java 基础

2020年8月23日 17:25
狂神说JAVA学习笔记 - JavaSE基础部分 Bilibili: https://www.bilibili.com/video/av68373450 当前观看至: https://www.bilibili.com/video/av68373450?p=77 运算符 不同类型运算返回值 double a = 55; float b = 10F; long c = 10; int d = 20; short e = 25; byte f = 25; 如果变量a+b+c+d相加,返回值类型为double 如果变量b+c+d+e相加,返回值类型为float 如果d+e相加,返回值为int 如果e+f相加,返回值为int 。。。 结论 如果一组不同类型的变量进行运算,返回值取类型最大数据类型 如果其中最大的数据类型为int,返回值为int 如果小于int的类型,返回int 自增、自减 ++ -- package operator; public class Demo01 { public static void main(String[] args) { int a = 1; int b = a++; int c = ++a; System.

Let's Encrypt 免费SSL证书安装小记。

2015年12月11日 00:08
从去年就开始关注Let’s Encrypt 了, 就在不久前它宣布公测。所有人都可以使用由此机构签发的免费SSL证书。 下面来分享一下本屌的安装过程。 系统:CentOS 6.4 x64 环境:军哥LNMP 签发的域名:本博客 使用的签发工具:acme-tiny (这里不使用官方提供的工具原因为太过臃肿,acme-tiny仅200+行代码,小巧简单) 2015-12-27 22:06:57 update: CloudXNS已支持Let’s Encrypt的验证, See https://www.cloudxns.net/Support/detail/id/1062.html 注意: 1、确保需要签发的域名使用的DNS为国外DNS服务(如cloudflare,linode等,否则到签发步骤可能会报错) 2、确保需要签发的域名已指向A记录到你的网站服务器,不要用CNAME等记录,一定要A记录!(否则到签发步骤可能会报错) 3、最好用ROOT帐号操作(我使用普通帐号操作会报key values mismatch) 安装git yum -y install git 如果你已经有了git则执行(注意:存放目录最好不要在home目录下,我存放在/web/acme-tiny) git clone https://github.com/diafygi/acme-tiny.git 生成帐号KEY openssl genrsa 4096 > account.key 生成域名KEY openssl genrsa 4096 > painso.key 生成CSR文件(如果你是以根域名来访问的话使用单域名即可,签发的主机头越多越麻烦哦) 单域名(不包含其他域如www): openssl req -new -sha256 -key painso.key -subj "/CN=painso.com" > painso.csr 多域名: openssl req -new -sha256 -key painso.key -subj "/" -reqexts SAN -config <(cat /etc/ssl/openssl.

Discuz显示音乐以及除图片外文件的真实链接。

2014年7月26日 06:04
由于自己的音乐论坛一直找不到好的外链,所以干脆自己搭个算了 想找一个支持直链的开源站点小程序用,但是一直都没有找到 于是开始了Discuz远程附件折腾之旅。 都知道Discuz远程附件的机制蛋疼至极,图片可以直接显示链接,其他文件不行 折腾了一天,终于搞定 打开 \source\function\function_discuzcode.php 找到 function parseattachurl($aid, $ext, $ignoretid = 0) 将 function parseattachurl($aid, $ext, $ignoretid = 0) { global $_G; $_G['forum_skipaidlist'][] = $aid; return $_G['siteurl'].'forum.php?mod=attachment&aid='.aidencode($aid, $ext, $ignoretid ? '' : $_G['tid']).($ext ? '&request=yes&_f=.'.$ext : ''); } 替换为 function parseattachurl($aid, $ext, $ignoretid = 0) { global $_G; $_G['forum_skipaidlist'][] = $aid; $aid = intval($aid); $attach = DB::fetch_first("SELECT * FROM ".DB::table('forum_attachment')." WHERE aid='$aid'"); $tid = $attach['tableid']; $attach = DB::fetch_first("SELECT * FROM ".

新年快乐。

2014年1月2日 01:57
又一年过去了,2013年是我最工作最踏实的一年.在新的环境学到很多,希望朋友们在新的一年里工作生活顺顺利利,身体健康.也希望自己在新的一年里做自己,学会为人处事,找到目标.新年快乐!

PHP文件操作函数和添加图片计数器。

2013年7月7日 22:21
PHP访问文件或文件夹相关函数 filetype() //可以输出相关文件类型,如:dir / file /link echo filetype(‘C:\WINDOWS’).''; 输出结果:dir echo filetype(‘C:\WINDOWS\regedit.exe’).''; 输出结果:file 相关函数: clearstatcache() 来清除缓存 is_executable() 判断文件是否可执行 is_dir() 判断是否存在或是文件夹 is_file() 判断是否是文件 scandir() 遍历文件夹 / 返回一个数组 str_split 将字符串拆分为单个数组 php if(!$f=fopen("num.txt","r")){ //只读模式打开,判断num.txt不存在则输出下行 echo "文件不存在!!!"; $num=0; }else{ num = fgets(f,10); //获得9位 fclose($f); } $num++; $open = fopen("num.txt","w"); //写入模式打开(如果文件不存在则创建) fwrite(open,num); //把$num里的值写入到num.txt中 fclose($open); //关闭num.txt } numarr = str_split(num); //把字符串拆分到数组中 foreach(numarr as number){ //为$numarr开始遍历 // print_r($number); echo "<img src='images\".number.".png'>"; //循环遍历输出number.png }

thread.error: can't start new thread 解决办法

2013年5月30日 17:23
最近折腾VPS安装各种应用,在YUM安装软件时报错 。GOOGLE了一下,发现是YUM的一个配置文件导致 Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Traceback (most recent call last): File "/usr/bin/yum", line 29, in &lt;module&gt; yummain.user_main(sys.argv[1:], exit_code=True) File "/usr/share/yum-cli/yummain.py", line 276, in user_main errcode = main(args) File "/usr/share/yum-cli/yummain.py", line 129, in main result, resultmsgs = base.doCommands() File "/usr/share/yum-cli/cli.py", line 434, in doCommands self._getTs(needTsRemove) File "/usr/lib/python2.6/site-packages/yum/depsolve.py", line 99, in _getTs self._getTsInfo(remove_only) File "/usr/lib/python2.6/site-packages/yum/depsolve.py", line 110, in _getTsInfo pkgSack = self.pkgSack File "/usr/lib/python2.6/site-packages/yum/__init__.py", line 883, in &lt;lambda&gt; pkgSack = property(fget=lambda self: self.

CentOS取消图形化界面及进度条。

2013年5月14日 17:13
新版的CentOS启动方式改成了以图形化进度条的形式启动系统,非常不利于新手学习LINUX,所以建议取消掉,采用正常的命令行形式启动。 vi /boot/grub/grub.conf default=0 timeout=5 splashimage=(hd0,0)/boot/grub/splash.xpm.gz hiddenmenu title centos (2.6.32-71.el6.i686) root (hd0,0) kernel /boot/vmlinuz-2.6.32-71.el6.i686 ro root=UUID=0ecaaa50-2f52-490b-a9b5-a22918c9f485 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet initrd /boot/initramfs-2.6.32-71.el6.i686.img 把上方红色字体部分删除rhgb(redhat graphics boot)保存即可 另外如果想取消图形化界面的可以更改init运行级别 vi /etc/inittab id:5:initdefault: 把上方的5改为3即可 init级别: 0 - 停机(千万不能把initdefault 设置为0) 1 - 单用户模式 2 - 多用户,没有 NFS 3 - 完全多用户模式(标准的运行级) 4 - 没有用到 5 - X11 (xwindow) 6 - 重新启动 (千万不要把initdefault 设置为6 )

想念。

2013年4月10日 02:45
今天要来厦大办事情,途中时不时会想起你,但是又有些怕真正见到你 ,呵呵 不知道为什么 什么感觉,这边电脑正好可以上网,想送个东西给你 也不知道你喜欢啥 ,买了件衣服 ,希望你会喜欢 ,你可能不知道是谁送的 只要你喜欢就OK了 ,好了 得找工作了 ,不然以后哪有钱请你吃饭啊 呵呵 就这样。

小内存VPS优化(LNMP+WordPress环境)

2013年3月2日 05:35
之前的服务商跑路了,2个站 一个博客和一个论坛 没备份 懒 .直到现在才后悔莫及 备份是1年前的,悲剧了 换了个VR的San Jose机房速度还可以 256M的内存然后把1年前的备份放上去了,用了几天空闲内存总是剩个1-2十M 有些担心,网上查了查 于是决定还是优化下 我现在的系统配置是: 双核,256M内存,Ubuntu系统,军哥的Lnmp 1.充分利用多核 修改Nginx的配置文件,默认是没有被配置的,文件位置在/usr/local/nginx/conf/nginx.conf worker_processes 2; worker_cpu_affinity 01 10; worker_processes :有多少核就填几了 worker_cpu_affinity : 同上,这里我是2核所以就是 01 10,如果是4核 worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000;(第一个进程对应的CPU核心,第二个,第三个…) 顺序要搞清楚 填到 user www www;下面就好,如上图 2.安装eAccelerator lnmp安装目录默认有带的 直接进入LNMP安装目录输入 ./eaccelerator.sh 接下来会提示安装的版本,输入new 然后等等就装好了 再找到php的配置文件/usr/local/php/etc/php.ini 拉到这下面有eaccelerator针对PHP的配置文件,这是我的配置 [eaccelerator] zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/eaccelerator.so" eaccelerator.shm_size="16" eaccelerator.cache_dir="/usr/local/eaccelerator_cache" eaccelerator.enable="1" eaccelerator.optimizer="1" eaccelerator.check_mtime="1" eaccelerator.debug="0" eaccelerator.filter="" eaccelerator.shm_max="0" eaccelerator.shm_ttl="3600" eaccelerator.shm_prune_period="3600" eaccelerator.shm_only="0" eaccelerator.compress="1" eaccelerator.compress_level="9" eaccelerator.keys = "disk_only" eaccelerator.sessions = "disk_only" eaccelerator.content = "disk_only" 主要就是eaccelerator.
❌
❌