Git: 删除所有本地分支(branch) 并保留指定分支

git的本地分支建得多了不好管理。

可以在bash里面运行这句命令来删除所有本地分支,同时指定保留一个分支:

git branch | grep -v "你要保留的分支名" | xargs git branch -D

比如你要删除所有的分支只保留master:

git branch | grep -v "master" | xargs git branch -D

如果你每次都想删除所有分支只保留master,那么可以使用alias来简化命令,比如这样:

alias gbr="git branch | grep -v "master" | xargs git branch -D"

Ubuntu 18.04 LTS 阿里云源镜像

Ubuntu 18.04 LTS 版的阿里源镜像粘贴在这里


deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

使用方法:


sudo nano /etc/apt/sources.list

删除掉里面的旧内容。
粘贴上面的代码即可。

也可使用163的:
163镜像:

deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse

如何解决WSL(ubuntu)中puppetteer 运行报错的问题

最近一个项目中用到了 Chrome 的 headless Node library puppetteer 来进行预加载。
在WSL或者Ubuntu中运行的时候会报错:

Failed to launch chrome!
/mnt/...../node_modules/puppeteer/.local-chromium/linux-579032/chrome-linux/chrome: error while loading shared libraries: libX11-xcb.so.1: cannot open shared object file: No such file or directory

看起来是缺了一个依赖,可以如果你手动安装这一个依赖后再次运行的话,会提示你少另外一个。

其实它需要以下所有这些依赖:


packages="gconf-service
libasound2
libatk1.0-0
libc6
libcairo2
libcups2
libdbus-1-3
libexpat1
libfontconfig1
libgcc1
libgconf-2-4
libgdk-pixbuf2.0-0
libglib2.0-0
libgtk-3-0
libnspr4
libpango-1.0-0
libpangocairo-1.0-0
libstdc++6
libx11-6
libx11-xcb1
libxcb1
libxcomposite1
libxcursor1
libxdamage1
libxext6
libxfixes3
libxi6
libxrandr2
libxrender1
libxss1
libxtst6
ca-certificates
fonts-liberation
libappindicator1
libnss3
lsb-release
xdg-utils
wget

最简单的解决方法是运行以下命令把这些包全部装上:

sudo apt-get update && sudo apt-get install -yq gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils wget

一次解决 😀

如何解决在unix系统下创建的.sh脚本在WSL中运行报错的问题

项目中大部分同事用的都是Mac或者Ubuntu,而我用不惯,大部分时间都是使用Windows,在WSL(Windows sub system for Linux)。

一切都很美好,我可以使用unix系统中的各种工具包,同时也能使用早已习惯的Windows操作习惯和文件管理方式。更棒的是二者还共享文件系统。

但是也会有一些小问题,比如之前遇到的 Ubuntu on Windows (WSL) 使用git时显示所有文件都被更改

最近又遇到一个问题,在unix类系统中写的脚本在WSL中运行的时候会报错:

scripts/test.sh: line 2: $'\r': command not found
scripts/test.sh: line 3: syntax error near unexpected token `$'{\r''
scripts/test.sh: line 2: syntax error near unexpected token `$'{\r''
'cripts/test.sh: line 2: `function cleanup {

这还是unix和windows系统下文本结尾字符定义不同导致。修复方法有两种:

  • 使用 dos2unix:
    apt install dos2unix
    dos2unix FILE_NAME
    
  • 使用 sed
    sed -i 's/\r//' setup.sh

Ubuntu on Windows (WSL) 使用git时显示所有文件都被更改的解决方法

Windows 的 Bash(又称作Ubuntu in Windows 或者Windows Subsystem for Linux,  WSL)很好用,基本能满足日常开发需要。

不过在其中使用git的时候你会发现,它总是会显示所有文件都被更改过了。

这是因为,代码文件实际上是在Windows系统中的,而Windows系统 使用CRLF作为行尾。

当你在bash 里面使用git的时候,git会以为你在linux里,而linux的行尾符号是LR。所以它就会认为所有的文件都被更改过了。

修复这个问题的方法是,在bash里面运行以下命令:

git config --global core.autocrlf true

WSL: 用Powershell 而不是 Bash on windows

前端开发人员使用Mac或者说Unix类系统的比例非常高,这导致很多的工具、包管理都对Windows系统非常不友好,特别是当你在一个团队中,别人都在用Mac的时候。以前的解决方式是要么买Mac,要么安装Ubuntu等Linux的桌面发行版本。再不济还有虚拟机这种方案。

但是Windows良好的硬件兼容性、丰富的扩展性和DIY可能,以及最大的需求:游戏,导致很多人,比如我,难以割舍对Windows的爱。

好在Windows后来推出了Bash on Windows 工具,这使得Windows 用户可以直接在Windows里面使用一个内建的Ubuntu bash,这使得Windows上的开发体验和Mac用户接近了不少,何况还有天然的外接显示器、机械键盘等外设,不用任何转接头即可顺畅连接。

 

不过最近在参与一个Ruby on Rails开发的过程中发现,bash中编译过程非常缓慢, 在webpack做编译的时候更是慢得令人发指(虽然这是个很好的摸鱼借口)。时不时还出现一个内存不够用的错误。后来才发现,默认Windows对这个Bash工具只给了1G内存。

搜索了一番,很多人都有这种问题。最终得到的答案是,用Powershell而不是用Bash on Windows.

在Powershell中键入bash,即可启动内建Ubuntu子系统。没有内存限制。编译飞快,再也没有理由摸鱼。

 

yarn 使用淘宝镜像

npm 似乎正在被 yarn 代替。但是在大陆境内,无论使用哪个工具,都面临着资源下载缓慢的问题。

针对npm,淘宝推出了 cnpm 这个工具。可以方便通过

`npm install cnpm` 来安装,之后再直接使用cnpm来达到加入下载包的目的。

那么yarn如何设置呢?目前没有cyarn 之类的工具。

方法就是把yarn的源改成淘宝的npm源。

命令如下:

yarn config set registry https://registry.npm.taobao.org -g

把常用的比较大的包node-sass源也设置为淘宝镜像

yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sass -g

其他一些常用的yarn命令如下

初始化一个新的项目

yarn init  (可以在后面加 `y` 来默认每一项都yes)

安装所有的依赖包

yarn  or  yarn install

添加一个依赖包

yarn add [package]
yarn add [package]@[version]
yarn add [package]@[tag]

更新一个依赖包

yarn upgrade [package]
yarn upgrade [package]@[version]
yarn upgrade [package]@[tag]

删除一个依赖包

yarn remove [package]

列出每个缓存的包
yarn cache ls 

清除本地缓存

yarn cache clean

分叉即自由

区块链、电子游戏和操作系统有什么共同点?

通常当一个电子游戏的创造者改变游戏规则时,用户不能怎么样。但在“网络创世纪”(Ultima Online)中,用户决定撸起袖子创建了他们自己的游戏服务器。当Android着手创建一个新的操作系统的时候,他们并没有从头开始,而是分叉Linux。比特币有一大批拥趸,但社区无法就如何扩展交易达成一致,所以向比特币现金这样的组织已经涌现出来,增加了核心社区没有同意的新功能。

分叉是使用户摆脱暴政,开创自己社区的基本机制。分叉就是指当一个组织不同意中央控制结构时,决定分开走自己的路。

无论何时,当一件事情都由单一一个实体来控制时,权力的集中最终会伤害到用户。

以太坊的创造者Vitalik Buterin,在“魔兽世界”的制作者暴雪娱乐改变了他“心爱的术士的生命虹吸”的那天晚上心碎暴哭。从那之后,他意识到集中服务的恐怖,决定退出。

著名的分叉

阿瑟龙的召唤的最后一刻

“阿瑟龙的召唤”(Asheron’s Call)是一款在线很长的时间的RPG游戏,但去年停服了。阿瑟龙的召唤运行了超过12年,而且到最后还是有一个非常强大的社群。

当工作室强行关闭了游戏时,一组人聚在一起并开始记录所有的游戏包。他们捕获了超过1.32亿个数据包,包含超过2.24亿条游戏信息。他们不得不从这些数据中艰难地重新创建游戏服务器,就像是试图通过墙上地文字重新创建古埃及语言一样。

如果这是在区块链上运行,社群估计已经分叉了数据。只要社群还存在,游戏就会在。

这个社群用捕获的超过1.32亿个数据包中包含的超过2.24亿条游戏信息来重新创建游戏。

Dread Lord - 网络创世纪

“网络创世纪”(Ultima Online)是一款从1998年开始一直在运行的在线多人RPG(MMORPG)游戏。早期他们有Dread Lord,作为邪恶的角色,当你离开城市的时候,恐吓普通玩家。

随着时间的推移,他们为了噱头,改变了游戏玩法方面。玩家因此反抗并创造了他们自己游戏世界的“碎片”,或分叉。

然而,由于他们无法访问游戏服务器,就像“阿瑟龙的召唤”一样,他们不得不从头开始重建整个游戏服务器。幸运的是,他们能够重新使用客户端和游戏资产。

Linux被分叉了比你能想象的还要多次,就连Android开始也是作为一个Linux的分叉。Linus Torvalds是主要Linux链的最终仲裁者,但是没有什么能阻止Redhat占属于自己的一份,又名Ubuntu。这给了用户自由,继续为老的过时的计算机运行代码,又或者在Android的情况,添加无法进入主线的实验性功能。


“比特币叉”

像比特币现金、比特币Segwit2x这样的比特币分叉清楚地表明,在比特币世界中,核心参与者之间没有强烈的共识。我认为这些分叉的存在是非常健康的,因为它们允许在较小的环境中尝试新的功能,并使一个小团体不能控制区块链的未来。

游戏经济

游戏最大的问题之一就是游戏资产,比如黄金,盔甲和稀有物品在供应方面并不固定。 即使在物品稀少的情况下,代码更改和bug也会随时改变这种稀缺性。

在“暗黑破坏神2”(Diablo2)中,有一种被称为“约旦之石”(Stone of Jordan)的珍贵物品被用作货币,因为它很少见。 然而,有人发现了一个物品复制的bug,并创造了成吨的“约旦之石”。 开发人员也能简单地改变创建这些物品的算法,市场可以在瞬间被破坏。

对此的解决方案就是让其运行在可以分叉的区块链上。 如果有一个bug改变了比特币的供应,只要社区同意,一个分叉就可以解决这个问题。 如果比特币的开发者明天想要提供更多的比特币,他们将不得不说服每一个节点去运行他们的新软件。

此外,通过将这些资产置于区块链中,我们可以追踪游戏中的所有物品,并允许它们在不受原始作者影响的“交易所”进行交易。

现在我们在游戏中获得的钱币可以永远被稀释。 我们花了几个小时努力得到的盔甲,可以在一瞬间被拿走。 当一家公司运营时,审查频繁发生。 如果提供新的物品对公司来说有利可图,他们就会这样做。

我们需要把权力交还给用户

解刨一个分叉

让我们用一个游戏作为开始。一个分叉中包含了哪些元素?

  1. 游戏客户端
  2. 客户端视觉资产,如美工
  3. 客户端/服务器协议
  4. 服务器代码
  5. 用户和人物的数据库
  6. 可收藏的物品、剑、盾、魔法

当这其中任何一个是闭源代码时,应用程序的用户必须重新构建整个游戏。 有时候这是不可能的。

一个非常极端的例子就是任天堂的Satellaview游戏。他们直接通过卫星传输电子游戏,并将它们下载到盒式磁带的内存中。你只能玩这个游戏30分钟,然后它就消失了。幸运的是,有人制作了一些通关视频,以便其他人可以对游戏重新编码。曾经有特别的Legend of Zelda游戏也就这样消失了。

取决于人们多有激情,他们会重新创建上面列出的一个或多个元素。

在未来,我们可以迫使游戏创作者将所有这些资产存储在区块链中以延长使用寿命。

区块链游戏

为什么区块链可以解决这些问题

最近CryptoKitties在以太坊区块链上引入了一个叫ERC721代币的特别的小东西。这些代币不能被复制,并且是唯一的。用户可以分叉区块链并创建自己的副本。用户构建游戏add-ons的时候可以检查游戏的完整状态。

再举一个例子,如果我们看一下SteemIt区块链,它基本上是一个在区块链上运行的Reddit克隆。 任何人都可以克隆整个区块链中的所有评论和帖子,然后在其基础上创建有趣的应用程序。难怪尽管没有那么受欢迎,Steem有比其他区块链更多的add-ons。

如果我们可以在像“魔兽世界”这样的游戏中,制作整个游戏数据库的副本呢? 我们可以建立新的任务。 我们可以建立公会管理工具。 我们可以花十年时间来定制和发展游戏,远超原作者的想象。

但是,这仍然不是完全没有问题。 我们如何才能将区块链中的十亿字节的游戏资产保留下来? 是用IPFS或Bittorent,还是我们只接受集中式解决方案,并将散列存储在区块链上? 我们将在以后的文章中进一步探讨这个问题。

总结

我们已经看到很多公司在停止盈利时放弃产品的例子,或者有时会改变游戏动态去取悦某一些人。 在未来,游戏将运行在区块链之上,因此用户可以像使用Linux的人那样,体验相同的自由。

那将会是什么样子? 我们会把所有可收藏的物品存放在以太坊或侧链上吗? 我们可以在区块链上运行MMORPG吗? 我们会在以后的同系列文章中讨论细节。

Fixed: No matching distribution found for tensorflow-gpu error when installing Tensorflow on Windows

When I was trying to install TensorFlow on my Windows 10, I got this error:

 

Could not find a version that satisfies the requirement tensorflow-gpu (from versions: )
No matching distribution found for tensorflow-gpu

 

My OS details:

Windows 10, 64 bit

Python 3.6.1 32 bit

 

So, when I search this issue on website, someone says it’s because TensorFlow only works with Python 3.5.x, someone says there is  a complicated  command can fix this.

But in the official document, TensorFlow works with 3.5.x and 3.6.x. The thing is that, it only works with 64 bit python.

So the simplest solution for this issue is: Install Python 3.6.x 64 bit.

 

微信公众平台“发生未知错误”的解决方法之一

最近想玩微信公众平台开发。
在填写服务器配置的时候,点击提交总也不通过,显示“发生未知错误,请重试”(大意如此);
搜了半天也没得到什么有用的东西,有很多答案居然是换个浏览器就可以了。然而我从Chrome到Firefox到Edge甚至IE都换过了,依然没有解决。

随后读了一下文档,猜想,该不是在提交配置的时候微信公众平台就要测试吧?
就快速写了一个客户端。按照文档方法加密验证签名。果然提交成功。

关键点在下面:

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

参数
描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

1)将token、timestamp、nonce三个参数进行字典序排序

2)将三个参数字符串拼接成一个字符串进行sha1加密

3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

简单来说就是验证一下服务器。在提交服务器设置的时候你可以不用管这个验证过程,直接返回echostr即可。等配置提交完成了再实现也没问题。

 

所以微信你可否给一些更友好一点的错误提示呢?诸如“未能连接到你的服务器”?