树莓派3b安装archLinux

万事怕折腾^^

用noobs安装默认系统,桌面是开箱即用了,但是问题来了:

  1. 没有二进制软件源,官方推荐的那几个都没有充足和比较新的,在x86上有的很多没有;
  2. 初代的时候,SD卡只有4G没所谓,现在的TF卡都16G起,空间太浪费了;
  3. noobs默认配置没有多分区,即便手工配置,也不是很方便。

这时我们的老朋友archLinux浮出了水面,什么,gentoo?nonono,这个派的小cpu要编译到啥时候去。arch兄是出了名的软件丰富,在arm领域就更出名了,ArchLinuxArm,简称alarm。我是很奇怪PI没有选择和archLinux合作,而是在debian基础上开发了raspbian,而且,曾经推荐的alarm镜像,竟然删除了,现在只有手工安装这一条路了。

起初我尝试了直接在raspbian下直接重新分区,弄了一下halt掉了,算球。现在不像读书的时候,随手一抓就是Linux主机,只好抓起了vitualbox,下载这个arch迷你镜像,或者gentoo的迷你镜像应该是也可以,分配尽可能多的内存(1G以上最好1.5G,反正临时用一下),不分配硬盘,直接从iso启动,在启动界面,选择安装i686或x64都行,然后直接退出安装,回到控制台。我从笔记本自带的读卡器没有办法读取,有一个杂牌的USB读卡器倒是好使,插上去识别为sda。

在控制台下安装过程参看官方文档,或者中文文档。可以多分几个区,bsdtar用tar替代应该也没问题。搞完直接插回到RPI3上,就可以有显示器启动了。没有网线的,执行wifi-menu,选择wifi,输入密码,这时会自动在/etc/netctl/下生成配置档,类似于wlan0-myhome。然后,参看这篇文章,让wifi自动连接。其实就是执行:

# 
# 需要su后执行,这时候系统里没有sudo
# 默认用户密码是alarm:alarm,root:root
systemctl enable [email protected]
# 也可能没有wpa_actiond这个包,会无法启动wifi
pacman -S  wpa_actiond

不改成和wifi档名称一致,照抄就行。重启后,忽略dmesg一点错误,拔掉所有外设可以用了。

# 都需要在su后执行
# 编辑mirrorlist
nano /etc/pacman.d/mirrorlist

# 下面这行添加到上面文件的最顶端
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxarm/$arch/$repo

# 添加后执行
pacman -Syy

# 也可以整个更新一下(要慎重)
pacman -Syu

花了几分钟安装桌面系统,然后就放弃了,难怪PI Foundation也放弃了。

这时,整个开源世界打开了,x86的荣光再现。如果要搞python:

#
# 安装python和notebook

pacman -S python
pacman -S jupyter
pacman -S jupyter-notebook

包的依赖处理的不错,版本都是各自最新的release版本,在raspbian中要落后两三个版本,在anaconda-arm里要落后的更多。不是说多么赶潮流,而是要实现和x86的版本基本一致,避免特性的不兼容。如果不是对外做服务器或者做高清播放机,树莓派上archLinux真是比较好的选择。

好吧,主要是,又可以折腾了。

如果要设置中文

#
# 设置时区
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

nano /etc/locale.gen
# 保留 zh_CN.UTF-8 UTF-8

# 生成中文locale文件
locale-gen

nano /etc/locale.conf
# 不要有空格 
# LANG=zh_CN.UTF-8

# 重启后就是中文了,现在的中文完善的不要不要的
export
# 查看LANG是否为zh_CN.UTF-8

(这里的ArchLinux并不支持64位arm8特性,PI官方没有支持,再说1G内存玩啥子64位哦~)

树莓派3b和noobs2.0

前几天心血来潮,添置了一个树莓派3b的玩具,今天到货,很快就用了起来。简单记在下面:

  1. noobs2.0现在支持wifi,也就是说可以用noobs lite在wifi下来执行网络安装;
  2. 即便支持wifi,在国内速度几乎为零,最后还是用了完整版的noobs2.0来安装;
  3. 默认的debian jessie系统,自带了realvnc server,也就是说,用免费的realvnc viewer就可以连接,不必像老的文档一样去安装其他的vnc server,此外,其他的vnc viewer不支持realvnc的认证方式;设置成启动到桌面(需要登录),并在设置里打开vnc,就会自动加载了。
  4. 中文只要在桌面环境里设置成zh中文,就很好的支持了,不需要其他设定;输入法我没有试。
  5. 修改debian源为国内镜像后,速度很快,但我看包的机制和很多年前没有什么改变,upgrade难保不出问题,大多数情况是没必要的,要慎重。
  6. 3b的性能远远超过初代,又有了官方外壳,可以随身携带,非常好。

(3)的配置档  sudo nano /boot/config.txt   无头的配置参考文档

hdmi_force_hotplug=1
hdmi_ignore_edid=0xa5000080 	 
hdmi_group=2
hdmi_mode=16

(5)的配置档 sudo nano /etc/apt/sources.list  参考文档

deb http://mirrors.aliyun.com/raspbian/raspbian/ jessie main contrib non-free rpi
deb-src http://mirrors.aliyun.com/raspbian/raspbian/ jessie main contrib non-free rpi

 

你的城就是你的国

大部分人的命运是跟着大势走的,大势就是国家/种族的红利。

比如一个人出生在欧美的小镇,不需要多大努力,读一个好大学,住一个大house,都是很容易的事情。这是因为这个国家的祖先,不论是什么办法,崛起了,要么有自然资源,要么有高科技,要么会做包包手表,出口这些高附加值产品,进口大部分低廉生活用品。由于民主制度和宗教精神,这些红利虽然大部分归高端人士所有,但是仍然溢出给全国的国民享用。小国富裕起来很快,而人口大国要富裕,人类历史上少见,因为少数精英创造的巨大价值要能让所有人享用,还有富余,是非常难的,从这个角度看,美国和日本的强大,到了可怕的程度。

如果出生在极穷国,战乱国,不论多大努力,大概率也就是维持温饱。很多人幻想穿越回古代,其实去这些国家体验一下就知道了,在那个没有西方文明和科技武装的时代,死掉是很容易的,人是没有尊严和天赋权利的。

我们的祖国,现在是不穷也不富,至少没有实现全国性的红利溢出。出生在中国的小镇,用麦子的话说,你奋斗了十年,才拿到了和一线城市的小孩一起喝咖啡的机会。在一线城市,红利的溢出是满满的,这是这么多人要去,房价一直涨的根本原因。

哪里有红利溢出?国家大剧院在北京,你看个芭蕾舞只要坐几站地铁,那些小镇永远只能在电视上看看。那些基础建设,特殊政策,其实都是集全国之力而建,但并没有红利溢出给全国人民享用。在房价奔十几万而去的这一代人起,小镇奋斗到北京的可能性基本上中断了,北京/上海,注定要成为土豪的圣地,而有无数廉价的怀揣梦想的高质量劳动力蜂拥而去,出卖着肉体和灵魂。

再去痛恨那些二十年来不断唱空一线城市房价的专家,已经没有意义。在二线三线城市,能够占据一席之地,是比较现实的,省会,怎么说也是一个省的红利集中地。更没有必要对祖国评头论足,一个城市的社保账户和红利溢出,经营的好不好,是很重要的,有些城市连养老金都发不出来,有些城市甚至钱多到要补贴消费,至于国家账户,和我们没有直接关系,也无力抗拒。

你的城市就是你的国,能早些明白这个道理就好了。

盛赞QQ浏览器9

浏览器只有三个要求:

  1. 不容易崩溃;
  2. 扩展方便;
  3. 书签可以同步。

至于速度快不快,其实都差不多。一直在用chrome,后来由于翻墙事宜,搞的实在难受,下载扩展啦,书签同步啦,总是出问题,升级到win10后,chrome总是内存不足;遂将主力浏览器换成了firefox,这家伙偶尔会卡死,但是书签同步没问题,即便是美国服务器。有说是由于flash导致的,可我的firefox根本没有开启flash,在访问csdn的文章有时就卡的死死的。

翻墙也是翻腻了,如果总出差,会发现祖国各地的GFW是不一样的……你在A省好用的法子,到了B省就要另辟蹊径,然后有一天,你花钱买的各种梯子欠费了,卖梯子的网站被墙了……俺只是要同步书签和偶尔使用扩展而已。不理解为何google拒绝服务在中国大陆的用户,讲真,像firefox那样本地化一些,弄几台服务器放在电信机房就可以了,有多难,搞一下会死吗?

此时发现了QQ浏览器9,这货真是神奇:

  1. chrome内核,兼容chrome扩展,自带商店,无需翻墙;
  2. 书签可以同步到腾讯服务器上;
  3. 全平台支持,手机,ipad,书签都可以共享;
  4. 双核,兼容部分只支持IE的网站。

关于第1点,起初以为是把一部分扩展弄过来了,然后才发现,这尼玛是整个商店,很多非热门的扩展也可以搜索到,整个的……别管鹅厂是怎么实现的,道德不道德,老纸已经泪流满面。当然,缺点也有,比如糟糕的书签管理器,书签同步不是显式的。

Anyway,这货能用,是目前最佳选择,真不知道是该感谢鹅厂还是感谢墙。

python在import时做了什么

最近几天有一些工作上的资料统计,需要用到python的一个包,而这个包的logger,是作为全局变量写死的,不能传入参数,也无法在类定义里重载。修改这个包的源代码不是一个好方案,琢磨来琢磨去,总算琢磨明白了,只要在import之后,直接module.xyz.log = my_own_log就可以了。

在琢磨的过程中弄明白了,python的import,原来是这样干的!

################################
################################

A,import module.xyz:

1)查看sys.modules是否有module:
       如果有,什么也不做

       如果没有,看看pyc缓存里有没有:

           如果有,而且代码文件没变,就从pyc缓存里读取
           如果没有,运行module的代码文件,可以是module.py,
               也可以是__init__.py(所谓的package),然后运行xyz的代码,
               生成所有对象的名称和内存引用的dict表,装入sys.modules,同时,
               写入了一份缓存.pyc文件。

2)将module和module.xyz写入本地空间,用dir()可以查看;

B,from module.xyz import abc 时,则运行1),没有2),而仅仅把abc装入本地空间。

C,from module.xyz import * 时,则运行1),没有2),把所有对象装入本地空间。

在ABC三种情况下,都运行了1),并不想我之前想的C是最浪费资源的。

所谓的本地空间,每个module都有一个__dict__,保存了所有的对象。dir方法,其实就是__dict__.keys()。locals()或者globals()方法,都是在做类似的工作。python就用最基础的dict和list,解决了看似很复杂的战斗。

import就是只运行一次代码并写入sys.modules以及酌情写入本地空间。只有importlib.reload方法会重新读取代码文件覆盖载入module,否则无论怎么重复import,都不会发生任何事情,但是,这所有的东东,都可以手工读写。

如果有一个包不支持外部配置文件,你在用的时候要覆盖内部配置文件怎么办?

# ############################
# ############################

import nicepackage.org_config
import my_config

for i in dir(my_config):
    if i[0] in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
        nicepackage.org_config.__dict__[i] = my_config.__dict__[i]

import nicepackage.nicemodule

随着__init__.py文件的不同,上述代码可能需要修改。这里配置文件内的对象名一律是大写的。

如此简单的注入,但如果不深入的琢磨加上机缘巧合,可能再过若干年都无法想到。

python充满了魔法和陷阱,很多高手写的教程里都没有讲魔法,可能是怕这些魔法对新手而言是陷阱吧。在大型的正规的软件工程里,类似于本文的土办法应该是根本不会出现的。

在写上述内容的时候觉得对于python豁然开朗了。作为跟谭浩强同志学过C语言的业余菜鸟,十多年来写代码都是方法加变量,几千行也是这样,也解开了很久以来对OO的困惑:

从前有一个骑士和一只怪兽相依为命,作战谋生,有一天捡到了一本魔法书,书里有各种神龙/怪兽,还有各种技能/作战/组队方法,附录里有个字典索引,有这些怪兽的召唤语,技能的咒语,可以召唤他们战斗,还能让他们杂交,学新技能,后来,这个骑士成了王——这就是OO programming。

滚动至顶部