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

以太坊的游戏开发者在一天内赚了50万美元

历史已经被改写了。在过去的24小时里,一个游戏开发者从他的以太坊游戏里赚了超过50万美元。我们来从头分析一下。

我对这个领域的数据非常了解是因为我在运营一个名为DappRadar的网站。它追踪着大部分的以太坊游戏,并根据它们每24小时的表现进行排行。欢迎点击进去发现新的应用。不过现在还是先来继续看看吧。

什么是以太坊游戏?

我们把这些游戏称作以太坊游戏是因为它们的代码运行在以太坊区块链上。 大多数情况下不是所有代码都在上面,而是负责主要逻辑的代码。

是什么吸引了我?

几乎所有的以太坊游戏都有一个共通点——它们都是开源的。这意味着所有人都能阅读游戏的代码来确保这个游戏没什么黑幕。

想象一下,一个MMORPG私服,管理员和所有者有很严格的权限,而且他们无法把高级武器拿去卖钱。这就是区块链的力量。没有腐败,你可以编写出来这些权限,所有人都能阅读这些代码,确保你没在作弊。

CryptoCounties就是这些透明的以太坊游戏中的一个。

 

什么是CryptoCountries?

CryptoCountries 是一个以太坊游戏,你可以在一个虚拟地图上购买一块地。一旦你出价买入一块地后,你就可以等那块地的价格上涨,然后其他人也可以从你这里购买这块地。如果你成功卖出去你的地,你就能赚到以太了。

开发者如何赚钱的?

我读了这个游戏的代码,每一次交易产生的时候开发者都会从里面收取佣金,佣金比例是交易金额的2-5%。交易的金额越大,佣金比例就越低。比如以10ETH转让一块地的佣金是2%, 以0.05ETH转让一块地的佣金比例是5%。

就这样24小时能赚50万?

对的。就是这么简单。CryptoCountries今天早上上线,在不到24小时内,它就产生了31564ETH的交易,按照当前1:$906的比例来算就是2千8百6十万美金。

我们已经知道最低的交易佣金是2%, 我们按照这个比例算的话 28600000 * 0.02  = 572000。 这已经是按照每笔交易都是5ETH以上算出来的最低金额了,事实上甚至有100万。具体金额难以统计,只有开发者自己才知道。不过超过50万美元是肯定有了,一天而已。

分叉即自由

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

通常当一个电子游戏的创造者改变游戏规则时,用户不能怎么样。但在“网络创世纪”(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吗? 我们会在以后的同系列文章中讨论细节。

为什么阿里系的APP都这么无耻

阿里系的APP一向以无耻著称。特别是在较为开放的Android平台上。

其淘宝、天猫APP, 启动时候会关联一大堆其他APP启动。而读取权限更是几乎每个都要读取。

以菜鸟裹裹为例,本来快递箱取快件就是对用户的不尊重了,各大快递都是承诺送货上门的,但是由于送件时间等因素,现在绝大多数快递员都选择投放快递箱。

这对用户来说也还算方便,凭借短信验证码,可以随时取件。

但是慢慢阿里系的包裹开始强制使用菜鸟裹裹发送验证码,取消了短信验证码。

然后这个菜鸟裹裹会读取包括联系人、短信、通话记录、安装应用列表等信息,会调用录音、摄像、位置等功能。其中摄像和位置可以理解为其用来扫码取件、一键开箱等功能。那么其他的呢?用来做什么?

我取个快递,还要被你读取这么多隐私信息,要不要脸了?