Skip to content

2017

ZJU校园网Openwrt路由器设置

Why

学校这边上网每次都要输入账号,有登陆设备数量限制,玉泉这边还要申请静态IP地址,每人只能申请两个,申请下来还需要隔天才能生效……真的是有多不方便就多不方便。不过还好,学校的上网协议是标准的L2TP VPN认证,这几天想着把压箱底的小米路由器mini拿出来试一试看看能不能的openwrt上拨VPN然后分享出来。

刷机

Warning

刷机有变砖的风险,最好先刷入breed 或 uboot做一层保护

今日头条笔试解题报告(10.17)

之前随便投了一下今日头条竟然过了,虽然不是很想去,但是已经给了我笔试邀约好歹也就做一下,锻炼锻炼脑子,说句实话还是挺喜欢头条的题目的,做起来很有以前ACM刷题的感觉,不像其他公司总感觉"工程化"比较多。

推箱子

第一题比较简单,表面上无从下手但是仔细想想应该能想出来的,本质上跟走迷宫问题本质上是一致的,只不过在这题中状态既要保存人的位置也要保存箱子的位置。暴力搜索能够,AC代码:

Hugo使用笔记

Hugo是spf13大神写的一个静态博客生成器,拥有仅次于Hexo的用户量。相比于Hexo,Hugo使用Go编写,生成速度快了很多。除此之外,Hugo的设计更加合理,文档也比较详尽,比较适合我这种喜欢从零开始折腾的技术宅。本博客就是在hugo上搭建的,使用了自己编写的主题: canoe

迁徙博文

因为我以前使用的hexo,已经拥有相当一部分博文了,所以我需要将原来hexo格式的博文转换到hugo中。其中主要的差异在于front matter,hexo使用YAML格式,这也是支持最为广泛的格式。hugo则默认是toml,但是同时可以支持yaml和json格式。个人感觉toml格式并没有多大的方便,倒是YAML格式支持的最为广泛,所以我还是在hugo中指定了使用YAML格式的front matter:

metaDataFormat = "yaml"

斐波那契堆之Go实现

一个比二叉堆更高效的数据结构,但是实现起来非常复杂。本科的时候看《算法导论》的时候曾经研究过,不是很明白。今天终于对它有了一个比较清晰的了解。 enter description here

网易云音乐新API简述

新API采用了略微修改过的AES和RSA加密,主要用在登陆接口上,对新API进行简单的分析。

Url

估计会抓包的人都知道,Url中的api便成了weapi。比如手机登录: 原来是:http://music.163.com/api/login/cellphone/ 现在是:http://music.163.com/weapi/login/cellphone/

加密算法

核心过程如下:

 aesRsaEncrypt = function (text, pubKey, modulus, nonce) {
  const secKey = createSecretKey(16);  // 随机生成16位加密密钥
  return {
    params:  aesEncrypt(aesEncrypt(text, nonce), secKey),
    encSecKey: rsaEncrypt(secKey, pubKey, modulus)
  }
}

Pandorabox之透明代理

enter description here 先修改Lan接口,避免在无线中继的时候发生本地Lan接口与wwan接口发生冲突导致无法登陆路由器。

网络 -> Lan -> IPv4地址, 设置为 192.168.33.1更改之后需要重新连接一下网络。

透明代理使用shadowsocks-libevChinDNS实现。使用ssh登陆路由器,安装所需软件。

ssh [email protected]
opkg update
opkg install shadowsocks-libev luci-app-shadowsocks ChinaDNS luci-app-chinadns --force-checksum

这个版本的软件源有点问题,所以直接opkg install基本上都过不了sha256sum检测,所以需要加上--force-checksum参数强制忽略。两个luci界面都有zh-cn汉化包,为了节省路由器空间,就不装了。

Tech Daily@1-20

小米路由器mini(Xiaomi mini R1CM)刷Openwrt

scp /path/to/PandoraBox-xxxx.bin [email protected]:/tmp/PandoraBox.bin
mtd -r write /tmp/PandoraBox.bin firmware

從爬文中得知,小米路由器Mini 官方韌體是雙系統,由於 ROM 有16MB,官方韌體都小於8MB,所以會有一份備援系統(8MB+8MB),因此如果刷了大於 8MB 的第三方韌體的話,會覆蓋掉第二個分區的系統,導致未來刷回官方韌體時會有掉 SN 的問題,而且再也無法刷入 SSH,從此以後就只能乖乖用官方韌體,再也不能玩刷機,目前新版的 PandoraBox 韌體大約都在 10MB 左右,所以刷機還真要有點決心,除非完整備份小米路由器Mini 中所有分區的資料,才能在日後完整刷回官方韌體,當然,如果已經完全放棄官方韌體的話,這些問題都是不用考慮的。from - http://blog.icece.tw/MiWiFi-Mini-Flash-uboot

Disable middle button of mouse

Execute those commands:

xinput list
⎡ Virtual core pointer                      id=2    [master pointer  (3)]    Virtual core XTEST pointer                id=4    [slave  pointer  (2)]    MI Dongle MI Wireless Mouse               id=11   [slave  pointer  (2)]    MI Dongle MI Wireless Mouse               id=12   [slave  pointer  (2)]    DLL0704:01 06CB:76AE Touchpad             id=14   [slave  pointer  (2)]    PS/2 Synaptics TouchPad                   id=17   [slave  pointer  (2)]    MiMouse                                   id=21   [slave  pointer  (2)]

xinput set-button-map 21 1 0 3

Deepin初始化

Infinality and Harfbuzz

会发生冲突,这是今天Archlinux无法启动输入法界面的元凶。重新安装freetype2\fontconfig\cairo以替换infinality-bundle。

添加PPA出现GPG问题

问题:
gpg: keybox '/tmp/tmpyiw6jvck/pubring.gpg' created
gpg: /tmp/tmpyiw6jvck/trustdb.gpg:建立了信任度数据库
gpg: 密钥 531EE72F4C9D234C:公钥“Launchpad webupd8”已导入
gpg: 合计被处理的数量:1
gpg:           已导入:1
gpg: 找不到有效的 OpenPGP 数据。

Basic Algorithms in Go

最近学Go,感觉挺不错的。闲来无事用它写了几种常用的基础算法。

快排

思想很简单,实现起来为了方便每次以left作为基准,也可以使用BFS来节省递归栈:

// QuickSort returns a sorted slice
func QuickSort(arr []int) {
    if len(arr) <= 1 {
        return
    }
    left, right := 0, len(arr)-1
    for left < right {
        if arr[left+1] > arr[left] {
            arr[left+1], arr[right] = arr[right], arr[left+1]
            right--
        } else {
            arr[left+1], arr[left] = arr[left], arr[left+1]
            left++
        }
    }
    QuickSort(arr[:left])
    QuickSort(arr[left+1:])
}