Golang学习入门资料,我是这样子过来的

Golang算是我学习的第一门静态语言,也是目前唯一会的一门静态语言,当然会也只是局限于用Go编写出一些小玩具,但是Go在很多方面很优秀,而且很多库都很完善了,写起来有不下于动态语言效率,下面是我开始学习Golang的时候关注的一些项目,感谢前人翻译的各种文档,让我学习起来很轻松。

  • the way to go: Go入门指南,这本书比较系统友好(个人感觉)的讲解了Golang的语法,以及一些需要注意的地方
  • build-web-application-with-golang : 使用Golang编写一个网站程序,如果你已经看了前一本书,看完之后却还什么都不会,那么就看这一本书。这本书的作者是astaxie,是beego的作者,目前这个项目在github有20K的star。

  • The-Golang-Standard-Library-by-Example : Golang标准库的介绍,这本书简单介绍了Golang必备的标准库,先看看这些库,学习起来比较轻松。

Golang非常简单,属于类C语言,如果你会C,那么一定可以在一天内掌握,那么直接看官方指导就OK了。编辑器/IDE我是推荐Goland,是目前地球上用来写Go最好的工具,没有之一,如果有那么一定是VIM,Goland你每敲一个字,它都在预测你下一次字是什么,并已经把你想要输入的内容都准备好了,各种错误提示非常舒服,我强烈推荐。VIM纯属个人信仰。

最后,多敲代码,少发呆。

ARCH+I3,用起来真的舒服

实在忍受不料unity的启动栏的笨重,以及gnome开浏览器时候五个顶栏,比我的M8下巴还多,其他桌面是在太鸡肋了,于是折腾了一天换上arch加i3的组合。

安装过程跟着官方的教程走并没有什么问题,不过由于粗心,中间没有安装dhcp服务,多敲了几个命令。

没有使用开箱即用的桌面环境,真的很蛋疼,是的一般人真的学不来这玩意。。。

安装Xorg,手动启动,并不需要登录管理器,附加两个显卡驱动:

pacman -S xorg xorg-xinit xf86-video-amdgpu xf86-video-intel

安装i3,有时候真的很感谢arch,没有多余的,也没有缺少的,那种这样就好的感觉真的很好,终端和启动器需要自己安装:

pacman -S i3 dmeun xfce4-terminal

最后基本的软件,没装的话就只能陪着黑色的终端过日子:

  • 输入法:fcitx fcitx-im fcitx-ui-light fcitx-libpinyin fcitx-configtool
  • 文件管理其:nautilus
  • 浏览器: firefox firefox-i18n-zh-cn
  • 中文字体:noto-fonts-cjk
  • 阴影袜子:shadowsocks-libve
  • 声音管理:alsa-utils
  • 设置壁纸软件:feh
  • 混合器:xcompmgr
  • 网络管理小工具:network-manager-applet
  • 解压工具:xarchiver
  • U盘自动挂载:udisks2
    pacman -S fcitx fcitx-im fcitx-ui-light fcitx-libpinyin fcitx-configtool nautilus  firefox firefox-i18n-zh-cn noto-fonts-cjk shadowsocks-libve alsa-utils feh xcompmgr network-manager-applet
    
    最后就是一个脚本了:
    export GTK_IM_MODULE=fcitx
    export QT_IM_MODULE=fcitx
    export XMODIFIERS=@im=fcitx
    export LC_ALL=zh_CN.UTF-8
    ss-local -s # ss信息 
    fcitx
    feh --bg-scale w.jpg
    nm-applet &
    xcompmgr &
    exec i3
    

    将上面扔到.xinitrc文件里面,这个文件可以拷贝/etc/X11/xinit/xinitrc到home目录在修改

    有时候出现莫名其妙的问题系统没有声音了,alsav被某个程序单独占用什么允许下面命令,恢复初始化:
    alsactl init
    

2018/03/09 更新

陆陆续续使用大概有一周了,之前安装在u盘上面,后来通过rsync将所有文件同步到电脑上,中间出了点小差错,不过还是顺利迁移了过去。说下感受吧,该用鼠标的地方还是得用鼠标,比如文件管理器,浏览器之类的还是使用鼠标方便,切换窗口该用键盘操作,之前一直以为如果使用平铺桌面不能调整和覆盖窗口会很难受,现在发现其实也不会,大多数情况下都是全屏工作,还有就是把标题拦隐藏了,感觉很舒服。

顺带说下当前的配置:

  • 编写代码还是使用Goland/PhpStorm,不过还是配置了vim,用了几天,还不太习惯,但是以多年使用VIM的在服务器上修改配置文件的经验来说,也还可以接受,最主要的原因是因为使用开箱即用的IDE,很多功能都用不到,启动速度慢,VIM半透明后还是很好看的。
  • 桌面环境最终是i3wm-gap/i3lock/i3bar/conky/xfce4-terminal/fet,安装这些其实很快主要是个性化的配置,可以折腾很久,每修改一个配置都要去对应的官网或者Github上看文档,这是最难的,多次修改之后才能达到自己想要的效果,这样子折腾太累了,难怪有那么多人最终叛逃到gnome和kde上面去。
  • 常用软件:输入法使用搜狗,中文里面搜狗输入法是词库最全的,其他输入法可能词库都不完整,其次界面比较好看
  • 浏览器使用Firefox,这个开发网页必备的,文件管理器使用pcmanfm,这个是哪个桌面环境带的忘记了,能比较直观的查看文件就可以了
  • 视频播放器使用smplayer,图形界面做的比较好视频播放器,在Linux下面其实可供选择的并不多,而且很多都是开源的,如果一个软件做得很好了,很难出现新的同类软件替代掉,没错我说的是xorg/wayland与vim/neovim。
  • 其他不足的地方:状态栏没有音量图标软件,找了很久一直没找到这样的软件,缺少一个启动器,可以直观的显示软件的那种。

再见我莫名其妙_(:з」∠)_的贰零壹七一事无成并没有什么可怕的开心就好

不知道标题里面放个表情会不会出现排版问题,导致无法正确传到某种心情。

博客犀利糊涂的也挂了三年了,时间真的很快,在那么一瞬间,还在回味刚刚逝去的那一秒,却发现一年又过去了,比如回到家,水水水又生了一儿子了,谁又和女朋友去哪个村那个岛过新年,而我妈有时候会幻想她儿子找个女朋友生个娃之类的情景,一切来的太突然了,多么可怕( ゚д゚)。
是的这种本来应该就元旦或者2-15这种数字比较吉利或者有某些意义日子里发出来的,但却因为各种小问题比如说没时间不在状态网络延迟的各种方方面面的因素,没有写出来,我前天刚刚知道摩尔定律,如果有一定几率出错,那么一定会出错,那么如果能拖这么久,那么一定是有问题,比如说真的太懒了。

方正教务系统一键评教脚本

每学期都有那么一次,直到大三才写这么一个脚本,貌似太迟了,所有的脚本外挂都是为了不合理的系统设计的,比较简单的做法是下载Firefox浏览器,按Tab键和键,快速选一个。

var doc = document.querySelector("#iframeautoheight").contentDocument;
var l = doc.querySelector("#pjkc").length;
console.log("评教项目数量",l);
document.querySelector("#iframeautoheight").onload = function () {
    var doc = document.querySelector("#iframeautoheight").contentDocument;
    if(doc.querySelector("#pjkc").lastElementChild == doc.querySelector("#pjkc>option[selected=selected]")){
        document.querySelector("#iframeautoheight").onload = null;
        doc.querySelector("#Button2").click();
    }
    console.log("加载完成。。")
    doing(doc)
};
var finish = 0;
function doing(doc) {
    console.log("正在评教",doc.querySelector("#pjkc>option[selected=selected]").innerText);
    doc.querySelectorAll("#DataGrid1 select").forEach(function (item) {
        var i = Math.ceil(Math.random() * 2);
        item.options[i].selected = true;
    });
    finish ++;
    doc.querySelector("#Button1").click()
}
doing(doc);

安装ubuntu + PHP7 + Caddy环境

Caddy使用golang编写的一款http服务器,和Apache nginx一样的存在,和前两者区别是用golang编写,有莫名的亲切感,自带https证书(来自let’s encrypt),支持http2,配置简单,只能性能并不是很清楚,但是使用golang编写,想来也不会很差,所以便把博客从Nginx更换到Caddy

安装

curl https://getcaddy.com | bash -s personal
apt install php7.0-curl php7.0-gd php7.0-mysql php7.0-sqlite3 php7.0-pgsql php7.0-fpm php7.0-mcrypt php7.0-mbstring php7.0-zip

配置

将下列文件保存到/etc/Caddyfle,这边注意域名和括号之间的空格不能省略,官方的教程里面是fastcgi /blog/ 127.0.0.1:9000 php,但是新版的PHP并没有监听9000端口,所以要换成下面的方式。

tristana.cn {
        root /var/www/html/blog
        fastcgi / /run/php/php7.0-fpm.sock php
}

然后在/etc/rc.localexit之前添加下面行:

ulimit -n 8192
caddy -conf /etc/Caddyfile &

重启一下服务器即可。

Caddyfile 配置文件语法详解

文件和编码

配置文件使用UTF-8编码,其中文件开始的0xFEFF文件头会被忽略如果存在的话(Windows下记事本会自动添加这个文件头)。

字符串和注释

指令和参数,参数和参数之间使用空格分割,如果参数不包括空格或换行,可以直接使用,包括空格需要使用双引号包含进来,这时候,里面的双引号需要转义\",除了双引号可以被转义,其他符号不能被转义。

行以\n作为分隔符,\r和空白行和所有空白字符将被忽略,不包括被引号包含的行。

#后面到行结束内容将作为注释被忽略,注释可以在指令的后面,也可以单独一行。

结构

以下内容与原文存在一定的差异,但不影响理解。

Caddyfile里面不存在全局变量。如下图,配置文件由标签定义组成,标签加定义是最基本的单位:
Screenshot-2017-12-25 The Caddyfile Syntax.png

标签由简单的字符串组成,定义则可以由一行或者多行,其中多行需要使用大括号({})括起来,大括号的左边({)和标签同一行,大括号的结束(})需要单独占用一行:
Screenshot-2017-12-25 The Caddyfile Syntax(1).png

缩减推荐使用一个Tab,文件的第一行永远是标签,空行、注释、import除外。

Caddyfile 配置文件快速入门教程

Caddyfile 配置文件的第一行始终是服务器的域名或者IP地址,例如:

localhost:8080

将上面内容保存为Caddyfile,当你运行的时候,会自动寻找该文件,你可以指定文件配置路径:

caddy   -conf ../path/to/Caddyfile

站点的下一行紧接着是指令,你可以点击查看全部指令,例如下面的gzip指令可以压缩页面:

localhost:8080
gzip

指令的后面可以附带一个或者多个参数:

localhost:8080
gzip
log ../access.log

有些指令需要设置多个参数,这些指令需要在后面使用大括号添加一个块,大括号开始必须与指令同一行:

localhost:8080
gzip
log ../access.log
markdown /blog {
    css /blog.css
    js  /scripts.js
}

If the directive block is left empty, you should omit the curly braces entirely.
参数里面如果包含空格必须使用" 括起来,# 后面跟着的是注释内容

# Comments can start a line
foobar # or go at the end

再用000webhost空间

12年,刚刚接触PHP,用的是在线环境,那时候找免费空间,加上一个文件管理器,就开始开搞,博客用的是WordPress,论坛程序用的PHPbb,空间用的是三蛋的空间,申请的时候用的是代理加gmail邮箱,需要挂代理,没有shadowsocks,用的是改过代理的Opera,手机端的,依旧用免费的空间搭的代理服务器.

/images/000webhost.gif

再战18个月,为M8启用f2fs

f2fs 是什么

F2FS是一种闪存文件系统,由金载极在三星集团研发,提供给Linux内核使用。 此文件系统起初是为了NAND闪存而设计的,例如这一类的存储设备,甚至可以自移动设备广泛应用至服务器。 三星应用了日志结构文件系统的概念,使它更适合用于存储设备。

如何切换到f2fs分区格式

  • 编译内核添加f2fs驱动
  • 修改boot.img,开机挂载分区的时候以f2fs方式挂载
  • 格式化分区为f2fs

为A20开发板适配红外遥控,记录遇到的问题

我手上的开发板是BananaPi-m1,自带红外接收器,这里以Android 4.2为例,虽然说是开发板,但是全志提供的东西少的可怜,A20对应的Android源码只有4.2一份,网络上的教程坑很多。

源码和编译工具

BananaPi-Android-4.2.2-Liab 这个项目里面基本都有了,但是整个项目10G+, 我们并不需要那么多,只要克隆lichee目录就可以了。

 mkdir BananaPi-Android-4.2.2-Liab
 cd BananaPi-Android-4.2.2-Liab
 git init
 git remote add origin https://github.com/ChrisP-Android/BananaPi-Android-4.2.2-Liab.git
 git config core.sparsecheckout true
 echo "lichee/*" >> .git/info/sparse-checkout
 git pull --depth=1 origin master

编译工具使用gcc-linaro,使用Ubuntu软件仓库上的arm-linux-gnueabihf-gcc都是5以上的版本,没办法编译。