作者归档:navy

未来方向

上月开始整体方向开始发生改变,老板因为接触到外面公司做拉新挺赚钱,我跟老板沟通了下,把自己想法和规划整理好,老板也终于同意,决定改变方向从B2C这块开始扩展,走分销,联盟,订货这条路子,将6米做成一个供应链平台,包括商城,分销,联盟,订货等。

为了这一步等了一年多,要知道去年转型的时候提过B2B2C这个概念,很可惜没下文了,将大量工作放在B2C这块,重点是为门店服务,然而很可惜一直没做好,现实中门店并没按照要求去使用去推广,我也在今年初萌生退意,想找个能实现自己理念的地方,不然这么下去也太无趣。

现在终于能实现自己想法,但是缺人,不过也不是什么问题,计划一步步走,先将整体规划好,做好整体规划及架构,核心框架搭建好,按照规划目前分销已经搞定,接下来就是联盟+订货了,计划从下月起完全以外包的方式实现掉。

目前自己手头项目还有不少,打算还是自己来做公司,做服务商,核心为企业,店铺进行服务。现在都还只是雏形,先将功能实现掉,然后再去推广,不过要想推出去,还需要强大的运营销售人才。来年去成都,重庆看看有没同学有兴趣加入一起做这个。

最后:我怀疑这台linode配置不够,因为ss一直运行着,好几个朋友在用,导致内存占用过多,mysql就崩溃了,还是新开一台搭建wordpress吧,这台就做做测试,折腾下ghost,shadowsocks,docker,node之类。

mongo问题

今天登陆m端服务器想登陆mongo看看,mongo命令不起作用,报错:

Failed global initialization: BadValue Invalid or no user locale set. Please ensure LANG and/or LC_* environment variables are set correctly.

然而本地使用robo3T能够连接服务器上mongo,搜索了下原来是本地化的问题,export LC_ALL=C,去除本地化设置,然后再次输入mongo命令,一切正常。

LC_ALL=C 是为了去除所有本地化的设置,让命令能正确执行。

在网上搜索到的相关介绍如下,在locale环境中,有一组变量,代表国际化环境中的不同设置:

1.    LC_COLLATE
定义该环境的排序和比较规则

2.    LC_CTYPE
用于字符分类和字符串处理,控制所有字符的处理方式,包括字符编码,字符是单字节还是多字节,如何打印等。是最重要的一个环境变量。

3.    LC_MONETARY
货币格式

4.    LC_NUMERIC
非货币的数字显示格式

5.    LC_TIME
时间和日期格式

6.    LC_MESSAGES
提示信息的语言。另外还有一个LANGUAGE参数,它与LC_MESSAGES相似,但如果该参数一旦设置,则LC_MESSAGES参数就会失效。LANGUAGE参数可同时设置多种语言信息,如LANGUANE=”zh_CN.GB18030:zh_CN.GB2312:zh_CN”。

7.    LANG
LC_*的默认值,是最低级别的设置,如果LC_*没有设置,则使用该值。类似于 LC_ALL。

8.    LC_ALL
它是一个宏,如果该值设置了,则该值会覆盖所有LC_*的设置值。注意,LANG的值不受该宏影响。

“C”是系统默认的locale,”POSIX”是”C”的别名。所以当我们新安装完一个系统时,默认的locale就是C或POSIX。

Locale是某一个地域内的人们的语言习惯和文化传统和生活习惯,是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。
Locale是软件在运行时的语言环境, 它包括语言(Language), 地域 (Territory) 和字符集(Codeset)。一个locale的书写格式为: 语言[_地域[.字符集]]。完全的locale表达方式是 [语言[_地域][.字符集] [@修正值]。zh_CN.GB2312=中文_中华人民共和国+国标2312字符集。

locale的设定:
LC_ALL和LANG优先级的关系: LC_ALL > LC_* >LANG
1、如果需要一个纯中文的系统的话,设定LC_ALL= zh_CN.XXXX,或者LANG=zh_CN.XXXX都可以。
2、如果只想要一个可以输入中文的环境,而保持菜单、标题,系统信息等等为英文界面,那么只需要设定 LC_CTYPE=zh_CN.XXXX,LANG=en_US.XXXX就可以了。
3、假如什么也不做的话,也就是LC_ALL,LANG和LC_*均不指定特定值的话,系统将采用POSIX作为lcoale,也就是C locale。
LANG和LANGUAGE的区别:
LANG – Specifies the default locale for all unset locale variables
LANGUAGE – Most programs use this for the language of its interface
LANGUAGE是设置应用程序的界面语言。而LANG是优先级很低的一个变量,它指定所有与locale有关的变量的默认值

spring cloud学习笔记

早在16年,部门都尝试过使用Spring boot来搭建项目,实现一些小功能和业务,对于spring cloud也只是表面上的了解,没深入去学习过,这几个月还算比较系统学习,不过迁移成本实在太高,只能放弃,如果说后台团队在8-10人,我想迁移还是值得的,至少能让同事们学习到更多先进的东西,理解它的思路,包括如何使用docker去构建环境,去部署项目。

spring cloud并不是新东西,只是把很多需要的三方框架优化并整合到一起,核心基础是spring-boot,micro service之间是消息通信,如何高效通信,然后就有了注册-发现机制,所有的provider都注册到service discovery component上,这类支持有eureka,consul,zookeeper等,主要功能就是服务注册表,服务注册与发现,服务检查。consumer要调用provider就通过eureka等这类组件。服务要集群部署则可以通过ribbon在consumer实现负载均衡,通过一定规则或者自定义规则调用指定服务名的provider,如果service要提供rest api给consumer,通过feign即可。

不能让用户或者客户端去零散的调用微服务,使用统一网关是必要的,如zuul,不仅能统一服务,还能直接使用过滤器来筛选,提高效率。

如果上大型集群,使用config来统一管理微服务配置,直接配置git连接,总之就是方便。

要监控服务和容错处理则使用hystrix即可,内置rabbitmq兼容,还带有dashboard,实时监控,还有sleuth+zipkin,这种就高级了,实现分布式跟踪。

还有更高级的特性暂时也没细研究,利用spring boot + consul/eureka + ribbon + zuul + hystrix + config 已经可以实现足够强大的微服务后台,而且很简单,复杂的已经被实现,对于我们只需要在于业务方面,如何设计,如何拆分细粒度,松耦合等。不过对于人员的基础要求还是相对高点,现在云南这边大部分培训出来的就整点spring mvc完事,boot都未必接触,分给每个人一个服务,实际上是一个独立的模块,很难控制他的代码质量,增加代码审核成本,像我们现有项目,实际上拆成了4,5个,后台有独立common,service,controller,web,mq等,对于初级点的程序员,我只给controller项目即可,照着设计好的接口文档调用service返回json,供app,node层使用。如果说上cloud,至少来说一个微服务得两人来做,或者一个人一个微服务,然后两三个微服务一个负责人。

我看node也有实现的eureka-js,就是说也可以用node写微服务,供客户端调用,使用sidecar整合。

下个项目想整下这套解决方案,培养一堆相对比较厉害的程序员出来。

另外就是看了两本书,聊聊架构,进化,前者真的是太差了,通篇废话,做架构整成了哲学,什么是架构,什么是产品,我也实在无语,还挺贵一本。另外就是技术相关书籍国内作者和国外差的不知道哪去了。

iOS读书笔记

最近更新iOS版本6米网,顺便看了几本iOS的书,iOS面试之道和iOS开发进阶,个人觉得也就是个入门,相比早年看的objc的书还有cocoa编程,设计模式等书,这两本还是差强人意,还以为有很深入的讲解,其实大部分都是点到为止,还带很多工具介绍,上架介绍等教程,其实没这必要,少贴点代码,多让人去搜索学习更好,比如之前看过的java程序员修炼之道,我就觉得挺好,讲的系统,很多干货需要下来google下,没有那么多琐碎的代码。

Go语言学习笔记

昨天忙完抽空花了点时间在https://golangbot.com/learn-golang-series/ 学习Go语言,环境我是早搭建了,也就写了个HelloWorld。昨天在那个教程上学习了1-17,整个语法感觉还是很像C语言的,唯一让我觉得怪异的就是类型后置,不过这是都是基础,go的核心是在并发处理上,接下来往后学习相关教程,顺便看看https://github.com/ethereum/go-ethereum,早日上手区块链相关。

 

8月17日增补

昨天小程序已经上线,今天打算利用一天时间学完整个golang教程,为下一步区块链做准备。学完基础倒是没觉得有什么特别的,学到concurrency和oop这两章,OOP的三大特性:封装,继承,多态。golang使用自己的方式实现了,struct实现封装,继承。struct里面可以套用匿名struct这算是go的一种特性。对于多态,则使用interface实现掉。

对于并发核心就是goroutine,降低了并发的开发成本。使用go关键字就new了一个goroutine,或者说是一个线程。主函数就是在一个单独的goroutine中运行,即main goroutine。这就有点像iOS的runloop,不过iOS是消息驱动类型的,runloop作用是获取消息和处理事件。题外话,node不就是事件驱动,单线程非阻塞,eventloop获取event,到event handler,处理完成继续event loop。不过node其实是支持多进程的cluster,另外非阻塞实际上IO,异步都是在内部子线程处理。

  • Goroutines are extremely cheap when compared to threads. They are only a few kb in stack size and the stack can grow and shrink according to needs of the application whereas in the case of threads the stack size has to be specified and is fixed.
  • The Goroutines are multiplexed to fewer number of OS threads. There might be only one thread in a program with thousands of Goroutines. If any Goroutine in that thread blocks say waiting for user input, then another OS thread is created and the remaining Goroutines are moved to the new OS thread. All these are taken care by the runtime and we as programmers are abstracted from these intricate details and are given a clean API to work with concurrency.
  • Goroutines communicate using channels. Channels by design prevent race conditions from happening when accessing shared memory using Goroutines. Channels can be thought of as a pipe using which Goroutines communicate. We will discuss channels in detail in the next tutorial.

对于channel,就是读取写入阻塞的队列。select就是多个阻塞队列任意又一个不再阻塞,select就会被执行。mutex就是互斥,和channel搭配使用。

f() //普通阻塞方法
go f() //创建一个新的goroutine然后执行该方法

ch := make(chan int) // 可以写入读写int类型的channel ch <- x //写入 ch = <-ch //读取 <-ch //读取并直接舍弃 func hello(done chan bool) { fmt.Println("Hello world goroutine") done <- true } func main() { done := make(chan bool) go hello(done) <-done fmt.Println("main function") }

defer 表示延迟方法延迟到return之前最后执行,不过如果是defer stack(defer列表),按照last in first out原则。自定义error,使用struct+interface即可。panic主要是用于抛出异常,recover则是捕获这个异常并进行处理,两者必须在同一goroutine中,如果defer a()中加个recover方法,recover方法必须使用defer调用,否则无法捕获,然后 go b()中抛出一个panic,这是无法捕获的,此刻程序就会终止掉。class function则是很像iOS中的block。reflection以为着我们能在运行时获取一个struct的所有变量的type,value。这是高级语言的特性,java,iOS都有这块,不过iOS是要基于runtime获取,java的反射则是spring的基础。

学完了教程,感觉go这块用在后台开发实现高性能是很容易。

流浪者和手艺人

在城市里闹市区几乎随处可见乞讨的人,有老人卖惨的,有身体残疾的,也有推着音响唱歌的,碰到这类人我是从来不给钱的,因为基本上都是职业的。

还有地铁上也是如此,我周一那天下午坐地铁,坐在头节车厢,半路上沿着车厢过来一对父女(看起来像),男的杵着拐棍一瘸一瘸举着讨钱的大碗,女的在后面跟着拉着二胡,边走边把碗伸到乘客面前,还是有不少人给的,比如坐在我旁边的大哥,当时那对父女还没过来,这位大哥就从钱包掏出5块钱放在衬衣胸前口袋,我没搞清楚为啥,等到父女过来他把5块钱放了进去,当然我是带着耳机没有理他们。碰巧我是在南部客运站下车,等下班换乘,所以一直在站台站着,结果这对父女出现了,然后男的收起了拐杖,很正常的走下楼梯。虽然知道这些是骗子,但是我还是头一次见现形的。

对于这些职业卖惨卖艺的我是向来不理的,但是有些真正的卖艺或者流浪的,前者是享受这个过程,用心在卖艺,后者则是真实的生活,流浪。对于无论前者还是后者,我都是愿意平等去对待。遇到这种情况,只要我身上有现金,我都会给一些。底层人民都在艰难的活着,却无人关注。记录下我这些年印象最深的几个人吧:

按照时间顺序,应该是我读大学的时候,成都,夏天,我估计是07年,因为08年之后我就没回过湖北了。应该是夏天,下着大雨,我去火车站,坐公交车到火车站,然后走向火车站,大雨中没什么人,一个路口有个老奶奶跪在地上,前面放着一个碗,披着一块透明塑料薄膜,我走过去把口袋的几十块钱全给她了,然后双手紧紧握住她的手,冰凉的,我好一会才放开,然后去赶火车了,看到那一幕,很容易想到自己的爷爷奶奶。

然后是在昆明,估计15年左右,中间很多年倒是没什么太大印象也和自己有关,没去经历过什么,没去感同身受过,有一天晚上,我坐公交车,有点晚了,车上人不多,有个老人应该是拾荒的,说自己住在春城路什么桥洞那边,自己参加过抗战什么的,民国三十六,还是三十七年来到昆明,一呆就这么久,没有亲人,想想这些参加过抗战的国军,心头一酸,艰难抗战的国军,却被窃取了胜利果实,导致这些国军战士老无所依,一无所有,真的是只恨蒋公当年剿匪不力,临下车我把自己买的两袋面包给了他,至少能让他吃饱一次。

今天这个新闻更加恶心到我了:

【河南南召回应“抗日陵园遗址被毁”:11处发现遗骸,将鉴定】日前,有网友发文称,南阳一抗日将士烈士陵园被政府卖给私企做厂房,烈士墓碑被挖倒,并配上“被丢弃的烈士墓碑”、“挖出的烈士遗骸”、“施工现场出土的烈士服、帽饰”等图片,引发热议。对此,南召县回应称,调查组在走访时,当地群众反映此处是乱葬坟场。部分老人说此处原为国民政府抗日将士烈士陵园。但经现场勘察,多次遭到破坏地形地貌发生巨大变化,当年的“陵园遗址”已无从辨识。现场共有11处发现遗骸,现暂存县殡仪馆。下一步将确认是否为国民党抗战死亡人员遗骸。此前,该县已责成企业停止施工,保护现场。

然后就是今年了,可能随着年纪越大,越会在意周围,关心别人,其实人也是会慢慢转变的,想当初16年刚做百步技术部门的头时,喷运营部门人员喷了多少次,虽然他们很多事情做的很差,但是有些我现在看来确实是我做过了,慢慢到如今,几乎不再意气用事,很多时候沟通是沟通情绪,而不是事情,情绪失控了,事情再对也无济于事。回归正题,也是在公交车站,我刚下车,准备去公司,然后看到一个拾荒者正在捡垃圾桶中间烟灰缸的烟蒂,没看见合适的,准备走了,我拉住了他,把自己刚买的利群给了他,看他的眼神仿佛是不相信似的,递给他他赶紧接过去,我说不急等等还有火机也一起给你。看着他匆匆走过的身影,我在想,对他而言或许不会再有下一次,如果我老了变成这般模样,那会怎样?我现在是戒烟了,但是出去有时还是会带包烟,至于利群,因为早年在杭州抽习惯了,烟蒂长,而且广告词很好:

人生就像一次旅行,不必在乎目的地,在乎的是沿途的风景,,以及看风景的心情,利群,让心灵去旅行!

接下来就是今天(7月4日)下班,走过十字路口,看到一老婆婆,在翻垃圾桶,推着个小车,类似购物小车,下方一个笼子,笼子里面是一只狗,旁边一个小碗,碗里有点米线。上面放着几块叠整齐的纸箱板,笼子前面有个牌子,狗狗出售。我心一酸,走过去把身上的钱给了她,并没说话,看到这般情景,心里就明白了她的故事。希望她能好好的,和她的狗狗一起都好好的。

接下来再写几个手艺人的故事。

8月10日更新下面一段:

也没有几个,之前在城里住的时候偶尔会看到一对父子在广场卖艺,父亲吹萨克斯,小孩唱歌,唱的虽说有些稚嫩,但是不怯场,父亲的萨克斯吹的很不错,就安静的演奏着,没有纸板描述家世,也没有用喇叭像路人要钱,一首接一首,随心随性,完了就走了,也不像职业乞丐那样长时间在一个地方,在我6月21日写完下方那条微博后,再也没在城里那条路上见过他们了,也不知道他们去了哪边。不过在上月下旬的某天早上我在中国银行那边倒是看到那个推着小狗的老奶奶,小推车放在一边,她坐在台阶上逗着小狗,挺开心的样子,我正好坐在滴滴上,匆匆而过,却让我耿耿于怀,下次要是再遇到一定要好好和她说几句话,多帮助点。

之前回家经常能碰到他们在这边卖艺,但是每次我经过时掏下口袋,发现没钱就急匆匆走过,终于我半个多月前取了钱,放了些零钱一直在口袋,可能下雨就再也没见过他们,今天终于又见到了,放了些钱在盒子里,才安心站在旁边静静欣赏,小孩唱着成都,大人吹着萨克斯伴奏,唱的挺好的。 ​​​​

 

世界杯

又到了4年一度的世界杯,最早接触世界配还是2002年,那时高一,记得第一场中国队打哥斯达黎加,应该是下午2点多,我们体育课,老师给休息,我们偷偷去校外看的,瞬间进两球,还有就是恐怖的黑哨让韩国进了四强,被黑掉的葡萄牙,意大利。然后就是2006年世界杯,那时大一,暑假期间,印象中放了两次假,我很早都回到学校东区,还记得和寝室兄弟涛骚两人早上一人一大桶倍特矿泉水,打一上午篮球,然后去东区后门吃个牦牛肉米线,生活还是安逸,那年的世界杯记得齐达内顶你个肺。然后到了2010年世界杯,那年我刚去淘宝,在杭州和同事一起看的世界杯,印象就没特别深刻的了,但是和同事一起看了决赛,意大利夺冠。紧接着2014年世界杯,那年我在昆明,记得德国牛叉,还有克洛泽破记录。

到了今年,可能是社交媒体的发达,感觉所有人都在看世界杯,还有就是大量的人在买足彩。之前网上没管制的时候,我给自己支付宝充值了几百块钱到余额,然后让我妈没事买双色球玩,找点乐趣,管制了很久后,最近足彩,网上出了新招,就是代买,你线上下单,我线下用体彩的机器下单,结果前几天政府又出新规,代买也不允许,天天中彩票就这么废掉了,只能去线下买。

周五那天,我下去看猫,送猫抓板车和罐头到媳妇同事那边去,跟他聊天,没想到他一个不看球的也买足彩,说是为了提高看球积极性,不买看不下去。我也跟着他一起去投注点去买了点,20块钱的,第一场就跪了。投注点老板说你们要是觉得麻烦可以加他微信帮忙代买,还有个人过来买彩票拿了一堆二维码扫扫就买了好几百块钱的,我都没看懂。估计是哪个APP提供的功能,方便线下下单。

不过正是因为社交平台发展,移动支付方便,其实让很多不看球的人也加入到买足彩的行列,当然也增加了无数的黑庄,地下赌场。不过怎么说了,赌是禁不掉了,你不让网上买,总有人买黑彩。毕竟四年一次,怎么可能不玩。不过小赌怡情,大赌伤身。昨天出来个西安公交车砍人事件,2死8伤,哎,网上说是买足彩输了报复社会,报复性人格。每个人都活的小心翼翼却总是躲不开那突如其来的灾难。底层苦,中层也苦,看看杭州纵火那个,哎,毫无安全感。

这届世界杯第一次用VAR技术,也是我第一次那么专注的看了不少长比赛,以前都是走马观花,32支球队,好多我都不知道是哪个洲的,比如巴拿马,在踢球之前我只知道papar和canal,现在才知道是南美的,还有突尼斯,全是白人,你能信他是非洲球队?北非隔海望着意大利,摩洛哥也是北非的,隔海望着西班牙。

不过这届世界杯踢到现在,我还是看了不少场比赛,昨天突尼斯vs比利时到比赛上半场还是精彩,各种对攻,下半场可能是因为突尼斯人员上的损失,导致后场空虚,被达成筛子,精彩的比赛。C罗本届世界杯是要为他正名啊,确实厉害,能不能走更远就看他的发挥了。然后就是本泽马这届一如既往的没有进入大名单,不过这届法国队前场球星确实多,当然他和足协的矛盾也可能是其中一个原因。作为上届的亚军,阿根廷怕是马上要回家了,梅西怕是最后一届了。另外就是冰岛队,网上都鼓吹全是业余球队,怎么可能,不过人们很愿意相信高手在民间这一说法,不过很遗憾,人家是职业的,不过就踢法防守反击型的,感觉球队能力值一般,只是当时拼了阿根廷被吹捧了下,没想要业余球队能逼平上届世界杯亚军,但是全国积极性很高,大家很享受比赛的乐趣,无论球员还是球迷,这不正是体育的魅力?

中国这届世界杯算是举国参与了,球场边的广告,媒体,记者,还有各种赛后球员颁奖(连中国国家队球员都给C罗颁发过最佳球员奖),当然更少不了去现场看球的大量球迷。

最后,亚洲之光也只剩日本队了,加油。

618买了不少书,应该说相当多的书,正在看年羹尧之死,看完再写点。另外昨天去拔牙,人生第一次看牙医,还是略紧张,下周还得再去拔一颗。

瓶颈期

三十而立,今年一直在思考自己下一步要去哪,要做什么。6米网做到现在,从0开始,近三年时间,目前而言,就商城而言已经较为完善,从百步到六米,从直营到加盟,我想做的还有不少,比如打通云徽联,华信,徽豪等,打通迈尔逊,接入社区,但是从公司角度来讲,实在太难,很多事情我无能为力。想做的太多,资源却太少。动了心思,但是在云南这边联系过不少公司企业,大部分还是以项目为主,而且能力水平真的实在差强人意,一想到他们用jeecg jeesite我心都凉了半截,另外项目为主APP好点的用react native,差点的直接webview包装一层,原生开发都很少,大部分原因都是成本和周期,对于产品本身没有什么要求。

这些做的话,我也都没问题,但是真叫我往后十多年黄金期就这么下去,我觉得有点心凉,技术行业,靠能力吃饭,不进则退,如果没有不可替代的能力,再过10年我身体能熬得住?即使身体撑得住,同样的事情,30岁左右的年轻人能否替代我?综合能力及薪资很容易取代我,因为在我了解或者说参与或主导开发过的项目中,无论政府类型的监控项目,安监系统,还是说大企业的OA,还是ERP,甚至我现在所做的电商平台。就单纯技术而言,我觉得没什么难度,在一线做个5年左右就能去扛住。为了招人,我这边也在网上寻找继任者,看到各种丰富的项目经验的管理人员,招聘开发也是好多都是达内什么刚培训出来都,实在觉得昆明这边落后是有一定道理的,技术和投资热情都不够,没这氛围。

回顾自己这10来年工作经历,也是蛮丰富的,大厂,小厂,创业,传统企业,大集团。从程序员到小企业技术总监。自己从08年7月刚开始参加工作时,做java applet,做xmpp通信。到成都,杭州做iOS,后到成都自由职业又做Android,iOS Python(django),又折腾硬件相关,到昆明做angular1,vuejs1,meteor,python webpy,tonardo,后去某集团第一次开始带团队不到10人,开始折腾ThinkPHP和iOS,到目前6米网做技术总监带最多20多人团队,但负责java springmvc和node核心开发。几乎什么都做过了,个人感觉语言其实不重要了,很多时候知人善任才是最重要的,靠团队的力量才能做成事情,如何凝聚团队,我个人始终觉得团队不是靠管,是靠带,靠以身作则才能前进。

目前我也在给自己定位,如果去大厂,我的经验虽然全面,从技术到产品,但是大部分拉出来都是被资深水平吊打,定位管理是不行的,资历不够,定位单一平台技术专家,能力有可能不够,有可能定位在p7左右,自己最强的是iOS,其次node,毕竟没有时间尽力去钻研单一平台,定位小公司技术总监,但是得找到合适的团队及项目才行。

剩余两月一个把积分商城和翼支付商城搞定,另一个是把新版APP,iOS Android版本都重新上架。剩余时间则是打算深入学习下spring cloud和node这块。方向的话,更看重团队和方向,区块链,视频或者高新玩意,或者传统企业转型。

走一步是一步,先踏出第一步,才能知道后续走的如何。

这几天更新简历后在网站上看看各类招聘需求,自我感觉对比大城市个人能力差距还是有点大,从产品到技术,全面,但是后台经验不是很丰富,很难胜任一线高并发高负载集群。自己的后端java能力和经验有所欠缺,前端及移动端水平足够,自我感觉也是,目前java感觉要再提高除了自学之外还需要实际的大型项目经验,我这边目前这项目上mq,lb,redis,mongo,spring cloud,docker这些都没问题,但是大型上kafka,集群,高并发没实际经验,需要机会去成长。没那么牛叉的项目给我实践,其实和很多朋友聊天,就纯粹技术能力,是没什么差距,只是缺少大项目经验。云南这边动不动喜欢用钱来衡量项目,500万,1000万以上那才是大项目。就价格而言,上千万的我也做过,但是也就那样啊,国企的钱不算钱,难度一般,周期也不长,更别说用户量什么的了。我更愿意看是有多少功能,多少用户量,多大并发,多少服务器,上没上集群,可惜在这边没遇到过。

祈祷落幕时

断断续续的看了两天,今晚在地铁上终于把这本书看完。挺悲情的一个故事,和白夜行,嫌疑人X的献身差不多,看完让我很压抑的故,有时我很好奇,东野圭吾到底是如何能这么透彻的写人性,写小人物的故事。

我个人挺喜欢看推理系列,无论书还是电影,动漫。当然柯南我是追到现在1000多集,从97年到现在20来年了,第一次看柯南是香港回归那年,在奶奶家看的,那年我初一,过年还买的柯南的大礼包,包括卡片,挂历之类的,可惜全部都丢失了。对于推理的喜爱,早先是喜欢那种逻辑推理能力,如何能讲故事讲的合理,有逻辑性可言。现在到不喜欢这类型的,更在意的是人性,正义,不是为了推理而推理。

好多书我都是看了很多遍,出名点的作家就那么几个,我是偏爱日系的,如东野圭吾,岛田庄司,绫辻行人,还有国外的阿加莎,柯南道尔。这些人的书我基本上都看完了,福尔摩斯则是看了好几遍,在我看来,更注重人性描写的是东野圭吾,柯南道尔,对比而言,我更喜欢的几本书则是福尔摩斯,白夜行,嫌疑人X,及刚刚看完的祈祷落幕时。相反对于特别火的那个解忧杂货铺并不是特别喜欢。

东野圭吾的这三本主要就是写那种小人物或者说普通人的故事,普通的就像发生在自己身边感同身受一样。仿佛告诉我很多看似普通的人,内心承受的痛苦或者灾难超乎想象,生活不易。

服务器问题小记

大年29时,门店报了个问题,购买添加收货地址报错,找到问题,post数据到服务器,中文变成乱码,导致计算token和client不一致。找了很久,年前未解决。

年后第一天上班,同事们也都来上班,连调,发现本机,局域网,都是ok的,而且本地服务器也是centos,然而上传到服务器就出错,看git记录,把服务器代码回滚到1月份版本也同样报错。后来就突然灵光一闪,是不是系统语言的问题,对比本地服务器和正式,发现locale不一致,本地是zh_CN.utf8,正式环境却是en_US.utf8,然后修改vi /etc/locale.conf,加一句LANG=”zh_CN.UTF-8″,保存。编辑环境变量 vi ~/.bash_profile或者全局修改 vi /etc/profile 末尾增加export LC_ALL=”zh_CN.utf8″,然后source一下,使其生效。reboot服务器,部署好后台,nohup的输出都成中文了,测试一切正常。

细细一想,阿里云还是很坑的,应该是阿里云更新的时候修改了某些系统属性,然后出现了这种莫名其妙的错误,也算是学习了。

接着昨天来公司,要为电信开发个小程序,然后问题就是要搭建https,我这边是前后端分离,后台java服务器,中间层node服务器,还有一个基于nginx搭建的ftp服务器,要实现全站https,这样浏览器左侧才能变成secure,但是这就需要我java,ftp那块全部要修改,我只是修改了中间层,这样小程序通过中间层调用基本上能通过审核,中间层接口已经是https,过程还是记录一下。

先是在阿里云,安全-CA证书服务,申请免费证书,因为域名服务器都在阿里云,申请还是方便,通过审核后下载证书,上传对应网站的服务器上,修改 vi /nginx/conf/nginx.conf

listen 80;
listen 443 ssl;
server_name 6mi.com www.6mi.com;

rewrite ^(.*)$ https://$host$1 permanent;

ssl_certificate “xxx.pem”;
ssl_certificate_key “xxx.key”;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;

如上所述,将ssl跟在443后面,这样网站能同时支持http和https。

rewrite ^(.*)$ https://$host$1 permanent;这句是将http请求跳转到https。

后面就是基本配置了,认证文件就是服务器上的完整路径。

出了几个细节问题,6mi.com不能跳转到https,www.6mi.com则是ok的,配置了一个显式URL,也就是重定向,6mi.com的@记录跳转到https://www.6mi.com,这样就全部ok了,我记得曾经自己配置过这个的,但是想不起来为什么关闭掉了,今早同事跟我说门店管理系统访问不了,这时候我才明白,显式url会屏蔽掉端口号,6mi.com:8888不能访问但是www.6mi.com:8888则可以访问,怪不得我之前要暂停掉这条解析,然后我依旧暂停了这条解析。

对于ssl,最关键的一点是nginx,因为早先通过source code ./configure make make install 这些命令时候没带参数,默认安装没有ssl module,覆盖安装很麻烦,找到一个教程,几步就搞定了。

/usr/local/nginx/sbin/nginx -V 先查看原版本,然后重新编译要加上–prefix=/usr/local/nginx –with-http_stub_status_module。

进入nginx source code 文件夹,执行:

./configure –prefix=/usr/local/nginx –with-http_stub_status_module –with-http_ssl_module

完成后在make,生成objs文件,cp命令备份当前运行的sbin/’nginx文件,停止服务器。

cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

/nginx -s stop

cp ./objs/nginx /usr/local/nginx/sbin/ 替换完成后重启服务器即可。通过-V命令查看是否替换完成。

over,这几个问题已解决,接下来要啃solr,rabbitmq等。

另外昨天发现vps日志又写满了,查看是pm2的问题,我都停了这个服务器,ghost也停了,ghost也太坑了,干脆把pm2卸载了,npm uninstall pm2 -g,刚又去ghost文件夹,ghost uninstall将整个ghost卸载了。落个清净,曾经很喜欢的ghost blog,简洁舒适,markdown语法,没有多余的功能,我就想要这样的干净写字的地方,可是新版本就越来越复杂了。