重剑无锋


  • Home

  • Archives

ball-lightning

Posted on 2018-05-20

故事情节

《球形闪电》是刘慈欣早年的科幻作品。以第一人称讲述了一个少年孩童时代,因一晚狂暴的雷雨之夜被球形闪电夺去父母性命的机缘下,从此迷上了球形闪电的科幻故事。

读感1

大学毕业之后已经很久没看过科幻小说了。现在看小说和以前有最大的不同就是快速浏览。不再像以前那样仔细咀嚼。而且都是不敢兴趣的章节往往直接跳过去。另外就是,会被中间的某些情景突然带到现实世界中,应该是”分神”。不是那种纯想象的情景。这或许是就是看到和接触到的现实的事物多了,想象力就慢慢的衰弱的感觉吧。一度还对个别场景下的描述觉得可疑,觉得那些不可能发生的。

读感2

可是,科幻小说真正的目标不就是联系现实,并且超越现实,思考和憧憬那些美好的未知事物吗?这些想象创造出那些过去和现在都不存在,在未来有可能存在的创造物和事件。比如古代的封神演义里面的千里眼,顺风耳等,现在都已经有了实际的对应事物。但是真正令我们着迷的永远是未知的事物, 比如黑洞,星际旅行。无论是宏观还是微观上的想象力,都是这个宇宙的美好。

收获共鸣

我对其中的一句话特别有感触:“美妙人生的关键在于你能迷上什么”。这不就是我们一生在追求并为之努力的东西吗?

从 ubuntu 到 arch

Posted on 2018-05-19

逃离 ubuntu 转投 arch

起因先是 ubuntu16.04 升级到 ubuntu18.04, 结果每次开机直接进入了一个grub的 shell 界面, 系统无法启动了。第二次装了ubuntu18.04, 然后后面装了不少开发软件,再升级时,又挂了!有点来气,花了两天时间重装系统。不过,这次是换成了 arch。为啥,因为 arch 官网上介绍说它的定制性更高(更需要折腾),而且是滚动更新(What are you 弄啥咧?)。

arch 系统的 u 盘安装

记录一下,头一天的时候,我的安装方式是按照知乎某个人的推荐装的,结果好几个地方卡死了。比如联网,比如挂载。后来证明,只要熟读 arch 官网 wiki 上面的文档(武功秘籍),基本上是不会整出一些”奇门遁甲”的啥”幺蛾子”的。前提是,一定要通读。

切到 arch 的感受

  • 速度比 ubuntu 快。天下武功,唯快不破。不知道是否因为 arch 的二进制包的安装方式,还是 安装的无关的依赖很少的缘故,在 arch 下面上网几乎不卡。即使看 youtube 视频也是非常流畅!
  • 安装效率高。arch 下面 sudo pacman -S smartgit, 需要安装的依赖,直接选数字然后回车就好了。安装好快。而 ubuntu 下面安装 smartgit 的需要好几个步骤,比如你安装了 smartgit包,好需要相同的命令去找缺失的依赖包(javaxxxxxx)。还得说下使用 “yaourt” 去安装 AUR 类型的软件真的是很便利。比如 安装个 nmap 扫描一下主机ip和端口:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
➜  blog git:(master) ✗ yaourt nmap
1 extra/nmap 7.70-2 [installed]
Utility for network discovery and security auditing
2 community/vulscan 2.0-2
A module which enhances nmap to a vulnerability scanner
3 blackarch/autonse 20.82a6e18-1 (blackarch blackarch-automation)
Massive NSE (Nmap Scripting Engine) AutoSploit and AutoScanner.
4 blackarch/brutespray 116.bd65d69-2 (blackarch blackarch-automation blackarch-cracker)
...
32 aur/umit 1.0-1 (67) (0.20)
A powerful nmap frontend.
==> Enter n° of packages to be installed (e.g., 1 2 3 or 1-3)
==> ---------------------------------------------------------
==> (这里选数字然后回车就可以了)
  • 几乎所有需要的比较新的软件和开发工具都有了。而且都是命令行三两下就安装好了。比如 docker, vim,emacs, docker, git, smartgit, nodejs, npm, nvm, python(系统自带了), php, nginx, apache, mysql, mariadb, postgresql, virtualbox, tmux, zsh(这个好像是自带了), shadowsocks(这个好极了,就下个package, 再命令行启动一下,浏览器加个 proxy 扩展就直接翻出去了!)等, 而且这些软件几乎都是主流中非常新的版本!这个比较和我心意。

小结

  1. 通过 ubuntu 迁移到 arch 的过程,中间加深了对挂载,分区,以及搭建系统的很多命令的认知。
  2. 选一个就近的源,比如清华的。
  3. 没有什么是不能用一条命令解决不了的,如果不行就用两条!
  4. 安装过程中,有犯错,比如一开始略过官方 wiki 直接参照网上某个人的推荐,东看一点,细看一点,结果这个装了一半,那个流程也是一半,都出现了一些一时令人懊恼的问题。还好最后回归官网 wiki 通读,针对具体的章节细读,才顺利解决了。
  5. 安装 arch 一定要联网。最简单是直接通过命令行的 wifi-menu 调出无线 wifi 的列表,选择自己知道密码的那个 wifi, 然后输入密码。
  6. 选一个图形界面桌面,比如 xfce, 安装。
  7. 在联网的基础上,第一要务是先翻出去。道理不用多说。其他都是水到渠成了。
  8. 从 arch 系统中 安装 blackarch 非常方便。blackarch 包含大概 1900 多个黑客武器! 强大而丰富的武器库!我去扒了一下,貌似 blackarch 还是 kali 系统的那个团队搞的!
  9. 然后,能用命令行快速解决的,就不要多花时间去选个图标了。比如一开视频,发现,播放没有声音! 装个 alsamixer 即可, 命令行里面直接调起 alsamixer, 控制音量啥的,都在里面了。弄张图吧。

php 源码 (宏)

Posted on 2018-05-01

zend 基础类型- 宏

zend 底层有相当多的宏, 特别是 php7 系列, 源码比 php 5 有不少结构方面的改变。所以不去研究 php5 的 zend 了, 直接往后研究的源码都主要看最新的 php-src。 zend 系列的宏主要分布在 zend_API.h, zend_types.h, zend_operators.h 里面。

Read more »

源码

Posted on 2018-05-01

源码看累了

源码看着看着,会产生一种疑惑: 我为什么要看源码?当初我之所以到底层看源码,完全是好奇,想知道它后面运行的机制。但是,最近开始疲劳了。忽然觉得:这样是不是没什么必要?因为,一个好的赛车手,未必就能造车,或者修车。但他可以将车玩的很溜, 上演速度与激情!而一个造车师傅,或者修车师傅,却不一定能在 F1 赛道上撒的开。
那么,如果满足了好奇心之后,还有必要去深究底层的实现逻辑么?

php 源码 (string)

Posted on 2018-05-01

PHP 源码赏析 ~ 第一套广播体操(string 篇)

寻根究底

最近看到一些 php 的函数时,一直在想,它背后是怎么实现的呢?不仔细的挖一遍它的底细,压根就是经常会用错。而且感觉用的是一个黑箱子。指不定里面啥时候窜出一条蛇来。所以,找来源码,推敲一下底层的实现逻辑。

Read more »

lua

Posted on 2018-04-26

Lua 入门

最近想系统花几天时间学习 Lua 是因为在看 《redis 实战》的过程中发现 Lua 可与 redis 匹配产生叠加性能。nginx+Lua+redis 的联姻又可以再次增强 redis 的功力。

教程

Lua 是用标准 C 语言编写的强大的、开源、轻量级、嵌入式的脚本语言。提供面向过程, 面向对象, 面向函数式, 数据驱动的编程方式。

设计目的

嵌入到应用程序中, 为应用程序提供灵活的扩展和定制功能。

特性

  • 轻量级: 使用标准 C 语言编写并以源码形式开放, 编译后只有 100 多k, 非常便于嵌入到别的程序中。
  • 可扩展: Lua 提供了非常易于使用的扩展接口和机制: 由宿主(通常是 C 或 C++)提供这些功能, 使用起来就像内置的功能一般。
  • 其他特性: 自动内存管理; 提供了一种通用的类型的表(table), 用来实现数组, 哈希表, 集合, 对象; 语言内置模式匹配; 闭包(closure); 函数也可以看作一个值; 提供多线程等。

应用场景

  • 游戏开发
  • 独立应用脚本
  • Web 应用脚本
  • 扩展和数据库插件: MySQL Proxy 和 MySQL WorkBench
  • 安全系统, 如入侵检测系统

安装

1
2
3
4
5
6
cd ~
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
tar zxf lua-5.3.0.tar.gz
cd lua-5.3.0
make linux test
make install

开始

1
2
3
4
5
➜  ~ lua -i
Lua 5.2.3 Copyright (C) 1994-2013 Lua.org, PUC-Rio
> print("Hello Lua!")
Hello Lua!
>

并没有诸如 exit 的命令退出! 直接 Ctrl + c, 呵。

First Blood Demo !

1
2
3
4
5
➜ touch first-blood.lua
➜ lua echo 'print("hello world lua!")' > first-blood.lua
echo print("hello world lua") > first-blood.lua
➜ lua lua first-blood.lua
hello world lua!

两种注释方式

1
2
3
4
5
-- single line commentary for lua
--[[
print('multiple')
print('commentary')
]]--

八种数据类型

  • nil
  • boolean
  • number, 双精度类型浮点实数
  • string
  • userdata, 表示任意存储在变量中的 C 数据结构
  • function, 由C 或者 Lua 写的函数
  • thread, 表示执行的独立线路, 用于执行协同程序
  • table, Lua 中的表(table), 其实是个关联数组(associative arrays), 数组的索引可以是数字或者字符串。使用{}来构造创建。

基本

  • 数字, 字母 和 下划线 构成合法变量, 区分大小写。
  • 默认变量都是全局的, 使用 local 显示声明局部变量。使用前无需声明,默认值是 nil, 删除一个变量直接将该变量值致 nil 即可。
  • 字符串连接使用 .. 。
  • # 计算字符串长度。
  • 索引从 1 开始!
  • table 长度不固定, 添加新数据时长度自动增长。未初始化值为 nil。
  • 线程 VS 协程: 线程可以同时运行多个,协程任意时刻只能运行一个,并且出于运行状态的协程只有被挂起(suspend)时才会暂停。
  • table 的索引可以使用[i]或者 . 操作, 如: table1[“fix”], table.fix。
  • ^ 和 .. 是右连接, 其他运算符是左连。

循环控制

  • for 循环
  • while
  • repeat … until
  • break, 跳出当前循环语句, 并执行脚本紧接着的语句。

函数

  • Lua 函数可以 return 多个结果值。
  • Lua 函数可以在参数列表中使用 … 作为可变参数。
  • 函数可以作为参数传递给函数, 有点像 Lisp 里面的。

运算

  • 加减乘除求余之外, 特殊的运算符号 ^ 乘幂;
  • 关系运算符号中 ~= 表示不等于;
  • 逻辑运算符号三板斧: and, or , not;
  • .. 号连接, # 一元运算符, 返回字符串或表的长度(pirnt(#’abc’))。
  • 运算符优先级排行榜:

    1
    2
    3
    4
    5
    6
    7
    8
    ^
    not - (unary)
    * /
    + -
    ..
    < > <= >= ~= ==
    and
    or

参考来源

  • Lua官网
  • Lua 基本入门网上教程
  • github 源码
  • Lua wiki tools

update ubuntu16.04 to ubuntu18.04

Posted on 2018-04-24
1
2
3
4
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install update-manager-core
sudo do-release-upgrade -d --devel-release

Golang way

Posted on 2018-03-01

Go 入门

一直听说 Go 是天生支持并发编程的, 于是磨刀霍霍向牛羊, 入坑。

开始

特点

  • Go 语言可以进行隐式定义, 但是不存在隐式类型转换。
  • 所有的内存在 Go 中都经过初始化的。
  • 变量的命名使用陀峰法,首个单词小写,每个新单词首字母大写。如果需要全局变量能够被外包所使用, 则首字母也需要大写。

基本类型和运算符

  • 两个类型相同的值可以使用 == 或者 != 来比较。不同类型的值不可以比较。
  • Go 支持 整形和浮点型数字, 并且原生支持复数, 其中位的运算采用补码。int 是最快的类型, 尽量使用 float64。
    • 号和指针名称间留有一个空格,以防止被误认为是乘法表达式。 用在一个指针前面时,将得到这个指针指向地址所存储的值;这就是反引用(间接引用)操作符, 也可以称为指针转移。指针的高级应用是可以传递一个变量的应用(如函数的参数), 如此不会传递变量的拷贝。注意: 在 Go 中不允许像 C 中的 pointer++ 的指针算法。
  • 特殊的流程控制, select 结构用于 channel 的选择。可省掉判断条件里面的小括号。必要时使用小括号提高优先级。 switch 可以接受的 case 判断可以是统一类型的任何类型的值或者表达式。而 for 可以在循环体内同时使用多个计数器。

精华的 goroutine 和 channel

goroutine 是 Go 程序并发的执行体, channel 是它们之间的连接, 是可以让一个 goroutine 发送特征值到另一个 goroutine 的通信机制.没一个 channel 是一个具体类型的导管,叫做通道的元素类型.channel 的创建使用 make. channel 有两个操作, send, receive 统称通信.使用上古神奇的符号 <-.close(ch) 关闭 channel, make()可以创建两种通道, 带正数的第二个参数的是缓冲通道,其他的是非缓冲通道.

参考来源

  • Go之路
  • Go官网

过去的 2017

Posted on 2018-01-14

2017年小结

之前元旦前的一天本来想做个小结的,后来因为工作变动,加上适应新的环境,就拖了一阵.

Read more »

备忘录模式

Posted on 2017-12-01

0x00 备忘录模式

定义

Without violating encapsulation, capture and externalize an object’s internal state so that the object can be restored to this state later.(在不破坏封装性的前提下,捕获一个对象的内部状态,并在这个对象外保存该状态.之后可将该对象恢复到之前保存的状态.)

Read more »
1234…6

Gitvim

55 posts
18 tags
RSS
© 2019 Gitvim