GO指南 练习:rot13Reader

有种常见的模式是一个 io.Reader 包装另一个 io.Reader ,然后通过某种方式修改其数据流。

例如,gzip.NewReader 函数接受一个 io.Reader (已压缩的数据流)并返回一个同样实现了 io.Reader*gzip.Reader (解压后的数据流)。

编写一个实现了 io.Reader 并从==另一个 io.Reader 中读取数据的 rot13Reader== , 通过应用 rot13 代换密码对数据流进行修改。

rot13Reader 类型已经提供。实现 Read 方法以满足 io.Reader

……

阅读全文

GO指南 练习:切片

实现 Pic 。它应当返回一个长度为 dy 的切片,其中每个元素是一个长度为 dx ,元素类型为 uint8 的切片。当你运行此程序时,它会将每个整数解释为灰度值(好吧,其实是蓝度值)并显示它所对应的图像。

……

阅读全文

GO指南 练习:图像

定义你自己的 Image 类型,实现必要的方法并调用 pic.ShowImage

Bounds 应当返回一个 image.Rectangle ,例如 image.Rect(0, 0, w, h)

ColorModel 应当返回 color.RGBAModel

At 应当返回一个颜色。上一个图片生成器的值 v 对应于此次的 color.RGBA{v, v, 255, 255}

……

阅读全文

GO指南 练习:循环与函数

计算机通常使用循环来计算 x 的平方根。从某个猜测的值 z 开始,我们可以根据 z² 与 x 的近似度来调整 z,产生一个更好的猜测:

z -= (z*z - x) / (2*z)
……

阅读全文

GO指南 练习:错误

练习:错误 从之前的练习中(牛顿平方根方法)复制 Sqrt 函数,修改它使其返回 error 值。

Sqrt 接受到一个负数时,应当返回一个非 nil 的错误值。复数同样也不被支持。

……

阅读全文

使用lorotate压缩服务器日志

马上春节了,发现服务器的日志一天天地变大,这样子下去的话容易出现硬盘告警,于是想到了使用一些方式去定期清空和压缩一下旧的日志,网络查找一段时间后,发现logrotate是不错的选择。

……

阅读全文

Android Gradle离线更新

从https://downloads.gradle.org/distributions/gradle-3.3-all.zip 下载Gradle文件。 Gradle Wrapper设定: #Mon Aug 14 15:14:25 CST 2017 distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip 使用迅雷下载gradle-3.3-all.zip,保存这个文件到以下路径: C:\Users\<YOURNAME>\.gradle\wrapper\dists\gradle-3.3-all\55gk2rcmfc6p2dg9u9ohc3hw9 这里的YOURNAME当然就是指你自己的用户名的路径了,这个路径基本上都是固定的,不信可以看这个博文,它的路径也与我的是一样的http://blog.csdn.net/u010921682/article/details/73741264……

阅读全文

Android计算字符串的MD5值

之前找过一些版本,发现有一些使用场景下,md5sum会少一个字符,这对于一个已发布出去的版本是有一定的硬伤的。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 public static String md5sum(String str) { MessageDigest mdEncoder; try { mdEncoder = MessageDigest.getInstance("MD5"); mdEncoder.update(str.getBytes(Charset.forName("US-ASCII")), 0, str.length()); StringBuilder hexString = new StringBuilder(); for (byte b : mdEncoder.digest()) { hexString.append(String.format("%02x", b&0xff)); } return hexString.toString(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } ……

阅读全文

iOS获取应用程序信息

主要获取了APP应用程序名、以及版本号。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 let infoDict = Bundle.main.infoDictionary!; let appDisplayName = infoDict["CFBundleDisplayName"]; let appShortVersion = infoDict["CFBundleShortVersionString"]; let appBuildVersion = infoDict["CFBundleVersion"]; let resolveDict = [ "appDisplayName": appDisplayName, "appShortVersion": appShortVersion, "appBuildVersion": appBuildVersion, ] do { let json = try JSONSerialization.data(withJSONObject: resolveDict, options: []); let jsonStr = String(data: json, encoding: .utf8); resovler(jsonStr); } catch { rejecter("Get AppInfo error", error.localizedDescription, nil); } ……

阅读全文