[Dr.Lib]各种.travis.yml

于是这两天撸mod和插件的.travis.yml的时候还是整出了不少东西的,记录一下什么的。

C++: 测试Clang3.8 & GCC 6 的 Coveralls 数据

这个是当年折腾数据结构时写的CI了,因为travis的Ubuntu环境目前还是古代的12.04 precise,所以很多东西要么走PPA要么直接下

这里我用的是两个镜像,分别测Clang与GCC。由于两个编译器的目标gconv版本不同所以还需要判断一下.

Java Minecraft Forge mod:repo无关的.travis.yml & 自动更新update.json

其实主要部分还是给了gradle来做= =

要做到.travis.yml和gradle里不带repo信息的话,善于利用环境变量吧。

有一个遗憾是 travis-ci/dpl issues#613 ,暂时没法自动设定是否为prerelease^

 

Java Spigot plugin:repo无关的.travis.yml & 自动更新maven repo

 gz

[时间复杂度 Time Complexity of Algorithms

神犇说世上的美有三种,一是优美精致的数据结构,二是巧夺天工的神奇算法,三是你温暖世界的笑容

计算机之所以叫做计算机,就是因为它在“计算”这一件事上做的可以比人类快。而我们的任务,就是告诉计算机要如何去进行一个计算,也就是要实现一个算法。
想要让程序更快,除了要提升计算机处理器的运行速度之外,最重要的就是要提升算法的效率,以及算法的在这个计算机上实现的的速度。
做同样的一件事情,可以有无数种做法。比如说给一些数字排序,就有好几种做法。那么要怎么比较他们的速度呢?
最直观的做法自然是写出对应的程序,给定一个输入,然后比较一下他们的运行时间。这样的做法简单粗暴,然而并不能给我们关于这些算法的更多信息,也只能反映这些算法在这个特定输入的情况,误差也不容小视。
更为严谨的做法,是对这个算法进行数学上的分析,以得出这个算法在理论上的运行效率。
以选择排序为栗子把
(然后把栗子剥开吃掉~

来看看他的运行原理
选择排序
第零轮从所有的n个数据中找出最小的,需要对每个\(j\in \left ( 0,n \right )\)进行一次比较,共n-1次
第一轮从剩下的n-1个数据中找出最小的,需要对\(j\in \left ( 1,n \right )\)每个进行一次比较,共n-2次
……
第i轮从剩下的n-i个数据中找出最小的,需要对\(j\in \left ( i,n \right )\)每个进行一次比较,共n-i-1次
第n-2轮从剩下的2个数据中找出最小的,需要进行一次比较

总共需要进行 \(\sum_{k = 1}^{n-1} k=\frac{n\left ( n-1 \right )}{2}\)次比较
然后每轮需要对数据进行一次交换,合计是\(\left ( n-1 \right )\)次交换
也就是说,这个程序所需要运行的时间大致上是
\(T=\frac{n\left ( n-1 \right )}{2}T_{0}+\left ( n-1 \right )T_{1}\),其中\(T_{0}\)为一次比较需要的时间,\(T_{1}\)为一次交换所需要的时间
当n很大的时候,对T的量级起到决定性作用的将会是什么呢?
(还记得函数在无穷大的极限吗?
n趋向于无穷大时,起作用的将会是n的二次项,也就是\(\frac{n^{2}}{2}T_{0}\)
那么可以看出,选择排序的算法的运行时间在n充分大的时候,大致正比于\(n^{2}\)
继续阅读 "[时间复杂度 Time Complexity of Algorithms" »

Windows 10 vs Longhorn

习惯了Start Screen和Charm Bar,现在在WindowsXP上关机都不会关了。想想不久以前还在迷恋Windows7酷炫的Aero、为了Mac的壁纸把Windows 7彻底搞成Mac的样子以及成功的在Windows上玩了一把桌面立方体……LOL,现在还不是Modern UI的支持者。

 

想起来家里买的台式机,大概就是Vista出来后第二年,标配Vista,貌似有Aero……之所以说貌似是因为抱回家的时候就变成蓝天白云一片绿了。现在想想刷回XP还是挺正确的。

XP诞生之时,正好是桌面系统飞速发展的时候,各家各户都用上了电脑。中国电脑桌面系统的标配,从DOS+WPS到了XP+OFFICE。开发软件的越来越多,打包盗版系统的也越来越多,玩游戏的也越来越多……就这样,XP在中国乃至世界的PC上站稳了脚跟。有一台装着XP的电脑,握着一台诺基亚就算是紧跟潮流了。

 

微软也没闲着,时代总要进步嘛,他们也在继续研发,Longhorn,Longhorn Reset,Vista。好吧这是退步了。

继续阅读 "Windows 10 vs Longhorn" »

基于bigCatAndroid主题的早期版本制作,采用GPL协议。

外观:如你所见

也正如他的名字,HoloDark。简约又不失炫酷,轻巧又不失强大。深色背景,蓝色和灰色线条,Holo风的界面,绝对如你所愿。

正在调试HoloDark主题

一点一滴的努力~

 

​特色:

  1. 标准HTML5*
  2. 主题设置功能
  3. 自动推送更新(unofficial)
  4. 自动识别文章内H2并生成侧边索引
  5. 索引和侧边栏滚动固定
  6. AJAX搜索结果提示
  7. AJAX评论集成(动画状态效果喔~)
  8. 评论自动邮件通知被@的同学
  9. 快捷键 / 开启搜索
  10. 文章底部作者介绍+二维码
  11. 响应式布局(Beta
  12. 全格式文章支持
  13. ​微格式+微数据​+SEO优化

*由于使用了x-webkit-speech,暂时验证HTML5会有一个error

下载:

im.librazy.org/holodark/HoloDark.zip

Github:

https://github.com/Librazy/HoloDark

继续阅读 "WordPress主题:HoloDark" »

【搬迁】单步跑过BlogEngine的Trackback——系统调试&Trackback介绍

用BlogEngine的代码扒了下Trackback的代码直接搬到了Librazyframe上,结果根本跑不起来:

System.Net.WebException: 请求被中止: 请求已被取消。 —> System.IO.IOException: 在写入所有字节之前不能关闭流。

在写入所有字节之前不能关闭流?好像用到流的只有

整了半天,决定跑单步调试。根据 BlogEngine.Net架构与源代码分析系列part7:Web2.0特性——Pingback&Trackback找到了入口点SendPing.cs

“实际上SendPings类是BlogEngine.Net的一个Extension(类具有Extension特性,这个后面会有专门的一篇文章来讲解),它监听了Page.Saved和Post.Saved”

PostSaved监听Page.Saved和Post.Saved,当并非删除、无动作或不公开时,异步执行Ping(item, url)

Ping方法睡两秒(为什么?),执行PingService.Send(itemUrl);和Manager.Send(item, itemUrl);

这就是真正的入口了。

f12到Manager.cs

首先尝试发送Trackback,未成功则发送Pingback。不过GetTrackBackUrlFromPage好像不识别WordPress的rel="trackback",只认Trackback:Ping

继续F12,到了Trackback.cs

30行完全把中文置于不顾,这就是开头的异常产生的原因。(行号以所贴代码计算)

修改一下,开始单步

注释以下几行

SendPing.cs 38,41 Thread.Sleep(2000); PingService.Send(itemUrl);

修改Trackback.cs

发起请求了

一堆设置,应注意的是application/x-www-form-urlencoded这是,Trackback的格式

这是我修改后的写入,真正的核心代码实际上就只有message.ToString(),进去看看

真正我们要发送的就是“title=xx&url=xx&excerpt=xx&blog_name=xx”,

  title – 文章的标题

  excerpt – 文章的摘要。在Movable Type系统中,如果摘录信息超过255个字符将会被截断为252个字符,并在后面增加…三个字符

  url – 文章的永久连接。象其它永久连接一样,这个连接应可能准确地在页面中定位文章的入口,因有疑问时这个链接会用到

  blog_name – 发表文章的blog的名称

而这些参数,是在Manager.cs 17传入的(BlogName是BlogSettings.Instance.Name)

把这个字符串转化为byte[]后写入请求,

获取响应(看来更改没错,测试网址马上接到了Trackback)。如果成功,响应会包含"<error>0</error>",否则失败。出了异常更不用说了。

返回后到了Manager.cs 22,如果trackbackSent为false,则发送Pingback

Pingback实现和Trackback大同小异,只不过是用了Xmlrpc而已

F5放水,结束了单步,看来BlogEngine也有挺多毛病的……不能自动发现WordPress的Trackback URL,Trackback消息不能带中文,发送Trackback或Pingback时可能无法捕获超时异常……不过BusinessBase这种状态维护方式还是挺不错的。