懒惰是人类进步的源动力

  • Windows 10 HpyerV OpenWRT 软路由安装 + OpenClash 安装 全教程

    本教程详细说明如何在Windows10下经由Hyper-V技术安装OpenWRT软路由。物理机器配置如下:

    • Intel Celeron J1900
    • 4GB DDR3
    • 4口千兆网卡
      淘宝上这种配置的机器遍地都是,J1900对付软路由绰绰有余了,其实跑Win10浏览网页也不在话下~ 施工结果如下图:

    Win10_OpenWRT.JPG

    I. Hyper-V虚拟交换机配置

    安装前请确保你的 CPU 支持硬件虚拟化(Hyper-V)技术并且已通过BIOS启用

    启用Windows的Hyper-V功能

    1. 进入“控制面板”,然后依次点击 程序 – 程序和功能
    2. 点击「启用或关闭 Windows 功能」,打开 Windows 功能管理窗口,并勾选「Hyper-V」,点击“确定”
      win10_enable_hyperv.JPG

    配置虚拟交换机

    打开开始菜单,搜索或找到“Hyper-V管理器”,点击右侧栏里的“虚拟交换机管理器”链接。本人的物理机器有4个网口,配置的目标是网口1连入互联网,网口2网口3网口4连入下属设备。
    我们首先创建用于外部网络的虚拟交换机,这个交换机相当于你路由器的 WAN 接口,用于将路由器连接到外部网络:
    win10_hyperv_virtual_switch.JPG

    1. 点击“新建虚拟网络交换机”;
    2. 右侧给他起个名字,我是叫它ToExternal,或者随便叫什么“外部网络”也都行;
    3. 下面的“连接类型”选中“外部网络”,然后选择你的物理网口1对应的设备名称。注意这里需要勾选“允许管理操作系统共享此网络适配器”
    4. 点击“应用”
      而后需要增加一个内部网络适配器,是用于给虚拟化宿主机提供来自软路由的网络的。

    win10_hyperv_vswitch_internal.JPG

    接下来给余下的准备做路由器LAN口的网口2网口3网口4创建虚拟交换机。这边千万注意,选择“外部网络”并选定对应的物理网口后,不要勾选“允许管理操作系统共享此网络适配器”。这些网口,可以命名为LAN1, LAN2, LAN3之类。

    创建OpenWRT虚拟机

    虚拟机配置

    首先需要找一个x86_64的OpenWRT固件,这个网上多半可以搜索到。如果实在有点懒,可以找这里或者这里或者这里。请注意,部分固件是需要转换成Hyper-V能够识别的格式的,自行搜索下载“StarWind V2V Image Converter”这个软件转换成VHDX格式即可。

    下载完成后

    1. 打开 Hyper-V 管理器,点击「新建」-「虚拟机」,将会打开一个新的窗口。虚拟机的名称可以随意设置。
    2. 第二步会让选择虚拟机的代数,如果你下载的是uefi固件(一般名称里有uefi或gpt字样),可以选择第二代;否则谨慎起见选择第一代;
    3. 分配内存,个人分配了512MB固定内存,并开启动态内存允许分配到1GB。一般认为512M差不多了,甚至有说256都行了;
    4. 为虚拟机分配第一个网络适配器,选择之前创建的「内部网络」;这一步其实是向虚拟机增加了第一个网口,openwrt底下它会被默认分配为eth0;
    5. 为虚拟机创建硬盘,需要选择之前下载或者转换好的 OpenWRT 硬盘映像;

    完成初始化后,先不开机,点选右侧栏里的“设置”继续配置这个虚拟机:

    1. 点选“添加硬件”——网络适配器,将之前添加的所有外部网口依次加入,这边规定一下顺序,首先是那个通往外部互联网的网口1对应的,其次是剩下三个打算做LAN口的;注意这边添加网口的顺序影响到OpenWRT里eth的序号,按照这样设计,eth1对应的是我们接入互联网的WAN口,eth2-4对应的是未来的LAN口;
      win10_hyperv_openwrt_new_nic.JPG
    2. 如上图,点击所有添加的网口签名的“+”号——高级功能:勾选“启用MAC地址欺骗”。不开启此功能将导致之后软路由下的设备无法上网
      win0.JPG

    随后扩展硬盘

    1. 点击「IDE 控制器」下的「硬盘驱动器」,找到我们添加的 OpenWRT 虚拟硬盘,然后点击「编辑」;
    2. 在新的窗口中选择「扩展」,然后设置新的硬盘容量,推荐至少1GB
      tempsnip.jpg

    至此OpenWRT的配置基本告一段落,选择右侧栏里的“启动”即可启动虚拟机。启动后点击右侧栏的“连接”按钮可以进入虚拟机的shell,正常情况下进入虚拟机按下回车按钮,应该有OpenWRT图样。
    注意:OpenWRT默认的接入地址为192.168.1.1,如果光猫的路由器也是相同地址的话,会引起一些问题。这两者里有一个要改掉,OpenWRT这边可以通过修改/etc/config/network里lan口的内容实现(图中更改到了192.168.99.1):
    openwrt_change_lan_ip.jpg

    上图修改完之后,使用/etc/init.d/network restart命令可以重启网络服务。

    内部网络配置

    打开网络适配器设置,经由以下两种途径之一:

    • 依次点击 开始菜单 – 设置 – 网络和 Internet – 更改适配器选项;或,
    • 打开「网络和共享中心」,点击「更改适配器设置」

    找到名称为「vEthernet(内部网络)」的网络适配器(这边的“内部网路”是刚才给那个内部网路起的名字,比如我的叫Internal),然后点击「更改此连接的设置」以打开设置页面。
    点选「Internet 协议版本 4(TCP/IPv4)」,然后点击「属性」,然后按照下图配置:
    win10_internal_v_net.JPG

    请注意,这边192.168.X.1, 192.168.X.2X取决于刚才说的OpenWRT的内部IP地址。如果默认是192.168.1.???, 如果像我改过的话那就是192.168.99.???.

    点击「确定」保存所有设置。

    OpenWRT配置

    完成之前的步骤后,打开浏览器,并在地址栏中输入 192.168.1.1 (我是192.168.99.1)以打开 OpenWRT 管理页面. 默认的管理后台密码是:koolshare

    1. 依次点击侧边栏的 网络 – 接口;
    2. 你可以看到一个绿色的网络接口名称为「br-lan」。如果有两个多余的红色 WAN 和 WAN6 接口,请点击「删除」来删除它们;
    3. 修改LAN接口:在绿色的 br-lan 接口上点击「修改」,在新的页面中点击「物理设置」,然后将「接口」部分中选中eth0, eth2, eth3, eth4.如上文所述,这四个分别对应我们的内部网路、网口2,3,4。设置完成后点击下方的「保存并应用」,稍后页面将会自动跳转;
      openwrt-brlan.JPG
    4. 创建WAN接口:返回到接口管理页面后,点击「添加新接口」在新的页面中,为此接口名称设置为 WAN 或者你喜欢的名称,然后根据你的实际情况选择接口协议,如 PPPoE 或 DHCP 客户端。在「包括以下接口」部分勾选 eth1。
      openwrt-wan.JPG

    完成后点击「保存并应用」,进入详细设置。在「基本设置」中配合你的外部网络连接方式,如输入你的 PPPoE 账号等。我这边直接是宽带光猫拨号,所以很简单的用了“DHCP客户端”。然后点击「防火墙设置」,将新的接口防火墙区域设置为 WAN。WAN 区域使用红色作为标志。
    openwrt-wan-firewall.JPG
    全部完成后,点击「保存并应用」,将会返回到概览页面。正常情况下,能够连接互联网了:
    openwrt-interfaces.JPG

    修改后台密码

    维持默认的后台密码比较危险,可以用依次点击 系统 – 管理权,在“主机密码”里更换密码。

    OpenClash安装

    呵呵,其实这里是噱头。真正的安装步骤在https://github.com/vernesong/OpenClash 项目的README已经说的很清楚啦。下载地址在图中的”Release”底下也有。由于本网站的是“对大陆访客友好”的带有ICP备案的页面,所以这边只授人以渔。
    openclash-install.JPG
    下载其实可以直接在OpenWRT的命令行下面用wget命令操作,比如

    wget https://github.com/vernesong/OpenClash/releases/download/v0.37.2-beta/luci-app-openclash_0.37.2-beta_all.ipk

    随后使用opkg install luci-app-openclash_0.37.2-beta_all.ipk安装。如果有不懂的话,下面参考链接5里也有介绍。

    参考

    1. 如何通过 Hyper-V 部署 OpenWRT 软路由
    2. openwrt下如何修改默认ip地址
    3. Hyper-V 部署LEDE X64固件全教程
    4. 利用win10自带虚拟机hyper-v搭建软路由教程
    5. 合理的家庭网关方案 OpenClash, 并使用 SmartDNS 加速
  • 瘦死的骆驼比马大——Kindle Voyage 与 Kindle Paperwhite 4

    由于手上的Voyage电池不给力,遂买了一台Paperwhite4准备替用。以下是简单对比

    响应速度

    KPW4的响应速度比Voyage快,但搜索了一下发现这两个型号的CPU应该是一样的,都是Freescale i.MX 6SoloLite Cortex-A9。这或许和屏幕响应速度有关,他俩的系统版本页都是5.12.4,RAM也同样是512MB。

    屏幕

    屏幕是我想重点说的,Voyage的屏幕素质明显好于KPW4. 首先体现在对比度上,Voyage的黑色显示的更浓厚一些,而KPW4偏灰。其次是底色,KPW4的屏幕白底略偏黄一点。从阅读背光灯来说,Voyage比KPW4略亮——前者比后者多了一个阅读背景灯。
    以下是几张对照图
    kindle_voyage_vs_paperwhite_4.jpg
    kindle_voyage_vs_paperwhite_4-2.jpg
    kindle_voyage_vs_paperwhite_4-3.jpg

    续航

    电池容量看,Kindle Voyage:1320mAh;Kindle Paperwhite 4:1500mAh。使用中能略微感觉到KPW4续航比较持久,另外KPW4如果长久不用,系统似乎会进入深度睡眠,开启后提示等待几秒后才会进入主界面。这个和延长的续航或许也是分不开的。但是作为电子书来说,这两种型号的续航其实都挺够用的了。

    后记

    后来我才发现淘宝上有卖Voyage的替换电池,只需少许步骤就能把机子开瓢然后换掉电池,费用只要几十块钱。我越加后悔买KPW了。

  • 【5G已凉】 中国联通香港 Cuniq HK ONE 大灣區 大湾区 共享計劃 漫游评测

    ❌2021/05更新:由于官方已经推出5G合约计划,鄙人目前合约期内的现有套餐已经在5月初被取消5G权限,不论Android还是iOS都只能连上4G网络(尽管QCI还是挺高的,信号好的地方约140Mbps).经验教训就是,对方找你续约的给优惠的时候,务必三思🤡

    ⚠iPhone12用户提醒:截至20201117,由于联通香港并未提供IPCC文件更新,iPhone12系列亲测没有5G数据选项,无法在大陆地区连入5G网络。

    近日寻得正规渠道购入正规大湾区月费计划卡一张.
    GreatBayArea_Cuniq_Plan.JPG

    首先是选择的套餐,这次选择的是图片中间的5GB+6GB流量套餐,超过流量后仍有限速128kbps(非漫游为384kbps)的续命流量以至于不会完全断网。至于通话什么的本人是完全不在乎,目前是纯粹用来上网的。个人觉得相比Google Fi,他的优势有:

    • 资费便宜。与之对比的Fi 是$20 /mo + $10/GB for data,或者$70 /mo无限流量;
    • 接入归属地。由于是归属地接入的政策,所以Fi接入的IP地址是美国,而此卡接入是HK。遥远的地方自然附带延迟了;
    • 稳定性。由于是需要上台签合约的,所以个人觉得稳定性靠谱。Fi最近偶尔在群里有听到翻车的;

    开通激活体验

    此卡需要实名制并且签立合约,合约期为24个月。如果介意合约或是实名制的话,有一种稍贵的“月神卡”可以备选,不过性价比就稍差一些。即便身处内地,也是有办法完成任务的,无非是一些手续费罢了。鄙人收到卡后,卖方会通过网络发送合约的影印件,然后使用电子签名PDF回传文档。随后会有+852的电话过来再次核实个人资料,然后没多久就开卡了。激活并不需要到香港旅游一圈,体验很好。

    网速

    大陆漫游的是中国联通的网络。一般而言绝大多数网站是会有全球CDN的,与本地卡的网络延迟差别体验不大到。延迟最严重的是京东金融app,网页要几秒钟才能加载开。像是支付宝、微信之类的全然无问题。中国联通对于这类漫游卡的限速策略似乎很宽松,能够体验到与本地卡一样的网速(未经数据核实)。
    Cuniq_mainland_roaming_speedtest.jpg

    关于5G

    国内一般的4G套餐是能够使用5G网络的,默认限速300Mbps。但是很遗憾的是,至少今时(2020.4),这张Cuniq HK的卡是无法注册5G网络的,尚不知道未来会变成如何。

    2020.5: 香港联通目前准备开5G套餐了,作为试运行阶段,现有的4G套餐(大湾区之类)在内地部分地区(北京,广东)已有报告可以使用5G网络。题主目前还没试过,待更新测速结果~

    2020.6:杭州测试已经能连上5G网络,网速测试结果还是可以的

    cuniq_hk_5G.jpg

  • Python multiprocessing 并行化原则

    处理multiprocessing解决棘手的并行问题时,遵循以下策略:

    • 把工作拆分成独立单元;
    • 如果每项工作所花的时间是可变的,那就考虑随机化工作的序列;
    • 对工作队列进行排序,首先处理最慢的任务可能是一个最有用的策略(平均而言);
    • 对于细小琐碎的任务,考虑将他们合并分块(chunk),这样能有效减小fork/join通信开销;
    • 任务数量与物理CPU数量保持一致;

    部分摘自 <High Performance Python> (by Micha Gorelick, Ian Ozsvald)

  • Python Facade模式 门面模式

    门面模式(Facade Design Pattern, 一称外观模式)属于结构型设计模式。结构型设计模式描述如何将对象和类组合成更大的结构。除了门面模式外,还有适配器模式、桥接模式、装饰器模式,他们都属于结构型设计模式。
    W3sDesign_Facade_Design_Pattern_UML.jpg
    这个模式有3个主要部分:

    • 门面(Facade):将一组复杂倒置系统封装起来,从而为外部世界提供一个舒适的外观;
    • 子系统(Subsystem):一些不同的子系统(上图中的Class1, Class2, Class3…),这些子系统让整个系统混杂在一起,难以使用;
    • 客户端(Client):通过门面提供的简单易用的接口,与门面进行交互,而避免接触复杂的各种子系统.

    案例

    假设你要在家中举办一场婚礼,必须预订一家酒店,与餐饮人员交代菜品、与布置人员敲定场地布置细节^%&*……头大的方法是自己安排这一切,或者可以去找一个婚礼管家,让他/她为你安排这一切。

    class EventManager:
      def arrange(self):
        self.hotelier = Hotelier()
        self.hotelier.bookHotel()
    
        self.florist = Florist()
        self.florist.setFlowerRequirements()
    
        self.caterer = Caterer()
        self.caterer.SetCuisine()
    
        self.musician = Musician()
        self.musician.setMusicType()
    

    上述Hotelier(), Florist(), Caterer(), Misicial()就是各种复杂的子系统。然后,对于你自己来说,只要这样就能轻松搞定:

    class You:
      def askEventMeneger(self):
        em = EventManager()
        em.arrange()
    
    you = You()
    you.askEventManager()
    

    最少知识原则

    最少知识原则指导我们减少对象之间的交互,它意味着:

    • 在设计系统时,对于创建的每个对象,都应该考察与之交互的类的数量以及交互的方式;
    • 避免许多紧密耦合的类;
    • 如果对系统中的任何一部分进行修改都可能导致系统其他部分被无意改变,这意味着系统退化,应该坚决避免。

    参考文献

    《Python设计模式(第二版)》by Chetan Giridhar

  • Typecho sitemap 插件 无法跳转sitemap.xml的解决办法

    大概跟很多人一样,我也用了bayunjiang的插件来生成sitemap。但是启用插件后,会发现https://unique-ptr.com/sitemap.xml 会提示404无法跳转。
    查证后发现这个跟伪静态是否开启有关,如果后台没有开启伪静态,那么需要跳转到https://unique-ptr.com/index.php/sitemap.xml 才能访问。最终的解决方案当然是开启伪静态,参考这篇文章,在后台设置一下就可以了。

    typecho_fake_static.png

  • 中国移动 支付宝 移动花卡 取消自动扣款方法

    移动花卡自带12个月协议期。以前能够从“移动花卡”的小程序进入,现在入口非常复杂,目测是故意为之。
    协议期后取消自动扣款的方法如下:

    1. 进入支付宝的“花呗”页面
    2. 点击“我的账单”,然后右上角“更多”,选择“历史账单”
      cmcc-huaka-decommission.jpg
    3. 进入历史账单后,选择已经出账有花卡记录的上个月账单,点进去就能看到“花卡月套餐费”
      cmcc-huaka-decommission2.jpg
    4. 然后在点进去有账单详情,最底下有个“取消自动扣款服务”的按钮,点进去
      cmcc-huaka-decommission3.jpg
    5. 可以看到“移动花卡业务申请”,底下有个“关闭服务”的大按钮,知道怎么做了吧
      cmcc-huaka-decommission4.jpg
  • iPhone XR (XS) power/volume button replacement 电源键、音量键拆解教程

    首先把音量键的铁环往外侧拉,这个结构非常像PC键盘.
    First pull the iron ring of the volume key to the outside, this structure is very similar to a PC keyboard.
    iphone_xr_power_button_tear_down-1024x768.jpg

    随后把金属片右侧往上推出。推出后贴片的位置是斜杠/型的,然后左侧直接拉出即可.
    Then push up the right side of the iron piece. After pushing out, the position of the patch is like a slash “/”, and then you can directly pull it out on the left side.
    iphone_xr_power_button_tear_down_2-1024x768.jpg