一直对AngularJS很好奇,之前看过国内某在线网站的一套AngularJS教程,可惜没看懂.也没理解为了解决什么问题,只是知道是个前端JS框架.这周看到个Udemy - Learn and Understand AngularJS 这个教程.去看了一下,是收费的.强烈推荐看.无字幕,但是不难,已经看完了.讲的非常非常好.网上有别人分享的.我给个磁力链接吧.

01 Getting Started

02 Model, View, Whatever_

03 Services and Dependency Injection

04 Data Binding and Directives

05 Single Page Applications

06 Custom Services

07 Custom Directives

08 Lets Build an App in record time

09 BONUS Lectures

10 Getting Ready for AngularJS 2.0 in 2016

11 Conclusion

非常的介绍.看完之后,你会理解AngularJS解决了什么问题,他的数据绑定怎么使用,模块怎么弄,怎么写服务,怎么定义指令等等.强烈推荐.

最好有一点js和css的基础会比较好理解.如果懂后端开发的就更好了.依赖注入这些有点基础会比较好理解.

这周为啥想说这个话题呢,因为我常用的一个专门用来存储照片的酷盘要关闭了,这直接导致的结果就是几十G的照片文件需要自己再下载下来,然后转到另一个地方.之后我会从以下几个方便说起.

  1. 我使用过的已经被关闭的服务
  2. 我使用过的仍然健在的服务
  3. 为什么说免费的就是最贵的
  4. 我们应该怎么做

1. 我使用过的已经被关闭的服务

这个先从百度空间说起,在很久很久以前,大概是我高中的时候,很多同学开始在百度空间写文章,我当时对各种各样的小软件比较感兴趣,于是开了个百度空间,专门用来写这个东东.分享各种各样的软件.后来百度空间被个产品经理搞坏,然后被关闭了. 百度关闭截图

由于分享各种各样的软件.需要有一个提供下载的地方,于是选择了当时很火的千脑网盘这个网盘当时和很多其他网盘一样,下载有收入.刚才去登陆了一下.居然还有点钱.这个网盘现在处于半死不活的状态.印象中好几年没更新了,当时推行的webOS的概念,只能说太超前,技术又不行.搞成现在这样.基本上就是个高级web页面..后来我就清掉了所有数据
千脑截图

当时个人需要保留一些小的精美的软件,于是当时我大联想推出了一个联想网盘,当时大概是500M的额度,承诺免费永久使用,结果内测期结束没过多久,先是暂停上传,然后取消了个人服务.嗯嗯.从此联想一生黑

什么坚果云之类的我就更不说了.

然后使用了酷盘.原因不多解释,目前他就是那个样子了.说个细节.酷盘在第一次关闭的时候没有声明中的FAQ,只有道歉,没有后续解决方案,相当差劲.后来才加上的FAQ.一旦道歉,说明对方对不起你,要坑你,这句话谁说的来着,大体是对的.

Google Reader.这个不多说.还有云诺,这个厂商更是垃圾,我记得没用几天,就关闭了.然后CEO出来哭,说是大家要理解.
不要在宣传的时候说的天花乱坠,永远免费,绝不关闭,而在关闭的时候说的文艺,煽情,多么不舍,最长久的是默默的陪伴.你说的这么煽情,这么文艺不就是为了坑么.

2. 我使用过的仍然健在的服务

Dropbox,dropbox由于国内访问不畅,已经基本不使用了,但是,Dropbox服务非常长久稳定.空间不大,但是绝对良心.好用.

Google相册,好用.智能,空间不大.前段时间无意在Google相册里发现7年前的一张照片.当时的感觉就是还是Google靠谱.好吧,其实Google也不靠谱.Google Reader的关闭就是个坑.

印象笔记,这小伙貌似最近也顶不住的样子,国内弹购买方案的频率现在极其高.可是免费的我真的够用了..如果哪天超过了免费额度,就买收费额度.

3. 为什么说免费的就是最贵的

免费的产品.那么使用者就是真正的产品.通过这些免费的反馈途径,免费的bug提供者,由于是免费,出现损失可以不赔偿,丢了自负,一旦关闭,使用者需要承受迁移的成本,数据丢失的风险.这个体会最深的就是科学上网了.之前一直找各种工具,各种方法,结果大部分时间耗费上找所谓稳定的那啥,想来花费的时间多看点书,写点代码,也值回来了.最后花点钱买个稳定的,有啥问题,卖方也有责任解决,大家干好自己的事情就好了.非常方便.

4. 我们应该怎么做

买,买,买,任何东西,只有付费,才能享受更好的服务.才能有更稳定的服务,才能有售后支持,和赔偿,不论是科学上网,还是云端存储,还是其他任何东西.有钱的捧个钱厂,没钱的捧个小钱厂.

在服务选择上,国外收费>国外免费>国内收费>国内免费.

目前计划先迁移到百度云上,同时同步到Google相册,然后看条件是不是买个主机,搞个私有云.

工作过程中,有时候需要在本地执行一些简单的sql,但是不想下载太大的mysql这类客户端.恰好看到https://code.google.com/p/java-ascii-table/,完美辅助,于是写个了简单的工具.应该是支持sqlserver,oracle,和mysql的.mysql的测试了.其他的没有测试.还要继续完善.已经放在了github上.

代码很简单.就不贴了.

使用说明

先打包,然后https://github.com/leizhiyuan/sqlclient/blob/master/README.md 根据不同的情况写几个简单的bat就可以了.

  1. mysql
    java -jar sqlclient.jar -u "jdbc:mysql://localhost:3306/mysql" -n "name"
    -p "pass" -d "com.mysql.jdbc.Driver"
  2. oracle
    java -jar sqlclient.jar -u "jdbc:oracle:thin:@127.0.0.1:1521:XE" -n "name"
    -p "pass" -d "oracle.jdbc.driver.OracleDriver"
  3. sqlserver
    java -jar sqlclient.jar -u "jdbc:jtds:sqlserver://localhost:1433/sqlserver"
    -n "name" -p "pass" -d "net.sourceforge.jtds.jdbc.Driver"

截图

交互式执行截图
交互式截图

普通执行截图
一次执行

引用

  1. java-ascii-table项目
  2. commons-cli命令行解析

介绍

最近看到这么个工具-javOSize .官网地址,去官网看了下.发现介绍很有意思,叫做 the missing sugar for your Java cup.(你的咖啡杯中缺少的那颗糖).于是感受一下这颗糖到底甜不甜

安装

安装非常简单,从这里下载,其实完成之后就是一个jar包.非常简单,不用配置啥的.

简单使用

使用方法就是从先附加到一个java进程上,在linux,上我直接执行
ps aux|grep java
就能看到了.不废话,得到java进程的pid之后,运行 java -jar javosize-1.0.9.jar pid pid就是pid的号了. 然后会看到如下图的界面启动页面,表示已经附加成功了.先看看都有啥.执行ls.看到有这么几个命令.我比较单纯,刚开始以为是可执行文件.结果丢人了.看了下官方文档,才知道是目录.进入对应的目录.然后执行ls就能看到对应的信息了.ls简直不能再万能..改目录支持的所有命令通过在对应的目录执行help来查看.个人尝试觉得好的功能有.
所有功能目录

  1. 动态修改类
    进入CLASSES目录,然后通过执行
    ls|grep xxx
    来找到需要修改的类,然后通过vi 就可以直接编辑.编辑完成后,直接保存就会动态替换.文档里说是支持jdk1.7以上,对1.6的支持估计是不行的.没有测试.
    修改类demo
  2. 无须重启开启jmx
    直接挂载之后,执行cd REPOSITORY 然后执行就好了.
    exec START_JMX_SERVER 6666
  3. 拦截任意代码
    可以动态添加类似Spring中的aop方法.用于打印一些调用日志,排查线上问题.进入INTERCEPTOR目录.然后通过如下的方法给某个类的某个方法添加拦截器.
    create TickServlet begin mypackage.Hello doGet System.out.println("Servlet invoked");
  4. 检测内存泄漏
    进入 REPOSITORY 目录,执行 exec TOP_FAT_STATIC_VARIABLES 5 com.apache.*会取出某个包下面占用大小最大的5个类.会很方便找到.
  5. 自动检测性能问题
    PROBLEMS 目录专业解决这种问题.进入目录后.执行ls命令.会看到这样的场景

    • Concurrency
      Deadlocked: false
    • Memory
      High GC (>2%): false

    这里目前只检测了死锁和频繁GC.已经很有用了.至于效果还有待观察.

  6. 无需重启开启GC 日志
    和开启jmx一样,进入JMX目录后,执行
    exec java.lang:type=Memory.setVerbose(true);
    就开启了.

更多文档

  1. 官方文档

项目经过一年终于告一段落.于是有了一个短暂的休假.

早上照例没能睡好觉.很早就醒了.然后又躺了一会,醒来看了会订阅.然后听了一集<< Mr.Robot >>,感觉还行,再对着字幕看了一遍,以后还是有一些地方理解的有问题.以后还是要多对着无字幕版的美剧去看,才能慢慢听懂更多的,比如今天听到个society,讲社交焦虑,听到很熟悉,就是没反应过来.学而不用则殆.

中午给文哥寄了个快递,顺便点个饭.之前的”手艺”应该也已经忘得差不多了.到杭州之后很少做饭,工作太忙.没办法.当然这只是借口.主要还是我懒吧.

下午按计划好的去浙江图书馆,从大学出来后,虽然书还是看了一些的.但是也再也没有走入图书馆.之前一直想去上海图书馆,结果一直耽搁,今天去浙江图书馆办了个证,借了几本书,看着里面的人自习的自习,借阅的借阅,想想还是有点熟悉的.遗憾的是书相同的份数有点少.想借的几本书都被人借走了,最终借了个<< 七周七语言 >>,希望能给自己的编程带来不一样的思考角度.读完后争取写个书评和总结,还借了一本摄影相关的,毕竟拍照是服务妹子的技能.还有个<< netty权威指南 >> ,虽然这本书评价好像不高,但是拿来看看还是可以的.

下午回家.杭州的下午还挺美的.天气凉爽.只是作为工作狗,没有下午出来的机会吧.

工作忙,不过在一切自动化的指导下,(马克思没有找我),对linux 的shell操作熟悉度急剧上升,希望能写的更好,让更多的过程自动化,也希望有时间停下来想一想.当时为什么选择写代码,为什么选择当前的职业,知道自己做了什么,知道自己是否进步,想起之前看到的一个话,不知真假,

只是因为三轮车好学,你就要一辈子骑三轮车吗? – Douglas Englebart

在职业之外,除了高效做好自己的工作外,也要学习更多的技能,英语,锻炼身体,其他编程相关的.不要安于现状.不要重复自己.还是那句话,不要让你的身份限制你的能力.

最近发现某个系统在第一次做操作的时候非常缓慢,逐步定位打印更加详细的日志后,发现问题是使用了SecureRandom 这个类来获取随机种子,这个类第一次初始化的时候setSeed的值,非常缓慢,偶尔出现, 排查的过程就是二分,不断定位具体的代码,最终定位

也就是说根本原因是SecureRandom 这个jre的工具类的问题.具体的bug搜索之后,见

http://bugs.java.com/view_bug.do?bug_id=6521844

详细的解释过程:
参考: http://www.websina.com/bugzero/faq/securerandom-slowness.html

Q: Why the SecureRandom generateSeed is so slow or even hang on Linux OS?

A: When you login, it hangs or takes more than a minute to get the response.
If your server is on a Linux OS, the culprit here is SecureRandom generateSeed()
which uses /dev/random to generate the seed. However, /dev/random is a blocking
number generator and if it doesn’t have enough random data to provide, it will
simply wait until it does, which forces the JVM to wait. Keyboard and mouse input
as well as disk activity can generate the randomness or entropy needed. But on a
server that lacks such activies, the problem may arise.

大意是说当使用SecureRandom 的时候默认使用的/dev/random 文件来生成种子,如果没有足够的种子数据,(这些数据是由键盘,鼠标,磁盘活动等产生的,如果没有这些活动,就没有足够的数据)会一直等待,导致jvm卡住,耗费比较长的时候.由于出现问题的这个环境的确是最近没什么操作,而且复现的操作也是隔个一个晚上,重新做业务才会出现.

文中给出了一种解决方案.

  1. 启动参数添加 -Djava.security.egd=file:/dev/./urandom,验证是可以的.
  2. 修改随机数获取方式

这里urandom是啥呢,引用自维基

/dev/random的一个副本是/dev/urandom(“unlocked”,非阻塞的随机数发生器[4]),它会重复使用熵池中的数据以产生伪随机数据。这表示对/dev/urandom的读取操作不会产生阻塞,但其输出的熵可能小于/dev/random的。它可以作为生成较低强度密码的伪随机数生成器,不建议用于生成高强度长期密码。

类似案例: SecureRandom 导致tomcat启动过慢.
https://wiki.apache.org/tomcat/HowTo/FasterStartUp#Entropy_Source
从文中看到说java8已经提升了这个性能.但是一般生产环境的java版本是不会改的.

之前在工作写了一个数据库查询的工具.大体背景就是这种工具需要跨不同环境的数据库,开发,测试,性能等.最早简单写了一个版本,在第一次查询时会初始化三个库的连接,保存在map中,然后后续查询直接根据使用者选择的环境类型取出对应的连接构造sql即可.

随着各个不同系统接入的越来越多,各个平台都保存了自己的连接,导致代码冗余度急剧上升,上周,利用晚上的一点时间读了一下<<重构>>,这本书,深受启发,一个是重构就是要采用小步快走的方式,在测试用例的覆盖下,快速改动,去掉代码中不合理的地方.另一个就是重构需要对业务的当下和未来的变化有一个比较深刻的理解,知道这个系统能做什么,不能做什么.才能更好地做重构.

于是,根据这个工具的特点,感觉抽象工厂模式比较合适,于是在抽象工厂模式的指导下,对关键部分进行了重构,在增加了几个类之后,代码复杂度开始下降.各个接入系统的代码基本上保持在了几十行内,之前都是几百行,大量冗余代码,只能说自己之前眼光太短浅了.并且,采用了类似单例模式的操作.当查询的时候,先根据当前环境作为key取连接,如果连接被关闭,或者不存在,则初始化,然后放到map中,返回.如果有的话,直接用.这样改动后,第一次查询的时候只需要初始化一个连接,速度极快.也算个好处..

由此,反思了一下,设计模式之前也看过.但是总觉得各种书上讲的都比较浅显,给出的例子也似乎如作者所说,很符合那个模式,但实际上,在工作中如何识别当下的业务应该是比较难的,需要在业务变动中,不断地重构自己的代码,才能发现,某一种模式似乎特别适合解决这种问题,反之,重构也需要一定的设计模式作为基础,否则对代码的重构会只停留在抽取公共方法.重命名.大类变小类的阶段..

希望接下来能够抽空把<<敏捷软件开发:原则、模式与实践>>这本书看完.同时能够真的理解这些模式的场合,想起一句话,知道一个技术方案的好,说明你还没有理解这种方法,只有你知道了这个方案的不足,你才真正理解了他,相信很多技术我都没有理解.设计模式也是,希望之后能够理解每种模式的不足,重构这本书也要经常翻翻,能加深对代码的理解.

最近也没啥特殊的事情,恰好昨晚魅族云服务当机,导致本地所以联系人丢失,路上想给家里打个电话,没法打,最近又入手了国产入门机械键盘雷柏v500,写点啥呢.

魅族

魅族mx4是我去年11月份入手的.且不说魅族搞饥饿营销.先说说我手机从去年到现在遇到的问题.

  1. 屏幕黄边,刚入手没多久,屏幕左侧出现明显黄边,当时很无语.这质量..不过拿去直接给换了个屏幕,同事的另一台也是,入手后直接屏幕大面积坏点.
  2. 通话质量,我买手机主要就是为了打电话,可是魅族这通话质量,打着打着就没声音了,电流声声音很大.尤其微信的时候.
  3. 固件更新质量,有问题通过更新是好事,但是魅族的工程师每周编出那么多更新log也是蛮拼的.实际上一点问题没解决.老是改计算器,闹钟,比较著名的就是之前有人提到的滑动变点击,用了好几个月最后悄悄修复了.
  4. 安全,之前对魅族的质量还算放心,结果上上周,直接整个出应用中心故障,导致很多用户手机莫名秒开始自动下载软件,自动安装,卸载完成又出现,我当时怀疑是我开了wifi下自动更新,于是关掉了.结果还真是.最后给出个这么说法.

    亲爱的魅友们: Flyme应用中心于4月28日晚间服务器发生故障,部分用户出现应用名称与图标混乱,自动更新安装其他应用等情况。在发现故障之后,2个小时之内已经解决,给大家造成不便我们深表歉意。

    你特么在逗我.你确定是两小时?

  5. 云服务,同上,之前很放心的把手机通讯录,联系人之类的都同步到了魅族的云服务上.结果已经出现好几次没法同步,数据本地丢失,找客服说让我再试试.服务器报错你让我再试试..
  6. 诚信,我司的价值观之一诚信,现在看来真的很重要,魅族公司品质极差,之前其总设计师杨颜放狠话,说5月份公测flyme4.5 ,其官微更是转发,说不发发手机,结果,所有人等到5月份,前一天先把公告删了.然后重新发了一封,说不公测.品质极其差.

综上,对魅族手机已经彻底失望.一分钱一分货,就别老是贬低别的厂商,一句话评价就是中看不中用.

雷柏v500

雷柏v500是我的第一个机械键盘,我是很喜欢80%这种键位的.不喜欢小键盘区域,有了小键盘区域,键盘太大了.于是当时是看好了filco 87圣手,poker2,race2的.最后由于前一个太贵,后两个没有F1,F2这些而告终,毕竟我是要调试程序,写代码的.没有这几个直接的键位那跟咸鱼有什么区别.用了几周下来.简单汇总下

  1. 便宜,219买的.这价格是真的便宜.而且是80%的键位,雷柏也还是比较出名,之前也买过个鼠标我记得.
  2. 手感,和普通薄膜键盘手感差异很大.手感不错,打字的确有快感.但是你说让爱上打字这个还是有难度的.毕竟.班上多了心情不好.
  3. 不方便,由于是80%,所以键盘小,但是,相当重,好像是有个钢板.非常重,比我的x1笔记本都重,整个人都不好了.自从带去公司,再也不想带回来了.

综上,整体还是不错的,一分钱一分货,不要夸自己和cherry,flico的距离,差距肯定大大的.但是性价比高.

总结

总结就是魅族是个坑爹的公司,雷柏键盘还行吧.

2014年

在这一年里,入职支付宝,成长许多,也遇到了一些问题,对于复杂问题的理解力稍微变强了一点.技术上也有了一定的长进.但不够让我自己满意.博客也更新缓慢,很多总结性的东西只是记录在了evernote中,不够完整.

和文哥也经历了很多事情.有一些问题,也多数都解决了,这一年项目紧急,加班较多,希望能够圆满的结束这个项目,未来总是充满了很多的变数.珍惜眼前人,眼前事,工作生活都是如此.

感谢文哥,家人,师傅,同事和阿里.谢谢大家在2014年的照顾和合作.总而言之,和大家在一起很开心.

2015年

新的一年里,希望在技术上有更多的长进.实实在在可以看的见的作品或产出.坚持写博客,能够打上个人更多的标签,而不仅仅是在支付宝或者阿里工作.

和文哥的相处上可以更加理解和体谅,希望文哥在自己喜欢的领域做出自己的事业.有梦想就要去行动.有目标才会实现.

2015年不会比2014年更加好过或者是难过,相信明年的这个时候.还能笑谈今日的一切.

最近博客越来越慢了.然后一直也有markdown写文章的想法.于是花了点时间把博客迁到了hexo+github+gitcafe的组合上.

安装Git

下载 msysgit 并执行即可完成安装。

安装Node.js

在 Windows 环境下安装 Node.js 非常简单,仅须下载安装文件并执行即可完成安装。

安装hexo

利用 npm 命令即可安装。(在任意位置点击鼠标右键,选择Git bash)

npm install -g hexo

安装完成后,找个目录,比如d:/blog下面.右键,git bash,然后执行
hexo init
这样就会自动生成所有的目录结构了然后在安装一下依赖包:
npm install
然后执行
hexo generate 用来根据md文件生成对应的html文件.执行
hexo server 则启动本地服务器.打开
127.0.0.1:4000端口查看

本地查看没啥问题.就需要部署到git上了.先配置一下.
在d:/blog下面的_config.xml中配置远程git的服务器.现在已经支持同时部署到github和gitcafe.在末尾添加

1
2
3
4
5
deploy:
type: git
repo:
github: git@github.com:yourname/yourname.github.io.git,master
gitcafe: git@gitcafe.com:yourname/yourname.git,gitcafe-pages

其中的yourname就是你的名字

然后执行
hexo deploy
即可.让输入啥就输入啥.
下面是命令的简写
hexo g == hexo generate
hexo d == hexo deploy
hexo s == hexo server
hexo n == hexo new

网站主题配置

同样的,在d:/blog下面执行
git clone https://github.com/wuchong/jacman.git themes/jacman
即可复制主题.
然后修改_config.xml文件.在里面找到theme 设置为
theme: jacman
注意冒号后面有空格

wordpress迁移

  1. 导出文章
    登录wordpress管理控制台,选择工具->导出,再选择文章。点击下载导出的文件,就可以得到一个名称类似wordpress.2015-01-12.xml的文件。
  2. 安装迁移插件
    npm install hexo-migrator-wordpress --save执行安装
  3. 导入文章
    hexo migrate wordpress source 这里source就是刚才那个文件的地址,绝对路径或者相对路径都行.导出的中文可能有编码.手动改一下,或者写个脚本简单转换一下.
  4. 导入图片
    经过上面的步骤,会发现图片还是原来的连接.这里看这个导入图片插件使用

其他问题

github连接出现Bad file number问题
使用GitHub来管理博客源文件
Hexo免输入密码部署到github
教程:github设置多账号