笔记本内存条闲置

今天把之前2根8G的金士顿骇客神条8G DDR4在咸鱼上卖掉了,定价1根150,2根249,原意是买给需要的人的,不清楚价格区间,怕没人买,就定得比较低。

但是我已经换了16G的,闲置的东西最贵,这2根内存条我已经用了3年了,虽说内存条没什么磨损。

但是一发布,立即就被贩子拍卖了(后来才知道,贩子卖了一千多件东西),不得不说贩子简直一直在线,真是不舒服,原来咸鱼的价格是可以改价的,买家不满意可以讨价。

下次,闲置的物品:

  • 先调研,将价格定在区间上游
  • 不想卖给贩子,卖给真正需要的人

这也说明了,在理想主义的机制下,总有依赖机制盈利的投机者,他们对机制、渠道、市场十分熟悉。也早已将最初的利他的意向,转变为纯粹的利己行为。

Exception和Error 超形象!

假如你开车上山,车坏了,你拿出工具箱修一修,修好继续上路(Exception被捕获,从异常中恢复,继续程序的运行),车坏了,你不知道怎么修,打电话告诉修车行,告诉你是什么问题,要车行过来修。(在当前的逻辑背景下,你不知道是怎么样的处理逻辑,把异常抛出去到更高的业务层来处理)。
你打电话的时候,要尽量具体,不能只说我车动不了了。那修车行很难定位你的问题。(要捕获特定的异常,不能捕获类似Exception的通用异常)。
还有一种情况是,你开车上山,山塌了,这你还能修吗?(Error:导致你的运行环境进入不正常的状态,很难恢复)

摘自极客时间评论

工程职业伦理作业

案例为个人作业内容,firesheep案例 (内容见图片)
思考题:用多种伦理方法给出判断。你认为哪一种或几种伦理学方法更适合当前的中国国情,为什么?

答:
西季威克认为,伦理学是关于“应当”的研究,因而首先必须研究人们据以推断他们应当做什么的合理程序。这些合理程序即“伦理学方法”。
(1) 伦理学方法有功利主义、义务论、契约论、美德伦理、实用主义、伦理利己主义。
(2) 不同的伦理学方法会有不同的判断:
① 功利主义伦理 从一个严格不偏不倚的观点来促进整个世界中的善,并寻求实现最大化利益和效用的行为,该伦理学方法会认为埃里克·巴特勒的做法有得有失。“得”在于吸引了大量媒体和普罗大众的关注,倒逼玩忽职守的网站站点主动做出改变,采用安全的HTTPS协议传输,保障大众的网络安全,从长远看减少网络劫持的发生。“失”在于他为心怀不轨的人提供了便利的工具,甚至在短期内让网络劫持事件频繁发生,对社会公众造成较大损失。但这些情况,会在各网站站点普遍采用HTTPS安全协议后会得到缓解和根治。所以,功利主义的伦理学方法论会赞同埃里克·巴特勒的观点。
② 义务论 以遵循“最高道德原则”的方式确立人的责任和义务,强调正确的行为就是要严格遵守和履行我们所具有的义务,该伦理学方法会认为埃里克·巴特勒的做法是不符合规范、不正当的,义务论认为一个选择或行动是否正确取决于它是否符合某个指定的规范,正当优先于善。工程师的首要责任原则带有了绝对命令的性质,埃里克·巴特勒为网络劫持的传播提供了开源软件工具,这是在助纣为虐,一个履行法定义务的公民、遵守职业伦理章程的工程师所不应该做的。
③ 契约论 通过一个规则性的框架体系,把个人行为的动机伦理地看作是一种社会协议。该伦理学方法会认为埃里克·巴特勒的做法是可取的。契约论寻求自利与利他统一的途径,注重客观社会伦理、组织伦理关系以及工程职业实践、社会交往过程中的客观制度性建设。埃里克·巴特勒有自由制作软件并向大众推广的利己的权利,同时他作为信息科技工程师组织的一员,也深知网络安全组织控诉网络劫持隐患多年,但电子商务网站仍然不予理睬的现状,我不入地狱谁入地狱,用曝光下的潜在风险唤醒媒体和大众,逼迫网站站点做出改变。
④ 美德伦理 认为工程的内在善,必须关注公众的利益,工程的个人善必须关涉工程师在工作中的意义,它与创造有用的安全的公基产品和服务的个人承诺相联系。该伦理学方法会认为埃里克·巴特勒的做法是可取的。埃里克·巴特勒制作网络劫持软件并开源,是出于改变现状的内在善的推动,并未受到知名度、威望等行为可能带来的外在善,干扰他们的公共义务。
⑤ 实用主义 会认为埃里克·巴特勒的做法是可取的。由于对道德复杂性合理的妥协和各式各样的两难困境的敏感性有着最好的理解,坚持在原则的应用方面更加灵活和宽容。埃里克·巴特勒的做法会影响社会犯罪率上升、大众对他褒贬不一的评价等困境,但这种方法后来也被Facebook等公司的行为验证了是有用的!比起网络安全组织长达多年的控诉实用多了。
⑥ 伦理利己主义 试图将道德价值降低为利己的观点被称为伦理利己主义。该伦理学方法会认为埃里克·巴特勒的做法是不可取的。巴特勒做劫持工具软件,受到舆论的关注和他人的抨击,不仅没有把自身的利益最大化最为第一目标,还使自己陷入困境。
(3)我认为,实用主义和契约论更适合当前的中国国情。实用主义“黑猫白猫,抓到老鼠就是好猫”;同时,工程师在自利性的基础上要利他,要注重客观社会伦理、组织伦理关系以及工程职业实践社会交往过程中的客观制度性建设,善恶并非非此即彼,契约论表达了对职业活动中道德选择的现实多样性的认识与尊重。
功利主义、义务论、美德伦理 既对现代工程活动复杂性下的伦理困境力不从心,又常常忽视工程活动中和谐共生的伦理期望。表现在:
i) 功利主义和义务论都相信存在着某些普遍的规则它们为行动的道德正确性提供了标准,行为是立足于普遍的考虑,道德就是建立在普遍的和不偏不倚的合理性的法则之中,所以规范的有效性完全不依赖于工程师偶然具有的欲望和倾向,这太过于理想化,没有很好的实践指导价值。
ii) 道德并不只是用来界定人际生活得以可的最小条件,更重要的是道德也是人性自我完善的一种最重要的方式,而人性的完善是相互促进的。
伦理利己主义 中自我的利益是有争议的,远比利己主义所暗示的要复杂的多。
但是我们也要意识到实用主义、契约论也存在着自身的局限,仍然需要根据国情,具体问题具体分析。

libvirt-go 探索(入门)

基于https://github.com/libvirt/libvirt-go README

确保已安装libvirt-dev版本支持1.2.0版本之后的libvirt默认情况下,绑定将支持libvirt.so,libvirt-qemu.so和libvirt-lxc.so中的API。可以使用构建标记'without_qemu'或'without_lxc'分别从构建中删除后两个库。Go API被认为是生产就绪的,旨在保持未来版本的稳定性。

libvirt项目旨在将libvirt-go添加到主libvirt C库后立即添加对新API的支持。如果要提交对libvirt C库API的更改,请同时提交libvirt-go更改。

测试核心API单元测试都是使用内置的测试驱动程序(test:///default)编写的,因此它们与主机OS环境没有交互。

使用自动化测试验证libvirt C库API /常量的覆盖范围。这些可以通过传递'api'构建标记来运行。例如,go test -tags api

对于测试驱动程序缺乏功能的区域,可以使用QEMU或LXC驱动程序来执行代码。这些测试必须是'integration_test.go'文件的一部分,但只有在传递'integration'构建标记时才会运行。例如,go test -tags integration

为了运行单元测试,应将libvirtd配置为允许您的用户帐户以无密码进行读写访问。这可以使用polkit配置文件轻松完成

# cat > /etc/polkit-1/localauthority/50-local.d/50-libvirt.pkla  <<EOF
[Passwordless libvirt access]
Identity=unix-group:jahentao
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes
EOF

将'jahentao'替换为您的UNIX用户名。

Polkit是用于实现权限管理的, 通过给非特权进程授权,允许具有特权的进程(或者库文件lib)> 给非特权进程提供服务。

其中一个集成测试还要求libvirtd正在侦听localhost上的TCP连接,使用sasl auth。

这可以通过编辑/etc/libvirt/libvirtd.conf进行设置来设置

  listen_tls=0
  listen_tcp=1
  auth_tcp=“sasl” # 注意加 “”双引号,在 virsh --connect qemu:///system 测试
  listen_addr="127.0.0.1" # 写0.0.0.0也没事

然后修改 vim /etc/default/libvirtd(在vagrant虚拟机中是 /etc/sysconfig/libvirtd) 添加--listen标志

start_libvirtd="yes"
libvirtd_opts=" --listen"

PS:修改密码机制和存储位置/etc/sasl2/libvirt.conf

vim /etc/sasl2/libvirt.conf
// 内容
sasldb_path: /etc/libvirt/passwd.db

其实 sasldb_path 不改也行,默认在 /etc/sasldb2

重启libvirtd服务

service libvirtd restart

然后创建一个sasl用户

# saslpasswd2 -a libvirt user 

并输入"pass"作为密码

查看用户名(注意前面是否修改密码存储路径)

# sudo sasldblistusers2 -f /etc/libvirt/passwd.db 

PS:修改Vagrant的boxes存储位置

Vagrant的boxes默认是放在~/.vagrant.d/boxes下面的

修改box存放路径:
1. copy ~/.vagrant.d/下面的目录到新目录

cp ~/.vagrant.d/   /path/to/vagrant_home/ 

2. 设置环境变量

vim ~/.bashrc
// 加上如下
export VAGRANT_HOME='/path/to/vagrant_home'

就这样,重新登录shell后,boxes的存放目录就在 /path/to/vagrant_home/boxes 下面了

PS:vagrant使用代理

For Mac/Linux (in Bash)

export http_proxy="http://user:password@host:port"
export https_proxy="http://user:password@host:port"
vagrant plugin install vagrant-proxyconf

then

export VAGRANT_HTTP_PROXY=${http_proxy}
export VAGRANT_NO_PROXY="127.0.0.1"
vagrant up

For Windows use set instead of export.

set http_proxy=http://user:password@host:port
set https_proxy=%http_proxy%
vagrant plugin install vagrant-proxyconf

then

set VAGRANT_HTTP_PROXY="%http_proxy%"
set VAGRANT_NO_PROXY="127.0.0.1"
vagrant up

PS:安装插件可能遇到问题,可能需要临时禁用Ipv6
https://github.com/hashicorp/vagrant/issues/8893
或者是代理配置的问题比如socks5协议

运行集成测试需要Vagrantfile,需要使用virtualbox。

cd ./vagrant
vagrant up #配置虚拟机
vagrant ssh #登录虚拟机

在里面,做上面集成测试需要的修改。

其中一个集成测试还要求libvirtd正在侦听localhost上的TCP连接,使用sasl auth,这可以通过编辑/etc/libvirt/libvirtd.conf进行设置来设置

listen_tls=0
listen_tcp=1
auth_tcp=“sasl” # 注意加 “”双引号,在 virsh --connect qemu:///system 测试
listen_addr="127.0.0.1"

然后修改 ,在vagrant虚拟机中是 /etc/sysconfig/libvirtd 添加--listen标志

LIBVIRTD_ARGS="--listen" 

然后

sudo su -
go test -tags integration libvirt

在vagrant box中可能遇到问题,就是没有就行上述集成测试的修改。

Connection refused

何时写博客

写博客的时候,是我觉得掌握自己人生的时候。一点一点缕清楚,独立思考,遵循自己的节奏,向前向上的时候。

懒惰的时候,我会忘记写博客;学无所成,思考没有通透,没有新创意,即使复制粘贴来有用的东西,我最多只会存为草稿,待下次梳理,懒于排版;被工作压迫,喘不过气,没有时间,没有自己思考世界的角度,我也不会写博客。

博客首先来自表现欲,来自记录,来自即使谈不上通透,但自成闭环的思考,来自创意,来自感悟,来自生活,来自追求 ,来自独立个性的自我 。

编译器->框架->架构关系的一点思考

  • 机器码为了运行,编译器提供语法,语法是表达语意的元素。语言的表达变化,一本工具书一本字典可以穷尽吧。
  • 框架是在编译器层面上的又一层封装,虽然它提供的不是语法,但它提供的是比语法高一层的组织,框架组织的目的是为了简化开发、封装变化,顺带解决某点或几点非功能性需求。如果你被框架吸引,那你也应该去编译器看看。 框架就像小说故事的套路,自古深情留不住,总是套路得人心。
  • 在框架之上的高一层的组织是架构,架构的层面是业务,也是团队协作。业务虽变化多端,但也自成规律。
  • 架构之上,为智能。知识表达穷极变化。一些知识形式也许只能被计算机所理解。
  • 智能之上,为芸芸众生。

移动平台为什么不支持Flash?

  1. 内置Flash支持意味着有可能引入相关的安全漏洞,而Flash实现由Adobe掌控,一旦出现问题,难以直接把握。
  2. 基于Flash平台的应用非常丰富,很有可能分流移动平台的应用商店。
  3. Flash播放器过于耗电,缩短电池寿命。移动时代需要低功耗的设备,触摸界面和开放网络标准,而这些方面都是Flash的短板。
  4. 曾经的矢量模式使得文件体积极小,在网络带宽稀缺的时代,才成就了Flash的霸主地位。由于HTML5发展迅速,得到了各大浏览器厂商的支持,Adobe后来也放弃Flash了。