关于github:满速下载PanDownload重振回归

明天在逛GitHub忽然看到了一个相熟的身影 GitHub地址:https://github.com/PanDownloa... PanDownload作为一代BD网盘下载神器貌似王者归来了 本着试一试的心态,将我的项目下载并装在了电脑上测试 发现还真的和原来的一样好用 下载时速度也根本可能跑满本人的宽带 同时,还反对多个下载通道 1、伞兵一号通道:被限速账号应用,会有减速成果 2、伞兵二号通道:未被限速账号应用,不反对近程下载 3、伞兵三号通道:未被限速账号应用,反对近程下载 4、伞兵四号通道:被限速账号应用,可满速 有网友下载速度间接达到了60M/s!! 本版特点1.容许最高应用1024线程下载 2.容许最高32工作同时下载 3.修复PanDownload全副性能,截至到公布日期,所有性能可用 4.内置三大下载通道 5.容许用户自定义PanDownload题目 6.应用第三方提取码查问通道,主动填写提取码 7.默认勾销PanDownload的链接分享 8.较好的容灾解决(眼神暗示) 应用办法一、下载相应压缩包 二、确认杀软没有删除解压进去的内容 三、双击运行PanDownload.exe即可,如果出什么谬误,多开几次,试试管理员运行 四、若呈现解决不了的谬误,可去Github详谈 Pandownload下载办法:公众号回复【102】即可下载

September 9, 2020 · 1 min · jiezi

关于github:更有效使用GitHub的4个技巧

起源:公众号《前端全栈开发者》作为一个十分喜爱GitHub的程序员,我在日常应用中发现了这4个技巧,能够进步我应用GitHub的效率。这篇文章介绍并演示了这4个技巧,我心愿它们也能帮忙你更无效地应用GitHub。 技巧1:用文件查找器疾速、轻松地搜寻仓库中的文件GitHub提供应用Git进行软件开发和版本控制的托管,有数千个存储库、我的项目和文件。因而,如何高效地在GitHub上搜寻文件是十分重要的。第一个技巧是应用GitHub在仓库中提供的快捷方式搜寻仓库中的文件。 如上图所示,在运行时的仓库页面,按键盘上的 t 键,那么GitHub就会激活文件查找器。而后你只须要输出指标文件名,比方ServiceProvider.cs 文件,文件查找器就会显示你想要的文件。 技巧2:应用搜寻限定词搜寻你想要的指标当初,假如你不晓得指标文件位于哪个仓库中,或者你想在组织中查找某个用户。而后,你能够应用搜寻限定词在GitHub的任何页面上搜寻所需的指标。 如你在下面看到的,咱们在Marketplace页面上,并心愿在dotnet组织中搜寻ConfigurationBuilder.cs文件。而后,你只须要输出搜寻限定词即可表明此目标。 org:dotnet filename:ConfigurationBuilder.csGitHub就会显示你想要的文件。 技巧3:在Github个人资料页面上启用自述文件是的,看来Github不仅在6月份从新设计了GitHub的UI,还减少了一些小机密。你能够在Github个人资料页面上取得个人资料README。它是你本人的自述文件,而不是我的项目的自述文件。乏味! 启用它非常简单,你只须要创立一个与你的Github账户用户名雷同的新仓库,这是一个非凡的仓库,你能够用它在你的Github配置文件中增加README.md。 技巧4:将徽章增加到GitHub仓库中从技术上讲,这不是GitHub提供的性能。然而,应用此小技巧能够使你的GitHub仓库页面更业余,并反映你我的项目的以后状态。 一些社区为开发者提供了本人的徽章,例如,你能够从Azure DevOps中取得如下所示的构建/部署状态徽章。 另一方面,你能够从一些供应商那里取得更通用的徽章,比方shields.io。shield.io 能够读取你我的项目的状态并生成相应的徽章。此外,你还能够在 shield.io 上创立本人的徽章。 而后,你只须要将markdown链接复制并粘贴到GitHub仓库中的README.md文件中。

August 24, 2020 · 1 min · jiezi

关于github:免费部署个人博客到远端Github

前言后面的博客我写到怎么样用hexo建设一个本人的博客网站(没看的能够先看后面那个文章地址,)然而它只能运行在本地端口,如果你分享给你的小伙伴他们是打不开的。如果把它部署到服务器上或空间上每个月都会有不菲的收入,所以我明天教大家怎么部署到收费的GitHub下面。 创立GitHub仓库首先登录GitHub而后新建一个repository(部署集体博客的GitHub仓库命名必须要与集体名称雷同,否则接下来会出谬误)(疏忽我这个谬误揭示,因为我曾经部署过一次了)创立仓库后会跳转到这个界面这时咱们GitHub的仓库建设就实现了 装置git部署插件回到命令行中进入博客文件夹内在blog文件目录下输出: C:\Users\Markey\blog> npm install --save hexo-deployer-git如果不行的话就持续应用淘宝镜像源,输出: C:\Users\Markey\blog> cnpm install --save hexo-deployer-git静静的期待装置装置实现后进入文件夹关上_config.yml文件进行配置关上文件找到deployment在type后输出'git',并增加repo和branch两个配置,在repo处填写github仓库地址,在branch处填写master。!!留神!!冒号前面要加空格!! 部署到远端在命令行中输出 C:\Users\Markey\blog> hexo d就会主动上传到远端,并要求你填写账户的明码。 然而如果呈现了谬误提醒,解决办法是: 右键桌面关上git bush在外面输出 $ git config --global user.name "姓名为GitHub上的姓名" $ git config --global user.email "邮箱为GitHub的注册邮箱"这时再反复第一遍的步骤,回到命令行中输出 hexo d失常提醒输出明码即位胜利,输出明码后就会主动向远端推送文件,再次关上GitHub仓库页面就会发现本地blog文件夹中的文件都再GitHub上部署实现 关上集体博客网站的页面这时只有输出仓库名 就能够胜利的拜访到集体博客的页面了,和你在localhost4000端口下面是截然不同的,如果你感觉这个域名每次都要输出很麻烦很简短,来看看怎么给这个博客绑定一个本人的共性域名吧 文章链接

August 23, 2020 · 1 min · jiezi

关于github:github上能commits进项目但无记录的问题

github上提交但无记录问题问题可能在于你的git账号与github帐号不对应,须要留神到公司的git账号和github上的区别。其余账号能提交然而不算commits,算不同用户,然而不能在我的项目里拉成我的项目成员。详见官网解释) 导致的结果就是长久以来的commit都不算,都是空白的,气skr人

August 20, 2020 · 1 min · jiezi

关于github:开发一款视频直播有多吃香

视频直播与通话类利用有多火爆呢? 据工信部公布的2020年上半年互联网和相干服务业运行状况统计,截止到2020年6月末,我国国内市场上监测到的APP数量为359万款,其中,外乡第三方利用商店APP数量为212万款。 而在下载量中,音乐视频类下载量排第一位,下载量达1810亿次,环比增长6.6%;日常工具类、社交通信类、零碎工具类、生存服务类别离以1555亿次、1543亿次、1219亿次、1204亿次排名第3-6位。 2019-2020年1-6月互联网业务收入增长状况 如此大的下载量,是不是听了之后也开始蠢蠢欲动了呢? 而因为疫情的影响,手机与互联网的遍及,市场还处于挖掘阶段,有十分大的回升空间。那么,很多投资人会问了,开发一款视频直播或者视频通话类利用难吗? 图片起源:xcv95 毫无疑问,如果说要从策动到开发到测试再到上线,都由本人独立实现的话,那肯定是艰难的,因为你须要的团队涵盖了开发人员到营销、后续服务人员以及保护人员,这都将是一个很大的挑战。 一款市面上性能较完整的APP个别会用到10个SDK乃至更多的SDK,SDK是什么呢?简略来说,SDK就是软件开发工具包,它能够简略地为某个编程语言提供利用程序接口的一些文件,但也可能包含能与某种嵌入式零碎通信的简单的硬件。咱们通常看到的各类软件与APP都是由各类的SDK开发组成的。 而那真的须要本人去开发吗? 答案显然是否定的,事实上,开发一款这样的利用并不难,甚至只有你有想法,找到可实现你想法的SDK,进行简略的编程编写,整合资源,便能够实现本人的想法,从而做出一款蕴含了本人想法的利用。 anyRTC正是服务于利用开发的平台之一。 anyRTC是一家专一于提供优质音视频服务的公司。 说到音视频,现如今曾经慢慢渗入生存的每一个角落。有了音视频的传输,你能够在微信里与家人通电话,能够在直播软件上听主播唱歌,能够在APP上开线上会议,能够坐在家里上网课…… 音视频作为媒介,传递的不仅仅是信息,还包含了情感,促成了人与人之间的交换,特地是近些年来,音视频简直涵盖了所有的热门APP,不仅是不便了用户之间的交换,突破工夫空间的壁垒,更是加强了APP与用户的粘合度,让用户感触到APP的温度。 anyRTC入门有多简略呢? 轻便的SDK,稳固的接口,一对一的业余技术领导,仅需4行代码就实现的音视频场景搭建……入门有多简略呢?就像吃饭一样简略。你仅需进入官网,点击注册,下载SDK,就能够开启你的音视频之旅了!各式各样的Demo收费体验,总有一款适宜你。 如果你并不是开发人员,也能够通过咱们给出的实例代码,实现场景的出现,剩下的就只须要你体验了,邀请好友,一起测试,看看成果。如果想要某一个板块的性能,间接分割客服: “嘿!把这个给我拆下来,我想给我的APP整个新玩意儿!” anyRTC不仅能够提供音视频的SDK,能够同时满足音频与视频的须要,也能够独自提供音频SDK与视频SDK。并且anyRTC能够提供音视频传输的服务,实时传输,高并发高可用,满足绝大部分的开发需要,而且每月会提供10000分钟收费时长,对于初创APP来说,能够缩小十分大的守业累赘。 不仅如此,只有在9月30日以前注册应用,咱们还将给到“首月收费,次月五折”的钜惠,惊喜一波接一波!这次肯定超值~ 尽管当初的互联网普及率曾经很高了,但互联网时代的倒退仍旧还处于初级阶段,许多的互联网利用都在拔地而起,整个互联网行业兴兴向荣。5G基建的搭建也刺激了互联网的智能倒退,在将来,应用领域还会有更多的宝藏期待开掘,而音视频,也将成为这条路上不可或缺的中坚力量。 所以,如果你想要开发一款视频直播或是视频通话类利用,找到咱们,就不难啦!

August 18, 2020 · 1 min · jiezi

关于github:Github-Actions-Hugo-自动更新博客

应用 hugo 搭建集体博客,GitHub 治理博客资源,GitHub Actions 主动构建更新博客站点。 后期筹备GitHubDockerNginxHugo一个曾经备案的域名一台在线的服务器Let's Encrypt HTTPS 证书GitHub Actions 主动公布name: Deploy Blogon: push: branches: [ master ] pull_request: branches: [ master ]jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Deploy Blog uses: appleboy/ssh-action@master with: host: ${{secrets.BLOG_ALIYUN_HOST}} username: ${{secrets.BLOG_ALIYUN_USERNAME}} key: ${{secrets.ID_RSA_HUG_BLOG_ALIYUN}} script: | if [ ! -d "kk70-blog-source" ]; then git clone https://github.com/kevin70/blog.git kk70-blog-source fi cd kk70-blog-source git pull --rebase git submodule update --init --recursive docker run --rm -i -v ~/kk70-blog-source:/src klakegg/hugo:0.74.3 if [ ! -d "/usr/share/nginx/kk70.top" ]; then mkdir -p /usr/share/nginx/kk70.top else rm -rf /usr/share/nginx/kk70.top/* fi cp -R public/* /usr/share/nginx/kk70.top/应用 appleboy/ssh-action 连贯近程服务器构建更新 Blog。 ...

August 15, 2020 · 1 min · jiezi

关于github:git修改本仓库用户名和邮箱和全局用户名和邮箱以及已提交内容的用户名和邮箱

批改本仓库的用户名和邮箱git config user.name 'new username'git config user.email 'new email' 批改全局用户名和邮箱git config --global user.name 'new username'git config --global user.email 'new email' 批改已提交内容的用户名和邮箱1.关上终端 2.复制粘贴脚本,并依据你的信息批改以下变量 OLD_EMAIL CORRECT_NAME CORRECT_EMAIL #!/bin/shgit filter-branch -f --env-filter 'OLD_EMAIL="your-old-email@qq.com"CORRECT_NAME="newName"CORRECT_EMAIL="new-emil@qq.com"if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]thenexport GIT_COMMITTER_NAME="$CORRECT_NAME"export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"fiif [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]thenexport GIT_AUTHOR_NAME="$CORRECT_NAME"export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"fi' --tag-name-filter cat -- --branches --tagsgit log 查看历史记录批改状况 3.应用git push --force --tag origin 'refs/heads/\*' 把正确的历史提交记录提交的到github服务器

August 13, 2020 · 1 min · jiezi

关于github:基于-Hexo-NexT-GitHub-的静态博客2020-年-8-月升级过程记录

早在 2017 年,我基于 Hexo + NexT 搭建了 GitHub 托管的动态博客。到当初快 3 年了,产生了很多变动,比方 Hexo 脚手架降级了 2 个大版本「目前最新 5.0 版」,Node.js 也降级了多个大版本,动态博客的性能进行了很多加强,为了赶上时代的潮流,故须要对之前搭建的动态博客底层框架进行全方面的降级。本文记录了残缺的降级过程。本文演示在 Mac 零碎下的操作过程。 首先展现降级后,主页最终成果: 本次降级计划如下: 应用最新版脚手架工具创立新的动态博客我的项目将文章、Next 主题、Hexo 配置等迁徙至新版我的项目中应用该计划,可确保不会呈现新老版本的兼容性问题,在稳定性、效率之间找到最好的平衡点。 工具筹备依据 Hexo 官网的介绍,进行工具的筹备,首先确保零碎中已装置如下工具: node.js「演示版本13.12.0」git而后在终端顺次执行如下 bash 指令: # 国内执行 cnpm 命令更快更不便npm install hexo-cli -ghexo init blogcd blognpm installhexo server初始动态博客我的项目曾经能够在本地运行起来了,接下来集成最新版 NexT 主题,依据 NexT 官网的领导,间接执行如下指令: git clone https://github.com/theme-next/hexo-theme-next themes/next关上 Hexo 配置文件,更改主题: theme: next装置 git 部署插件 npm install hexo-deployer-git --save接下来能够开始筹备数据的迁徙工作了。 配置及文章迁徙只须要进行如下两步,即可实现迁徙工作: 将 Hexo 目录下的 _config.yml 配置,以及主题目录下的 _config.yml 配置迁徙至新的我的项目中将 Hexo 目录下的 source 目录整体迁徙至新的我的项目中新版性能变更在新版 NexT 主题的配置文件中,新增了很多基于 jsdelivr.net 的可选 CDN 服务,关上后能够保障三方资源文件的极快加载,倡议关上。Hexo 的官网文档中,介绍了文章中插入图片的三种办法,不过无论是哪种办法,在应用本地 Markdown 编辑器进行文章编写时,都无奈预览图片。为了解决此问题,能够装置一个图片门路转换的插件 hexo-asset-image,然而该插件目前处于废除状态。目前未找到好的解决办法,临时实用官网举荐的「相对路径的标签援用」。icon 资源的援用格局呈现了变动,详情能够参考配置示例,须要留神变更。感触尽管 Hexo + NexT 整体降级了 1 到 2 个大版本,细节性能明显增加了很多「从配置的规模就可以看进去」,页面细节更加现代化,然而主体性能并无变动。首次迁徙后,呈现局部图片、图标找不到的状况,后续通过钻研后都失去了解决,并无其余问题,体验相比原来达到了 105% 的程度,举荐降级。 ...

August 9, 2020 · 1 min · jiezi

关于github:基于-Hexo-NexT-GitHub-的静态博客2020-年-8-月升级过程记录

早在 2017 年,我基于 Hexo + NexT 搭建了 GitHub 托管的动态博客。到当初快 3 年了,产生了很多变动,比方 Hexo 脚手架降级了 2 个大版本「目前最新 5.0 版」,Node.js 也降级了多个大版本,动态博客的性能进行了很多加强,为了赶上时代的潮流,故须要对之前搭建的动态博客底层框架进行全方面的降级。本文记录了残缺的降级过程。本文演示在 Mac 零碎下的操作过程。 首先展现降级后,主页最终成果: 本次降级计划如下: 应用最新版脚手架工具创立新的动态博客我的项目将文章、Next 主题、Hexo 配置等迁徙至新版我的项目中应用该计划,可确保不会呈现新老版本的兼容性问题,在稳定性、效率之间找到最好的平衡点。 工具筹备依据 Hexo 官网的介绍,进行工具的筹备,首先确保零碎中已装置如下工具: node.js「演示版本13.12.0」git而后在终端顺次执行如下 bash 指令: # 国内执行 cnpm 命令更快更不便npm install hexo-cli -ghexo init blogcd blognpm installhexo server初始动态博客我的项目曾经能够在本地运行起来了,接下来集成最新版 NexT 主题,依据 NexT 官网的领导,间接执行如下指令: git clone https://github.com/theme-next/hexo-theme-next themes/next关上 Hexo 配置文件,更改主题: theme: next装置 git 部署插件 npm install hexo-deployer-git --save接下来能够开始筹备数据的迁徙工作了。 配置及文章迁徙只须要进行如下两步,即可实现迁徙工作: 将 Hexo 目录下的 _config.yml 配置,以及主题目录下的 _config.yml 配置迁徙至新的我的项目中将 Hexo 目录下的 source 目录整体迁徙至新的我的项目中新版性能变更在新版 NexT 主题的配置文件中,新增了很多基于 jsdelivr.net 的可选 CDN 服务,关上后能够保障三方资源文件的极快加载,倡议关上。Hexo 的官网文档中,介绍了文章中插入图片的三种办法,不过无论是哪种办法,在应用本地 Markdown 编辑器进行文章编写时,都无奈预览图片。为了解决此问题,能够装置一个图片门路转换的插件 hexo-asset-image,然而该插件目前处于废除状态。目前未找到好的解决办法,临时实用官网举荐的「相对路径的标签援用」。icon 资源的援用格局呈现了变动,详情能够参考配置示例,须要留神变更。感触尽管 Hexo + NexT 整体降级了 1 到 2 个大版本,细节性能明显增加了很多「从配置的规模就可以看进去」,页面细节更加现代化,然而主体性能并无变动。首次迁徙后,呈现局部图片、图标找不到的状况,后续通过钻研后都失去了解决,并无其余问题,体验相比原来达到了 105% 的程度,举荐降级。 ...

August 9, 2020 · 1 min · jiezi

关于github:糟糕你写的-BUG-要被存1000年了

摘要:代码冰封,祖传千年!把大象放在冰箱须要几步? 三步!把代码放在北极须要几步?纳尼? GitHub刚刚颁布了一组照片,你写的代码(BUG)上周曾经被打包运往北极保留。 只有你2月2日以前奉献过的开源代码,当初都曾经被埋在北极的冰雪之下,保留一千年。 2019年GitHub颁布了一项打算:Arctic Code Vault,我的项目的意思是要把你的/我的/他们的代码带入北极,而后埋入北极公开400米深的永恒冻土层,据说,要保留1000年。 (这就是传说中的 祖传 代码 吗? ) 据GitHub官网统计,曾经有数百万的程序为这个北极代码仓库(Arctic Code Vault)打算做出了奉献。第一阶段的代码曾经胜利打包“快递”到北极,接下来GitHub还会持续发展这个我的项目。 这是怎么样个神操作?来,跟随着小熊派的脚步,来一场代码的北极之旅吧! 第一步:上传北极代码库要想将让本人代码被带往北极,首先你得将代码上传至GitHub的北极代码库。 https://github.com/github/archive-programGitHub官网为这些将本人代码上传至北极代码库 的开发者们还设计了 荣誉徽章 以示表彰,只有将鼠标悬停在开 发者主页 材料介绍中“ Highlight ”的下方,即可看到该开发者有哪些项目存在于北极代码库。 第二步:代码的保留可能会有不少小伙伴十分纳闷,这些网站上的代码要怎么能力保留下来? 除了自行将代码上传北极代码库外,GitHub还会对每个沉闷的公共存储库进行快照捕捉,将其贮存在北极代码库里,并将北极代码库中足足有21TB的代码数据交给挪威Piql公司。由该公司位于挪威德拉门的工厂进行编码并以QR码的模式保留在卤化银胶片上。这种胶片的使用寿命极长,能够最大限度地将代码残缺地保留下来。 第三步:代码的运输以及寄存这些每帧都蕴含880万个像素点的胶片足足装了186箱,在运到挪威的首都奥斯陆后通过空运返回北极。 这些寄存了代码的胶片最终落在了斯瓦尔巴群岛上一个只有几千人的小镇朗伊尔城,这里人迹罕至、气温凛冽,有几百米厚的冻土层,十分合适寄存胶片。 这些胶片卷轴将会被存储在小城左近的一座废除煤矿密封室内的钢壁容器中。而在这废除煤矿的不远处则是存储了寰球数以百万计种子的寰球种子库,当初来自世界各地的开源代码与寰球种子库一起存储在这座小岛上,为人类的子孙后代留下一笔难以掂量的宝贵财富。 将来如何解析出代码?那就有人放心了,千年后的人类与当初人类的认知程度必会呈现偏差,那时的人类该怎么解析出这些代码呢? 据GitHub官网阐明,在发展打算前就曾经招集了人类学、考古学、历史学、语言学等各方面的专家组成GitHub Archive Program征询小组,为解决如何与"继承者们"进行最佳的沟通曾经提出诸多计划了。在这些胶片卷轴中除了开源代码以外还会有存档的简介、其应用形式、开源利用的信息和指南以及当下这些开源我的项目的应用状况等,以防未来的读者无奈解读该文档或解读后须要从头开始重建技术。 千年太久,只争朝夕! 侥幸的是,你不必等一千年能力看小熊派的代码! 话说,1000年当前你的后辈看到你的代码当前是什么样的反馈? 点击关注,第一工夫理解华为云陈腐技术~

August 4, 2020 · 1 min · jiezi

关于github:糟糕你写的-BUG-要被存1000年了

摘要:代码冰封,祖传千年!把大象放在冰箱须要几步? 三步!把代码放在北极须要几步?纳尼? GitHub刚刚颁布了一组照片,你写的代码(BUG)上周曾经被打包运往北极保留。 只有你2月2日以前奉献过的开源代码,当初都曾经被埋在北极的冰雪之下,保留一千年。 2019年GitHub颁布了一项打算:Arctic Code Vault,我的项目的意思是要把你的/我的/他们的代码带入北极,而后埋入北极公开400米深的永恒冻土层,据说,要保留1000年。 (这就是传说中的 祖传 代码 吗? ) 据GitHub官网统计,曾经有数百万的程序为这个北极代码仓库(Arctic Code Vault)打算做出了奉献。第一阶段的代码曾经胜利打包“快递”到北极,接下来GitHub还会持续发展这个我的项目。 这是怎么样个神操作?来,跟随着小熊派的脚步,来一场代码的北极之旅吧! 第一步:上传北极代码库要想将让本人代码被带往北极,首先你得将代码上传至GitHub的北极代码库。 https://github.com/github/archive-programGitHub官网为这些将本人代码上传至北极代码库 的开发者们还设计了 荣誉徽章 以示表彰,只有将鼠标悬停在开 发者主页 材料介绍中“ Highlight ”的下方,即可看到该开发者有哪些项目存在于北极代码库。 第二步:代码的保留可能会有不少小伙伴十分纳闷,这些网站上的代码要怎么能力保留下来? 除了自行将代码上传北极代码库外,GitHub还会对每个沉闷的公共存储库进行快照捕捉,将其贮存在北极代码库里,并将北极代码库中足足有21TB的代码数据交给挪威Piql公司。由该公司位于挪威德拉门的工厂进行编码并以QR码的模式保留在卤化银胶片上。这种胶片的使用寿命极长,能够最大限度地将代码残缺地保留下来。 第三步:代码的运输以及寄存这些每帧都蕴含880万个像素点的胶片足足装了186箱,在运到挪威的首都奥斯陆后通过空运返回北极。 这些寄存了代码的胶片最终落在了斯瓦尔巴群岛上一个只有几千人的小镇朗伊尔城,这里人迹罕至、气温凛冽,有几百米厚的冻土层,十分合适寄存胶片。 这些胶片卷轴将会被存储在小城左近的一座废除煤矿密封室内的钢壁容器中。而在这废除煤矿的不远处则是存储了寰球数以百万计种子的寰球种子库,当初来自世界各地的开源代码与寰球种子库一起存储在这座小岛上,为人类的子孙后代留下一笔难以掂量的宝贵财富。 将来如何解析出代码?那就有人放心了,千年后的人类与当初人类的认知程度必会呈现偏差,那时的人类该怎么解析出这些代码呢? 据GitHub官网阐明,在发展打算前就曾经招集了人类学、考古学、历史学、语言学等各方面的专家组成GitHub Archive Program征询小组,为解决如何与"继承者们"进行最佳的沟通曾经提出诸多计划了。在这些胶片卷轴中除了开源代码以外还会有存档的简介、其应用形式、开源利用的信息和指南以及当下这些开源我的项目的应用状况等,以防未来的读者无奈解读该文档或解读后须要从头开始重建技术。 千年太久,只争朝夕! 侥幸的是,你不必等一千年能力看小熊派的代码! 话说,1000年当前你的后辈看到你的代码当前是什么样的反馈? 点击关注,第一工夫理解华为云陈腐技术~

August 4, 2020 · 1 min · jiezi

关于github:让你的GitHub下载飞速提升到2Ms以上

2020年7月27日整顿公布多种GitHub减速形式!转载自:https://code.pingbook.top/blo... 1. GitHub 镜像拜访这里提供两个最罕用的镜像地址: https://github.com.cnpmjs.orghttps://hub.fastgit.org也就是说下面的镜像就是一个克隆版的Github,你能够拜访下面的镜像网站,网站的内容跟Github是残缺同步的镜像,而后在这个网站外面进行下载克隆等操作。 2. GitHub文件减速利用 Cloudflare Workers 对 github release 、archive 以及我的项目文件进行减速,部署无需服务器且自带CDN. https://gh.api.99988866.xyzhttps://g.ioiox.com 以上网站为演示站点,如无奈关上能够查看开源我的项目:gh-proxy-GitHub 文件减速自行部署。 3. Github 减速下载只须要复制以后 GitHub 地址粘贴到输入框中就能够代理减速下载! 地址:http://toolwa.com/github/ 4. 减速你的 Githubhttps://github.zhlh6.cn 输出 Github 仓库地址,应用生成的地址进行 git ssh 操作即可 5. 谷歌浏览器GitHub减速插件(举荐) 谷歌浏览器Github减速插件.crx 下载 百度网盘: https://pan.baidu.com/s/1qGiI...,提取码:stsv 如果能够间接拜访谷歌商店,能够拜访GitHub 减速谷歌商店装置。 6. GitHub raw 减速GitHub raw 域名并非 github.com 而是 raw.githubusercontent.com,上方的 GitHub 减速如果不能减速这个域名,那么能够应用 Static CDN 提供的反代服务。 将 raw.githubusercontent.com 替换为 raw.staticdn.net 即可减速。 7. GitHub + Jsdelivrjsdelivr 惟一美中不足的就是它不能获取 exe 文件以及 Release 处附加的 exe 和 dmg 文件。 ...

July 28, 2020 · 1 min · jiezi

关于github:写博客必备神器打造稳定快速高效免费图床真香

明天和大家分享一下我在写博客的时候遇到的问题,在我写博客的时候图片这么去治理。所以本人最近搭建了一个收费的图床,感觉还是挺好用的,心愿对小伙伴们有帮忙。 那我为什么应用GitHub 搭建图床呢?,重要的是应用起来不便,高效,收费呀,因而,GitHub图床是个不错的抉择,利用jsDelivr CDN减速拜访(jsDelivr 是一个收费开源的 CDN 解决方案),PicGo工具一键上传,操作简略不便,也不必放心速度和容量问题,而且完全免费,能够说是目前收费图床的最佳解决方案! 搭建图床搭建须要大家首先筹备的工作: 1、首先申请一个GitHub 账号,Github地址,申请账号流程就不一一说了,置信小伙伴们是能够本人搞定的(这个和个别创立账号的流程是一样的)。 2、新建GitHub仓库生成Token 点击Create repository 创立仓库,页面仓库展现 点击Generate token,切记把这个生成的token 拷贝一次 3、下载PicGo配置参数: 下载PicGO,装置胜利,点开软件进行配置 设定仓库名:【用户名/图床仓库名】即(zhangfu1111/Blogimagemanager) 设定分支名:【master】 设定Token:拷贝GitHub上生成的【Token】 指定存储门路:填写想要贮存的门路,如【images/】,这样就会在仓库下创立一个名为images/的文件夹,图片将会贮存在此文件夹中 设定自定义域名:它的的作用是,在图片上传后,PicGo会依照【自定义域名+上传的图片名】的形式生成拜访链接,放到粘贴板上,因为咱们要应用jsDelivr减速拜访,所以能够设置为【https://cdn.jsdelivr.net/gh/用户名/图床仓库名 】,如 https://cdn.jsdelivr.net/gh/zhangfu1111/Blogimagemanager到此咱们曾经把图床环境搭建实现,这时候咱们能够上传图片(PicGo上传快捷键:ctrl+shift+P),如何应用呢? 例如咱们用微信截图,截完图按ctrl+shift+P键,图片就会主动上传到咱们创立的仓库外面了,而后复制图片的连贯,就能够把图片 引入到Markdown (Typora下载链接:https://pan.baidu.com/s/10v9m... 提取码:mmhw),编辑器当中了,还能够开启以下这个性能。间接复制。 PicGo上传失败起因总结: 1、项目名称中存在空格 ,即zhangfu1111/ Blogimagemanager 2、工夫戳重命名未开启。 好了,这就是明天和小伙伴们分享的收费搭建本人的图床,写博客的小伙伴,能够试试哦。很不错的哦。 我是阿福,公众号「阿福聊编程」作者,对后端技术放弃学习爱好者,我会常常更新JAVA技术文章,在进阶的路上,共勉!

July 27, 2020 · 1 min · jiezi

关于github:写博客必备神器打造稳定快速高效免费图床真香

明天和大家分享一下我在写博客的时候遇到的问题,在我写博客的时候图片这么去治理。所以本人最近搭建了一个收费的图床,感觉还是挺好用的,心愿对小伙伴们有帮忙。 那我为什么应用GitHub 搭建图床呢?,重要的是应用起来不便,高效,收费呀,因而,GitHub图床是个不错的抉择,利用jsDelivr CDN减速拜访(jsDelivr 是一个收费开源的 CDN 解决方案),PicGo工具一键上传,操作简略不便,也不必放心速度和容量问题,而且完全免费,能够说是目前收费图床的最佳解决方案! 搭建图床搭建须要大家首先筹备的工作: 1、首先申请一个GitHub 账号,Github地址,申请账号流程就不一一说了,置信小伙伴们是能够本人搞定的(这个和个别创立账号的流程是一样的)。 2、新建GitHub仓库生成Token 点击Create repository 创立仓库,页面仓库展现 点击Generate token,切记把这个生成的token 拷贝一次 3、下载PicGo配置参数: 下载PicGO,装置胜利,点开软件进行配置 设定仓库名:【用户名/图床仓库名】即(zhangfu1111/Blogimagemanager) 设定分支名:【master】 设定Token:拷贝GitHub上生成的【Token】 指定存储门路:填写想要贮存的门路,如【images/】,这样就会在仓库下创立一个名为images/的文件夹,图片将会贮存在此文件夹中 设定自定义域名:它的的作用是,在图片上传后,PicGo会依照【自定义域名+上传的图片名】的形式生成拜访链接,放到粘贴板上,因为咱们要应用jsDelivr减速拜访,所以能够设置为【https://cdn.jsdelivr.net/gh/用户名/图床仓库名 】,如 https://cdn.jsdelivr.net/gh/zhangfu1111/Blogimagemanager到此咱们曾经把图床环境搭建实现,这时候咱们能够上传图片(PicGo上传快捷键:ctrl+shift+P),如何应用呢? 例如咱们用微信截图,截完图按ctrl+shift+P键,图片就会主动上传到咱们创立的仓库外面了,而后复制图片的连贯,就能够把图片 引入到Markdown (Typora下载链接:https://pan.baidu.com/s/10v9m... 提取码:mmhw),编辑器当中了,还能够开启以下这个性能。间接复制。 PicGo上传失败起因总结: 1、项目名称中存在空格 ,即zhangfu1111/ Blogimagemanager 2、工夫戳重命名未开启。 好了,这就是明天和小伙伴们分享的收费搭建本人的图床,写博客的小伙伴,能够试试哦。很不错的哦。 我是阿福,公众号「阿福聊编程」作者,对后端技术放弃学习爱好者,我会常常更新JAVA技术文章,在进阶的路上,共勉!

July 27, 2020 · 1 min · jiezi

关于github:我在-GitHub-上发现了一款骚气满满的字体

本文转自量子位,作者栗体,如有侵权,则可删除。 这个字体叫 Leon Sans,外表看去平平无奇。 但事实上,它并不是一般的字体,体内蕴藏着魔力。 Leon Sans 最特地的中央在于,字体是由代码形成的。有了这些代码,它能够随便变身。 比方,在暗夜里闪耀出七色的光影: 比方,在春天里枝繁叶茂,花也开好了: 比方,雨点打在地上汇成了河: 形态 (Shapes) 、成果 (Effects) 、动画 (Animations) ,特技丰硕任君抉择。 魔法字体,是名叫 Jongmin Kim 的韩国小伙伴,为了庆贺宝宝诞生而设计的。 不过,这不是独乐乐,是普天同庆:代码开源了,GitHub 曾经有 6200 星。 除此之外,有线上 Demo 能够游玩。 都能怎么玩最根本的操作,就是扭转粗细 (Weight) 。 不止给规范字体调粗细,也给炫彩的艺术字调粗细: 而后,加大一点难度,让字体瑟瑟发抖。就是把线条变得波折。 稍稍不平坦,就会轻微的抖动。激烈的弯折,就是触电了,烧糊了: 拔电,再也不动了。 不过还好,能够棘手把它埋在春天里 (误) : 当然,埋法不止这一种。 也能够把字母截断,变成粉红色的 “多米诺骨牌”,每张牌的宽窄还能自由选择: 还能够让文字看上去,在平静中流淌: 线上 Demo 的性能一共十几种,大家也能够本人试一下: 如果,Demo 还不能满足你的设想,那就去食用代码吧: 字体是代码组成的文本有代码示意:text,字体大小有代码示意:size,粗细有代码:weight,字间距有代码示意:tracking…… 另外,每一种特技都有各自的代码,也都有能够调节的参数。 比方,瑟瑟发抖叫做 wave,抖动频率用 fps 来调。 只有用这一串代码,就能够把灵动的字体,在 H5 上显示了: ...

July 23, 2020 · 1 min · jiezi

关于github:编程小白用了3年在-Github-斩获-90k-Star-聊聊学习编程的正确姿势

我是Guide哥,一Java后端开发,半个全栈,自在的少年。 如果你看到这篇文章,祝贺你!不论是初入编程畛域的小白,还是曾经在工作几年的新手,这篇文章都将对你有很大的帮忙。倡议看到最初。置信我!肯定会有收货。 这篇文章我会试着给你带来一个更加不一样的编程能力进步实战指南。如果你感觉这篇文章对你有用的话,也不要白嫖好吧!点个在看或者赞就是对我最大的激励。欢送转发让更多人看到这篇文章,一起变强! 先来说一下本人的状况!我从小学就开始接触电脑,不过到了大学之后才接触编程,整个大一都很迷茫,编程很少,也不晓得如何进步本人的编程能力。大二的时候,本人退出了学校的一个技术组织,自此之后,便真正开启了本人疯狂的大学自学编程之路。 自学编程路上,Github 相对对我帮忙最大。 我在大二就开始接触 Github 了,过后就感觉下面有太多不错的学习资源了。到了大三下学期,本人就想着说要不也尝试着做一下开源呗!而后,我就从比拟好动手的 Java 学习和面试指南动手。 到目前未知,我的所有的开源我的项目累计靠近 90k star,并且播种了 4.6k 的关注。 说到 Github 其实也挺羞愧的!因为我的大部分我的项目都没有提供英文版本。实际上,如果你要做开源的话,本着开源精力,最好能有一份英文翻译版。 好的!上面咱们就开始注释!想要本人编程变得更强的小伙伴记得多记笔记。 1. 抉择一个适合的电脑学习编程前至多要有一个略微适宜一点的电脑吧! 对于电脑抉择,我感觉不要纠结是买 Mac 还是 Windows。作为一个应用了 Windows 开发 4 年,Mac 开发一年的人主观地说,两者对于编程效率的影响没有你想的那么大。特地是在你初学编程的阶段,是齐全没太大区别的。 Mac 的性价比更低,一台合格的 Mac 开发本 1 万 2 起步。尽管它的确好一些,然而抉择电脑的时候还是要依据本人理论经济状况来决定。 另外,肯定不要抉择内存低于 8g 的电脑,有条件的话最好能 16g。 2. 六个黄金准则很多人可能会感觉说,咱们学习编程,首先是要找一门编程语言好好开始学,比方我在上大学的时候最开始接触的是 C 语言。 我感觉非也!就我本人作为一个从大学自学编程一路一路踩坑的过来人来说,我感觉学习编程第一步应该是要搞清楚学习编程有哪些必备的网站?咱们是如何查资料的?咱们是如何解决问题的?国内外有哪些技术社区比拟好?...... 首次之外,你还要搞明确学习编程不是加入应试考试。 2.1. 理解常见的学习编程网站理解学习编程有哪些必备的网站之后,你能力更好地进行自学。 个别状况下,但但凡初学编程的同学,往往都须要课后进行继续学习的。一是因为你可能刚学编程,老师教的货色你听不明确。二是因为程序员这个行业自身就须要一直学习。三是因为大学外面教的货色往往和社会理论须要脱节,只有自学才能够让你技术和社会不脱节。 举荐几个我罕用的学习编程的网站: a.中国大学 Mooc 下面有很多名校的课程和国家精品课程比拟适宜咱们夯实编程根底。比方下图是南京大学的一门对于软件工程的大学选修课。 b.慕课网 下面有很多比拟适宜入门的收费课程。另外,如果你须要实战我的项目视频资源的话,也能够在慕课网找到(慕课网打钱!!!)。 c.哔哩哔哩 是的,你没看错!看 B 站也能学习!B 站下面有很多优良的学习资源以及优良的 UP 主比方 Guide 哥。 ...

July 21, 2020 · 2 min · jiezi

关于github:使用github-action同时部署hexo到github和coding最优雅的方式

原文发于我的博客和公众号:“Noosphere博客”,“智圈云公众号”,理解相干信息能够关注“智圈云”指标咱们晓得应用github action 能够很简略的部署hexo的动态文件到github pages,然而如果在国内咱们心愿部署到github pages同时也部署到coding,而后通过dns双线路由,另外,咱们可能有多个账号,比方公司的和集体的博客或者网站,也是同时部署到coding和github,那就这个github action解决不了,上面咱们革新一下,使其达到这个指标: hexo的source寄存在独立库生成的动态文件存在独立的库提交markdown文件后,主动生成动态文件主动部署到github pages主动部署到coding同一份hexo source库,只须要配置一次hexo的_config.yml,就能够间接通过hexo deploy -g 或者git push来触发部署反对多个github账号,同时也反对多个coding账号配置hexo的deploy找到hexo根目录的_config.yml,而后配置deploy字段的内容如下 deploy: type: 'git' repo: github: 'git@noosphere-coder.github.com:noosphere-coder/noosphere-coder.github.io.git' coding: 'git@e.coding.net:noosphere/noosphere.git' branch: 'master'这个配置指标是让咱们间接hexo deploy能够同时推送到 github 和 coding 的 pages 仓库 配置 hexo deploy命令反对多个github和coding账号一般来说,如果我只有一个github的账号,在这个配置下间接执行hexo g -d,一个命令就能够间接实现两个仓库的部署了。 那么如果咱们的github账号有多个,比方有一个办公用的,一个私人的,那怎么办?咱们晓得 git 的 ssh 推送形式是须要应用特定的 key 的, 所以,咱们只须要配置 ssh 来路由特定的域名到key即可. 依据需要,在配置这个ssh key的路由之前,咱们要学生成一个key用于做pages部署 ssh-keygen noosphere-coder而后一路回车就行(不须要太强的安全性的话),生成后key在/home/$USER/.ssh/目录下 为了这个key能够推送到github或者coding的独立账号,咱们须要把这个key退出到github和coding的账号,比方我新建了一个noosphere-coder的github账号,那么我把这个noosphere-coder的ssh key作为这个账户的ssh key即可,关上[https://github.com/settings/keys](https://github.com/settings/keys),点击 New SSH key减少即可,退出后,咱们就能够用这个key来操作这个github账号了(coding也相似)。 接下来,咱们用这个key来配置ssh key的路由,达到执行git push命令的时候主动应用不同的key: cat << EOF > /home/$USER/.ssh/configHost github.com HostName github.com PreferredAuthentications publickey IdentityFile /home/$USER/.ssh/id_rsaHost noosphere-coder.github.com HostName github.com PreferredAuthentications publickey IdentityFile /home/$USER/.ssh/noosphere-coderHost e.coding.net HostName e.coding.net PreferredAuthentications publickey IdentityFile /home/$USER/.ssh/id_rsa Host noosphere-coder.coding.net HostName e.coding.net PreferredAuthentications publickey IdentityFile /home/$USER/.ssh/noosphere-coderEOF这个配置通知ssh,如果碰到Host为noosphere-coder.github.com或者noosphere-coder.coding.net的时候就去应用/home/$USER/.ssh/noosphere-coder这个key ...

July 20, 2020 · 3 min · jiezi

关于github:GitHubcom访问不了

首先看看网络有没有问题cmd窗口中输出 ping www.baidu.com证实网络没问题 再试一下githubcmd窗口中输出 ping github.com因而狐疑是:本地DNS无奈解析导致的 解决办法关上C:\Windows\System32\drivers\etc\hosts,在最初加上 192.30.255.112  github.com git  185.31.16.184 github.global.ssl.fastly.netCtrl + S 保留从新ping 一下github.com 全副搞定!

July 20, 2020 · 1 min · jiezi

GitHub-把代码埋到北极已将首批开源项目存入地下-250-米永久冻土层

技术编辑:芒果果丨发自 思否编辑部SegmentFault 思否报道丨公众号:SegmentFault “把开源代码在北极保留 1000 年!”去年,GitHub 颁布了一项代码存档打算——Arctic Code Vault,要把代码埋入北极公开 250 米深的永恒冻土层,心愿将代码保留一千年。 当初,这不只是一个边远的幻想了,GitHub 曾经把采集到的沉闷公共存储库快照保留到了位于北极的数据仓库,以备来世之用。此外,GitHub 还为开发者在配置文件中设计了留念徽章。 GitHub 代码永恒保留打算启动在 GitHub 环球2019开发者大会上,GitHub 首席执行官 Nat Friedman 首次介绍了 GitHub 存档程序,他说:“在这个平台上,代码应该存储在北极的一个档案中,用胶片卷起来,供前人应用。”过来几个月,GitHub 与 Piql(长期数字存储提供商)单干,将 21 TB 的 GitHub 存储库数据写入了 186 卷的 piqlFilm 数字光感档案胶片中。 开发人员和开发人员的代码创立的快照当初在存档中,当初能够在他们的GitHub配置文件上看到相应的徽章,据说,取得一个 Star 用户就能够点亮徽章,开发者奉献的相应存储库会通过悬浮窗显示进去。 GitHub 在每个存储的卷轴上都增加了一个 GitHub 代码库指南,这个由社区输出编写的语句也能够在归档程序的相关联的文章中查找到。 档案中还蕴含一个独自的胶卷,其中以书面形式解释了档案内容的历史和文化背景。所谓的技术树旨在提供古代软件开发、开源和各种应用程序以及风行编程语言的具体介绍。 此外,存储档案中还包含解释发明微处理器、网络、电子、半导体和前工业技术的技术条件的著述。其目标是使档案的继承人尽可能全面地理解当今的技术可能性。 GitHub 打算公布档案库中的第一个作品列表,同时征求社区的意见、倡议和反馈。 埋藏在北极 250 米冻土层下的开源代码,将保留千年去年,Github 为了爱护开源代码,发表了这项代码存档打算,并发表在往年 2 月 2 日正式启动将此前的开源代码以 QR 码的模式存储在胶片里,并将这些胶片寄存在挪威斯瓦尔巴特一座已废除的矿井里。 斯瓦尔巴群岛的一个服役煤矿中,比北极圈更凑近北极。Arctic Code Vault 数据存储库就位于这个北极公开 250 米深的永恒冻土层。 Github 认为,存储在古代设施中的信息在几代之后很可能会隐没,因而须要用不同的模式和平台进行存储备份,留存于后世。 ...

July 17, 2020 · 1 min · jiezi

GitHub-两周内第二次服务中断原因竟然是服务器被盗

技术编辑:徐九丨发自 思否编辑部 GitHub 在两周内呈现了第二次服务中断,这次继续了大概 4 个小时。 据微博博主 @shijin1 音讯,微软针对此次 GitHub 服务中断发邮件进行了回复,称通过排查发现,此次服务中断的起因是因为疫情的影响,其各地服务器均有被盗走的景象。微软还称曾经全力对服务器进行追回,心愿可能尽快找回服务器与数据。 在两周前的 6 月 29 日,GitHub 也产生了相似的两小时服务器中断问题,官网过后并未解释具体起因。此次的服务器被盗事件暂不能 100% 确认,但截至发稿工夫,GitHub 官网尚未申明具体起因。 GitHub 是目前治理、开发和存储源代码的最大服务平台,苹果、谷歌、亚马逊和 Facebook 等公司都在应用该服务。2018年,微软早以 75 亿美元的价格收买了 GitHub,并始终在逐渐改善对开发者的服务,截止 2019 年底,GitHub 用户数量达到 4100 万。 往年 4 月,GitHub 官网发布公告示意向所有团队收费凋谢外围性能。无论是集体收费账户还是商业我的项目团队,都可拜访 GitHub 的有限公有存储库。

July 13, 2020 · 1 min · jiezi

GitHub-JavaScript-趋势榜项目第29周

2020年7月6日-2020年7月13日1. vuejs/vue我的项目地址:https://github.com/vuejs/vue stars:167834 | forks:25552 | 730 stars this week Vue.js是一个渐进的,可逐渐采纳的JavaScript框架,用于在Web上构建利用。 2. GitSquared/edex-ui我的项目地址:https://github.com/GitSquared/edex-ui stars:14910 | forks:905 | 1875 stars this week 具备高级监控和触摸屏反对的跨平台,可定制的科幻终端仿真器。 3. gothinkster/realworld我的项目地址:https://github.com/gothinkster/realworld stars:43946 | forks:3572 | 690 stars this week "The mother of all demo apps" - 由React、Angular、Node、Django等提供反对的克隆版,堪称榜样 ???? 4. trekhleb/javascript-algorithms我的项目地址:https://github.com/trekhleb/javascript-algorithms stars:74720 | forks:12653 | 780 stars this week ???? 用JavaScript实现的算法和数据结构,并带有解释和进一步浏览的我的项目 5. facebook/react我的项目地址:https://github.com/facebook/react stars:152017 | forks:29704 | 642 stars this week 用于构建用户界面的申明式、高效和灵便的JavaScript库。 6. cypress-io/cypress我的项目地址:https://github.com/cypress-io/cypress ...

July 13, 2020 · 2 min · jiezi

GitHub上40Kstar的宝藏级SpringBoot核心文档看完献出膝盖

SpringBoot 以其轻量级、内嵌 Web 容器、一键启动、不便调试等特点被越来越多的微服务实践者所采纳。然而知其然还要知其所以然,本 Chat 就来解说 SpringBoot 外围模块的实现原理,在面试的时候也是会被常常问到的,核心内容次要包含: spring-boot-load 模块,失常状况下一个类加载器只能找到加载门路的 jar 包外面当前目录或者文件类外面的 *.class 文件,SpringBoot 容许咱们应用 java -jar archive.jar 运行蕴含嵌套依赖 jar 的 jar 或者 war 文件,那么 SpringBoot 是如何实现的?spring-boot-autoconfigure 模块,Spring的呈现给咱们治理 Bean 的依赖注入提供了便捷,然而当咱们须要应用通过 pom 引入的 jar 外面的一个 Bean 时候,还是须要手动在 XML 配置文件外面配置。Springboot 则能够根据 classpath 外面的依赖内容主动配置 Bean 到 Spring 容器。spring-boot 模块,提供了一些个性用来反对 SpringBoot 中其它模块,本文会解说到该模块都提供了哪些性能以及原理。那么学习SpringBoot就没有一个正确的路线吗,这里小编就要给大家分享一个神仙级SpringBoot外围笔记了,图文并茂,非常适合有须要学习SpringBoot的敌人!因为篇幅起因,有须要SpringBoot外围笔记残缺文档可在文末获取收费支付形式! 话不多说,看目录 一、Spring Boot 入门 二、配置文件 三、日志 四、Web开发 五、Docker 六、SpringBoot与数据拜访 七、启动配置原理 因为篇幅起因,有须要SpringBoot外围笔记残缺文档扫 即可获取材料收费支付形式!

July 10, 2020 · 1 min · jiezi

Github-Daily-Taro-实战网易云音乐项目

电鸭社区-远程工作-自由职业-兼职外包-自由从这开始 嗨,我是 Martin,也叫老王。今天推荐一个 React 实战项目,使用的是京东的 Taro 框架。 TaroGithubhttps://github.com/NervJS/taro watch 688star 26.2kfork 3.2k简介Taro 是一套遵循 React 语法规范的 多端开发 解决方案。 现如今市面上端的形态多种多样,Web、React-Native、微信小程序等各种端大行其道,当业务要求同时在不同的端都要求有所表现的时候,针对不同的端去编写多套代码的成本显然非常高,这时候只编写一套代码就能够适配到多端的能力就显得极为需要。 使用 Taro,我们可以只书写一套代码,再通过 Taro 的编译工具,将源代码分别编译出可以在不同端(微信/百度/支付宝/字节跳动/QQ小程序、快应用、H5、React-Native 等)运行的代码。 特性支持多种框架Taro 目前支持 React、Nerv、Vue 三类框架,在未来 Taro 将开放拓展能力,使得开发者可以通过 Taro 拓展更多的框架支持。 快速开发微信小程序Taro 立足于微信小程序开发,众所周知小程序的开发体验并不是非常友好,比如小程序中无法使用 npm 来进行第三方库的管理,无法使用一些比较新的 ES 规范等等,针对小程序端的开发弊端,Taro 具有以下的优秀特性 ✅ 支持使用 npm/yarn 安装管理第三方依赖 ✅ 支持使用 ES7/ES8 甚至更新的 ES 规范,一切都可自行配置 ✅ 支持使用 CSS 预编译器,例如 Sass 等 ✅ 支持使用 Redux 进行状态管理 ✅ 支持使用 MobX 进行状态管理 ✅ 小程序 API 优化,异步 API Promise 化等等 ...

July 8, 2020 · 1 min · jiezi

GitHub-JavaScript-趋势榜项目第26周

1. tobspr/shapez.io项目地址:https://github.com/tobspr/shapez.io ⭐:642 | forks:180 | 218 stars this week shapez.io 是一个受 factorio 启发的开源的用于构建游戏的基础平台! 在网络和桌面上可用。 2. twbs/bootstrap项目地址:https://github.com/twbs/bootstrap ⭐:141874 | forks:69102 | 523 stars this week 最受欢迎的HTML,CSS和JavaScript框架,用于在开发开发响应式,移动优先项目。 3. iptv-org/iptv项目地址:https://github.com/iptv-org/iptv ⭐:17695 | forks:2674 | 764 stars this week 收集来自世界各地的8000多个公共IPTV频道 4. microsoft/playwright项目地址:https://github.com/microsoft/playwright ⭐:14332 | forks:449 | 527 stars this week Node库,可通过单个API自动化Chromium,Firefox和WebKit 5. Ameobea/robintrack项目地址:https://github.com/Ameobea/robintrack ⭐:375 | forks:90 | 81 stars this week 抓取Robinhood API来检索+存储流行度和价格数据。 6. ianramzy/decentralized-video-chat项目地址:https://github.com/ianramzy/decentralized-video-chat ⭐:2778 | forks:288 | 293 stars this week ...

June 22, 2020 · 2 min · jiezi

解决github下载慢的问题

下载项目源码一般的下载方式在浏览器打开一个Github项目的主页,想要对源码进行下载,普通的下载方式如下图所示。 首先点击图片左上角的“Branch”按钮来选择分支,一般默认情况下使用“master”分支即可。点击图片右上角位置绿色的“Clone and download”按钮。在新出来的选项卡中点击“Download ZIP”。执行完这三步之后浏览器会自动开始下载。 但是这种方式下载通常速度较慢,往往只有几k每秒。可以通过以下两种方式进行解决。 使用git工具进行下载这种方式并不是很快,一般情况下在几十k每秒,偶尔能到几百k。 安装git工具。安装方法请点这里).打开git工具的终端。通常只要在系统安装的程序里搜索git,然后选择git Bash进行打开。在git终端中利用cd命令到想要存放源码的文件夹。在终端中执行cd XXX,XXX表示文件夹的路径。点击下图中的黄色箭头,复制红色框中的地址。在git终端执行git clone XXX,XXX代表刚才复制的地址。本例中,就是执行git clone https://github.com/romkatv/powerlevel10k.git。 将项目复制到码云,然后下载进入码云首页,注册账号。点击下图中右上角红色方框中的加号,选择“从Github/GitLab”导入仓库,界面如下图所示。在“Git 仓库 URL”一栏,将想要导入的Github仓库地址放进去。仓库地址的获取参考上一张图。然后选择是否开源。点击导入。从码云下载导入后的项目。下载方法与从Github下载类似,具体请参考上文所述。 下载releases中作者编译好的文件有些程序,作者会预先编译好一些版本以供下载。这些文件放在releases中。如下图所示。但是由于Github的releases被部署在了亚马逊的云上,国内访问速度极慢且不稳定,通常下不下来。以下步骤可以解决此问题。 获取待下载文件的地址。以上图中红色框中的文件为例,在谷歌浏览器汇中,可以通过右击--复制链接地址获得。打开网站https://d.serctl.com/。将刚刚复制的地址粘贴到“下载地址一栏”,点击提交。待下载完成后在下方的列表中找到对应文件下载即可。PS:下载时使用迅雷下载比使用浏览器下载要快。

June 21, 2020 · 1 min · jiezi

键盘侠Linux干货-使用SSH方式推送文件至github仓库

前言作为一名优秀的计算机从业人员,相信大家github应该都知道吧。(优秀的代码托管工具) 但是由于平常使用的https方式克隆的本地仓库,每次git push时都需要输入帐号密码才能将我们修改的文件推送至远程仓库非常的不方便,由于mk是比较懒的人,不想每次都敲键盘输密码。 所以,我想配置一下github的无密码推送文件(也可以称为SSH证书推送)。 配置SSH生成SSH密钥对ssh-keygen -t rsa -C "youremail@example.com"会生成两个文件 私钥文件:/ylighgh/.ssh/id_rsa公钥文件: /ylighgh/.ssh/id_rsa.pub查看公钥这里的公钥我们等会用到的,先粘贴在我们的剪切板上 cat ~/.ssh/id_rsa.pub 在github上配置SSH 添加完成之后点击 Add SSH key ,Github和主机之间的SSH配对完成 添加完成可在终端执行 ssh git@github.com 验证是不是添加成功 github远程仓库文件拉取至本地克隆仓库到本地使用 git clone克隆仓库到本地 P.S:这里使用SSH方法 推送文件至github远程仓库创建文件初始化git仓库 git init (进入到项目目录中执行) 创建一个a.test的文件 touch a.test 提交到暂缓区 git add . && git commit -m 'test' 推送文件到远程仓库使用git push命令 由于github服务器在国外,我这里使用了一个代理方式推送文件,但我们可以看到,使用SSH方式推送文件是不需要我们输入用户名密码,这就达到了我的目的,偷懒~~。 注意事项git commit时出现下面情况,验证你的github邮箱和github用户名 写在最后如果文档对你有帮助的话,留个赞再走吧 ,你的点击是我的最大动力。 我是键盘侠,现实中我唯唯诺诺,网络上我重拳出击,关注我,持续更新Linux干货教程。 更多键盘侠Linux系列教程:链接地址 更多Linux干货教程请扫:(回复 干货)

June 21, 2020 · 1 min · jiezi

SVN-向-GIT-进行转换如何拉取指定版本后的提交

很多时候,我们不需要拉取所有的内容,我们可以拉取指定版本后的内容。 你可用使用参数:-r8000:HEAD 例如使用下面的命令: git svn clone https://svn.code.sf.net/p/docutils/code/trunk docutils -r8000:HEAD可以拉取 8000 版本以后的提交记录。 对于一些项目老的提交版本过多的话,使用这个命令可以将以前老的提交全部都忽略掉。 能够加快速度。 https://www.ossez.com/t/svn-git/187

June 20, 2020 · 1 min · jiezi

最新的原生-GitHub-仓库迁徙方法实测有效

为何要用迁徙功能:其实直接上传本地的代码到新的仓库,也能实现保存最新代码的效果;新建各种分支也能和原仓库一致。 关键是要保留代码的提交记录,以便后续的整理和回滚。 GitHub 自带了一个仓库迁徙功能,原理是复制一个仓库,然后用户可以手动清空原仓库 迁徙目标:保留所有代码保留所有分支保留所有分支的提交记录事前准备:更新远程仓库所有分支的代码到最新版本如果是私密仓库,且要交由另一个不是仓库协作成员的同事来负责迁徙,要将他添加到当前仓库协作成员列表,详情可查看我的另一篇文章开始迁徙:1、新建 github 仓库新建 github 仓库,选择“公开”或者“私密”类型 2、导入原仓库代码点击底部的 “Import code” 按钮 会到这个页面 在新标签页打开旧仓库页面,复制地址栏的 URL (注意不是 Clone or download 按钮的那个地址),粘贴到上面页面的输入框,点击“Begin import”,会开始自动执行迁徙(或者说复制)操作: 3、弹窗输入期间,根据原来仓库的安全设置,可能会弹窗要求输入 github 的账号密码: 4、检查新仓库远程仓库复制完毕,可以直接点击红框处跳转新仓库。 可以随意切换分支,查看 commit 历史。 记得点击 ”Star“,免得之后找不到它。 5、重新添加仓库的协作人员6、本地仓库更新远程仓库地址如果使用 Sourcetree 等客户端,可以在设置里修改;如果使用 GitBash 命令行,可以输入: git remote set-url origin 仓库地址完成后,所有分支都会自动对接上远程分支,可以随意 checkout 7、测试是否已切换本地代码随意修改一下,push 到远程仓库查看效果即可。 8、清空原仓库新仓库检测无误后,可以清空原仓库

June 18, 2020 · 1 min · jiezi

团队合作-git提交

一、约定代码格式框架1.负责人创建一个大体框架,规定用法,配置项,划分模块,确定每个人的任务 2.约定之后,将主框架以mater的身份,提交到master分支上 git commit -m "文件名"(master身份提交)二、组员拉取代码以及提交1.组员拉取 负责人上传了master上的代码 (也就是主框架) 命令 git pull origin master2.组员在拉取下来的主框架里完成各自相对应的模块3.完成之后 在自己的分支上,提交 命令 git add . git commit -m "名字" (后续提交的时候 ,名字都要一样,提交上去会覆盖以前的,也就是更新) 三、负责人合并1.待组员提交代码之后,负责人合并代码2.负责人将分支切换到master分支上 操作 git checkout -b master 3.开始合并代码 操作 git merge 分支名 假如 你的成员分支名有 big small red git merge big 那就一个一个merge (在这个过程中会有冲突,就解决完一个再合并下一个) 紫色代表文件里有冲突(如图) 之后打开紫色文件里 会显示冲突代码(点击红色报错线,会出现修改方式) 四种情况(如图) 采用当前修改|采用传入的更改|保留双方更改|比较变更(根据代码所需自行修改) 四、合并后提交1.合并以后,继续执行git add 2.git commit -m "文件名" 五、继续更新代码1.小组成员将合并的代码,git pull origin master再拉取一遍(更新) 2.拉取好,在更新了的文件中继续写之后的代码

June 18, 2020 · 1 min · jiezi

钉钉机器人自动关联-GitHub-发送-approval-prs

摘要:用技术来解决 PM 枯燥的 approval pr 工作,本文将阐述如何自动化获取 GitHub Organization 下各个 repo 待 merge 的 pull requests 并通知相关人员,告别每日的手动操作。 在日常工作中,你是否遇到以下场景: Github 存在多个 repo,日常工作中需要一个个地手动筛选大量待 merge 的 pull requests要找出多个 repo 中 ready to review 的 pull requests,要手动筛选,然后一遍又一遍地粘贴复制提交 dev 进行 review #倍感无聊想自动推送 GitHub 待 merge 的 prs,GitHub Webhooks 却没有该 Event……用技术来解决 PM 枯燥的 approval pr 工作,本文将阐述如何自动化获取 GitHub Organization 下各个 repo 待 merge 的 pull requests 并通知相关人员,告别每日的手动操作。此文主要提供了解决自动发送 approval prs 的思路,并以钉钉群和 Slack 为例,给出了其 Python 的实现方式,如果你使用其他通讯工具,实现原理是相通的。 ...

June 17, 2020 · 3 min · jiezi

?-优雅的保持你的依赖库版本安全最新

可能大部分前端开发者都会有过这样的“懒癌”想法:如果我的 package.json 中的依赖库能自动升级版本号就好了 ?。 依赖库的更新可能会带来新的功能特性,或者解决了正遇到的一个棘手的问题、甚至是修复了重要的安全漏洞。通常来说,依赖库的升级会给我们带来更多的收益。所以我们需要一个能帮助我们管理依赖库的工具,dependabot 的出现,就解决了依赖库版本管理的难题。 遇见 DependaBotDependabot 是一个 GitHub 工具,通过创建 Pull Requests (PR)来让你的项目依赖保持最新并且安全。并且支持多种语言,也可用于 GitLab。 我第一次遇见 dependabot 是在 2018 年底,我在查看一个 GitHub 库的PR时,发现了类似如下的密集的 PR 记录。 点进去看到了竟然是一个机器人?️在帮库的作者在自动提交新的版本号 PR,于是我立即在自己的一个库上测试,发现甚是好用。 DependaBot 加入 GitHub去年 5 月份,dependabot 加入了GitHub ,说实话,这个信息并不意外,前一阵我还发现 dependabot 会主动给你的很久不更新的库推送安全警告 Dependabot 已经集成在项目仓库 Security 和 Insight 面板中,它发现了我的 package-lock.json 中有这几个依赖 minimist 、acorn、kind-of 是有安全漏洞的,我们可以让 GitHub 项目接入 Dependabot,它就会自动推送给你一个 PR,直接 Merge 就解决了。多么贴心的机器人。 Dependabot 填补了 GitHub 对于开源项目的依赖库自动化安全检测的空白,这一部分功能意义是巨大的。没人希望我们的库是有安全隐患的。 Dependabot 加入 GitHub 后,带给开发者的好处就是我们可以免费使用 Dependabot 的所有功能,只能说微软 NB ? ...

June 4, 2020 · 1 min · jiezi

GitHub-上周-JavaScript-趋势榜项目

时间:2020年5月25日 ~ 2020年6月1日1. popcorn-official/popcorn-desktop项目地址:https://github.com/popcorn-official/popcorn-desktop ⭐:4686 | forks:143 | 980 stars this week Popcorn Time是一个多平台的免费软件BitTorrent客户端,其中包括一个集成的媒体播放器。 桌面版(Windows / Mac / Linux) 2. manojVivek/responsively-app项目地址:https://github.com/manojVivek/responsively-app ⭐:3052 | forks:147 | 1736 stars this week 一个修改后的浏览器,有助于响应性web开发。 3. trekhleb/javascript-algorithms项目地址:https://github.com/trekhleb/javascript-algorithms ⭐:72291 | forks:12120 | 1770 stars this week ? JavaScript实现的算法和数据结构,并带有解释和进一步阅读的链接。 4. gothinkster/realworld项目地址:https://github.com/gothinkster/realworld ⭐:41924 | forks:3371 | 1208 stars this week "The mother of all demo apps" - 由React、Angular、Node、Django等提供支持的克隆版,堪称典范 ? 5. h5bp/html5-boilerplate项目地址:https://github.com/h5bp/html5-boilerplate ⭐:45469 | forks:10842 | 492 stars this week ...

June 1, 2020 · 2 min · jiezi

GitLab-开启地域封锁之时GitHub-在中国畅谈无国界

内容导读:GitLab 发布了有关地域封锁的公告,中国被列入受限制名单。而在昨天进行的中国开源年会上,GitHub 副总裁 Thomas Dohmke 和 CSDN 创始人蒋涛进行了一场炉边对谈,他们针对技术社区的发展和开源等问题,进行了一场深度的探讨,谈到了开源不分国界的问题。作为有代表性的技术社区的两位高层,他们的交谈究竟擦出了哪些火花? 关键词:GitHub 开源 区块链 近日,GitHub 的竞争对手、全球第二大开源代码托管平台 GitLab,在其官网上发了一个声明,宣布了一个「封锁令」,一时间引起激烈讨论。 该公开声明称,遵循当前政治形势下的行业普遍做法,GitLab 决定,不会给中国/俄罗斯公民提供 offer,那些有权限访问客户数据的员工,现在也不能移居到中国或俄罗斯。 声明中,指名道姓地列出中国与俄罗斯这条声明甚至引起 GitLab 内部人员的诧异,其全球风险与合规总监也表示:「我很困惑,为什么要把这些国家单独列出来?没有哪条法律规定我们这么干吧?」 GitLab 由乌克兰程序员开发。在去年 9 月,它们获得了由谷歌母公司的投资部门谷歌风投(GV)领投的 1 亿美元融资,该轮融资让公司的估值超过了 10 亿美元。此举也让 GitLab 在与 GitHub 的竞争中增添了几分筹码。 但如今,GitLab 却因「当前政治气候」,而公开拒收来自中国和俄罗斯的工程师,不免引起了大家质疑。一个自称多元化全球化的团队,支持开源的开源代码托管平台,难道也要对员工分国界了? 就在 GitLab 封锁令引发业界广泛讨论的同时,它最大的竞争对手 GitHub 在这个方面,却选择了截然不同的态度。 中美程序员扛把子的高峰对话在昨天举行的中国开源年会 COSCon’19 上,GitHub 副总裁 Thomas Dohmke 和 CSDN 创始人蒋涛,针对开源发展做出了多个维度的探讨,在他们的对话中,Thmoas 表现出来对中国的友好度,和 GitLab 的态度大相径庭。 Thomas Dohmke (左)和蒋涛(右)在进行会谈两人的对话,涵盖了个人经历,工作经验, GitHub 的发展,以及 GitHub 和中国的联系等多个角度。这场干货满满的谈话,也成了本次开源大会上最引人注目的一个环节。 我们选取了其中的四个话题,去重现这场对谈,带领大家感受他们思想上的碰撞。 嘉宾介绍 Thomas Dohmke ,GitHub 副总裁,负责管理特殊项目、并购和国际扩张。他曾是 HockeyApp 的联合创始人兼首席执行官,该公司于 2014 年被微软收购。Thomas 通过微软的收购加入了 GitHub,并成功地完成了交易阶段。 ...

November 5, 2019 · 1 min · jiezi

同步VSCode设置及扩展插件换机不用愁

实现同步的功能主要依赖于VSCode插件“Settings Sync”。它是基于 GitHub Tokens 和 GitHub Gist 功能实现,可以一键轻松实现上传下载跨多台机器同步设置、代码片段、主题、文件图标、启动、键绑定、工作区和扩展。 有了这个技能,换电脑,换工作等就不用愁了。 配置同步下载安装插件后,会显示插件的欢迎页面 “设置同步配置”页面将在代码启动时自动打开,并且需要进行两项设置 GitHub TokenGitHub Gist Id如果您是首次用户,则GitHub帐户需要检索GitHub令牌,而Settings Sync将创建GIST。 执行的配置步骤: 点击 Login with GitHub ,登录GitHub成功后即可以自动拿到GitHub Token。登录 GitHub 成功后你将得到成功的消息。如果您是第一次使用设置同步,则在您上传设置时会自动创建GIST。如果您已经拥有GitHub Gist,则将打开新窗口,以允许您选择GitHub Gist或跳过以创建新的Gist。您始终可以通过转到https://gist.github.com并检查名为cloudSettings的gist来验证创建的gist。 也可以在这里找到Gist的入口。访问Gist需要科学上网 cloudSettings的gist就创建了,点进去查看,里面是诸如 extensions.json 等VSCode各方面的配置文件。 上传你的VSCode的配置按下 Shift + Alt + U (macOS: Shift + Option + U),也可以使用命令来选择你的操作 首次下载或上传时,欢迎页面将自动打开,您可以在其中配置“设置同步”。选择上传设置后,你将看到“摘要”详细信息,以及上载的每个文件和扩展名的列表。 这里其实也不用记下来,它会自动配置到你的扩展配置里: 每次上传配置同步会用这个创建好的ID。 下载你的VSCode的配置在另一台电脑的VSCode中,同样先也要走安装插件、登录GitHub的步骤,登录成功后会列出你的所有的Gist,点击这个配置同步的Gist 点击后会弹出一个提示 点击CLOSE TAB,然后VSCode就会开始下载你的配置信息。 慢慢等待下载完成,完成后重启VSCode,你就可以看到新电脑上的VSCode插件、配置信息等全部装好了。 GitHub Gist 是什么?扩展一下,GitHub Tokens 你应该知道是什么把,Gist又是什么呢?Gist 是 GitHub 提供的一个有趣的服务,最简单的功能就是分享代码片段,但是 gist 提供的功能不仅限于此。 ...

November 5, 2019 · 1 min · jiezi

如何使用IDEA创建项目并且上传到GitHub

在 GitHub中 注册创建账号 :https://github.com下载安装 Git : https://git-scm.com安装成功后打开 Git Bash,输入下列命令,设置 Git 全局用户名和邮箱。 安装完成后,打开 Git Bash 控制台,进行如下设置 :git config --global user.name "你的用户名称" # 请换成自己的名字 git config --global user.email "你的邮箱名称" # 请换成自己的用户名 继续在Git Bash控制台,设置 SSH Key : ssh-keygen -t rsa -C "你的用户名称" # 请换成自己的名字 然后一路回车,不要输入任何密码之类,生成 ssh key pair。会在 C 盘生成目录.ssh ,里面有两个文件:id_rsa (私钥), id_rsa.pub(公钥)。 打开 GitHub 页面,右边点击头像选择 Settings ---> SSH and GPG keys,然后点击 New SSH Key,将公钥的内容复制填写进去。写上 title 。注意:需要 copy 公钥最开头的 “ssh-rsa ” 这几个字。 ...

November 4, 2019 · 1 min · jiezi

转hexo博客yili主题个性化自定义教程1-借鉴中学习初认yili主题

文章转载于:hexo博客yili主题个性化自定义教程(1) ——借鉴中学习,初认yili主题这个博客跌跌撞撞也弄了好多天了,由于Next主题不知道什么情况,被我玩坏了。所以换了一个主题。大名鼎鼎的yilia主题,崇尚简约优雅,以及极致的性能,符合我的性格。以后很长一段时间都用这个主题啦。接下来来说一下一些yili主题个性化自定义的方法和自己走过的坑。 本教程适用于yilia主题 <!--more--> 前言由于yilia已经不维护了,坑还挺多的,所以下面这些方法都是我试过了才敢拿出来的。如果有错误,请原步骤返回检查错误,或者参考官方教程↓yilia主题github开源地址 本篇收集了全网目前最全的攻略啦,各位凑活着看。这是一个系列,第一步先借鉴一下别人的代码,哈哈哈哈嗝。 如何正确使用yilia主题安装$ git clone https://github.com/litten/hexo-theme-yilia.git themes/yilia 配置修改hexo根目录下的_config.yml : theme: yilia 自定义配置主题配置文件在主目录下的_config.yml,请根据自己需要修改使用。 完整配置例子,可以参考作者的博客 主题配置详细介绍接下来我来说一下主题配置中的基本配置有哪些可以自定义的地方,详细看下面的备注部分代码我会用我自己的配置来讲解具体用法 # Header// 这段代码是左侧栏的相关展示内容,后期可以加上分类,关于等。每个页面后面是它的存放路径menu: 主页: / 随笔: /tags/随笔/# SubNav // 这段代码是左侧栏的相关联系方式图标,后期可以修改图标等。subnav: github: "#" //不需要就改成 "#"这个是github weibo: "#" //微博 rss: "#" //RSS zhihu: "#" //知乎 #qq: "#" //QQ #weixin: "#" //微信 #jianshu: "#" //简书 #douban: "#" //豆瓣 #segmentfault: "#" //思否segmentfault #bilibili: "#" //哔哩哔哩 #acfun: "#" //acfun #mail: "mailto:litten225@qq.com" //比如你想展示邮箱,就把这里的地址改成你自己的邮箱即可。前面的 mailto: 不要去掉 #facebook: "#" //facebook #google: "#" //google #twitter: "#" //twitter #linkedin: "#" //linkedinrss: /atom.xml# 是否需要修改 root 路径# 如果您的网站存放在子目录中,例如 http://yoursite.com/blog,# 请将您的 url 设为 http://yoursite.com/blog 并把 root 设为 /blog/。root: # Content# 文章太长,截断按钮文字excerpt_link: more //这个文字是可以自己修改的,比如我的就改成了展开全文# 文章卡片右下角常驻链接,不需要请设置为false,如果上面改成了展开全文,这个建议改为falseshow_all_link: '展开全文'# 数学公式mathjax: false# 是否在新窗口打开链接open_in_new: false# 打赏# 打赏type设定:0-关闭打赏; 1-文章对应的md文件里有reward:true属性,才有打赏; 2-所有文章均有打赏reward_type: 2# 打赏wordingreward_wording: '谢谢你请我吃糖果' //这个是打赏时候显示的文字,可以修改# 支付宝二维码图片地址,跟你设置头像的方式一样。比如:/assets/img/alipay.jpg ,网络图片直接用 https://xxx.png 即可alipay: # 微信二维码图片地址weixin: # 目录# 目录设定:0-不显示目录; 1-文章对应的md文件里有toc:true属性,才有目录; 2-所有文章均显示目录toc: 1# 根据自己的习惯来设置,如果你的目录标题习惯有标号,置为true即可隐藏hexo重复的序号;否则置为falsetoc_hide_index: true# 目录为空时的提示toc_empty_wording: '目录,不存在的…'# 是否有快速回到顶部的按钮top: true# Miscellaneousbaidu_analytics: '' # 百度分析google_analytics: '' # 谷歌分析favicon: /favicon.png # 站点logo#你的头像urlavatar:#是否开启分享share_jia: true#评论:1、多说;2、网易云跟帖;3、畅言;4、Disqus;5、Gitment#不需要使用某项,直接设置值为false,或注释掉#具体请参考wiki:https://github.com/litten/hexo-theme-yilia/wiki/#1、多说duoshuo: false#2、网易云跟帖wangyiyun: false#3、畅言changyan_appid: falsechangyan_conf: false#4、Disqus 在hexo根目录的config里也有disqus_shortname字段,优先使用yilia的disqus: false#5、Gitmentgitment_owner: false #你的 GitHub IDgitment_repo: '' #存储评论的 repogitment_oauth: client_id: '' #client ID client_secret: '' #client secret# 样式定制 - 一般不需要修改,除非有很强的定制欲望…style: # 左侧栏头像上面的背景颜色 header: '#4d4d4d' # 右滑板块背景 slider: 'linear-gradient(200deg,#a0cfe4,#e8c37e)'# slider的设置slider: # 是否默认展开tags板块 showTags: false# 智能菜单# 如不需要,将该对应项置为false# 比如#smart_menu:# friends: falsesmart_menu: innerArchive: '所有文章' friends: '友链' aboutme: '关于我'friends: 友情链接1: http://localhost:4000/ 友情链接2: http://localhost:4000/ 友情链接3: http://localhost:4000/ 友情链接4: http://localhost:4000/ 友情链接5: http://localhost:4000/ 友情链接6: http://localhost:4000/aboutme: 很惭愧<br><br>只做了一点微小的工作<br>谢谢大家 //这个是出现在 关于我 页面的一句话 <br> 是换行的意思。请照着上面的备注,一条一条修改看看效果,就能大概掌握最基础的主题自定义啦。 ...

November 2, 2019 · 3 min · jiezi

git-代码托管使用方法

Git代码托管1 准备材料在coding,github这些代码托管网站上申请一个账户。Linux平台什么需要一个git,如ubuntu 需要 $ sudo apt-get install git,Windows平台需要下载一个Git环境。 我申请的是coding,github虽然人数比较多,但是网速 很慢,而且有的时候某个地方网络就不好使了,可能github用了某个机构的服务器,而这个服务刚好被中国墙了,为了保证通畅和速度,国内的coding还是满足要求的。 要我理解,coding,Github这些代码托管,都遵循Git的协议。这些网站只是提供服务器和接口。用Git的命令去访问这些coding,github这种代码托管的服务器。 我以coding为例来记录一下,我的配置。 2 建立仓库2.1申请仓库 在coding的网站上需要建立一个仓库,这个仓库用来存储项目代码,建立项目好像就是简历仓库。建立完仓库的时候,会得到一个网址,这个网址后缀以.git结尾,需要记住这个仓库网址。 创建项目之后,进入到这个项目的代码列表里,得到一个这样以git结尾的网址 https://git.coding.net/coarlq... 这个网址非常重要,后面在终端(windows是cmd)中要用。 我这几天研究的是HTTPS协议下的,SSH协议还没有研究,到时候用熟练之后看看SSH。 2.2 本地建立仓库 在网站上建立仓库之后,就要在本地建立对应的仓库(一个文件夹),这个仓库可以是你的工程的工作空间,也可以是你建立的新文件夹,最好还是代码的工作空间,Git最大的好处就是可以检测到只被改动的代码,每次更新之后push到服务器上是被改动的代码,也就是会对文件的版本进行检测。 我这里把我的DSP开发环境的CCSv7的工作空间作为本地仓库和服务器进行同步。路径/home/delvis/workspace/CCSv7/,里面有我开发的工程代码。 S1:打开终端,切换到建立本地仓库的路径,那么我就要输入: cd /home/delvis/workspace/CCSv7 S2: 在该路径下简历一个说明文档,README.md文件,用来说明项目的的介绍之类的。 touch README.md S3: 初始化仓库 git init 到此为止我们就建立了一个本地的仓库。 2.3 本地仓库和远程仓库建立连接 新建立的远程仓库没有任何的代码,现在就需要把本地库和远程仓库建立连接,完成本地仓库和远程仓库的上传和下载,以及更新等等。 S1: 使用git的add命令将待传的文件加入到上传列表。第一次的时候先不要传那么多,先传README.md单个文件。 git add README.md S2:更新说明(每一次修改都有个commit说明这个东西,你需要对这个说明进行修改,改一点点也可以,如果不该就没办法上传) git commit -m "first commit" ...

November 2, 2019 · 1 min · jiezi

阿里巴巴开源-Dragonwell-JDK-最新版本-811GA-发布

导读:新版本主要有三大变化:同步了 OpenJDK 上游社区 jdk8u222-ga 的最新更新;带来了正式的 feature:G1ElasticHeap;发布了用户期待的 Windows 实验版本 Experimental Windows version。距离 Dragonwell JDK 第一个正式版本 8.0.0-GA 发布已经过去 3 个月了,项目在 Github 上的 stars 继续攀升达到了 1900。今天我们带来了最新版本 8.1.1-GA 的发布,包含了全新的特性和更新。详情见下文。 龙井 8.1.1-GA 的新变化新版本里我们同步了 OpenJDK 上游社区 jdk8u222-ga 的最新更新,带来了上游稳定版本的最新安全更新和补丁。 在 8.0.0-GA 发布的时候,我们介绍了 Dragonwell 第三个新特性 ElasticHeap 的一些情况,很多用户已经跃跃欲试了,这次发布我们带来了正式的 feature:G1ElasticHeap。能够在不影响 Java 业务运行的前提下,动态节约 Java 进程物理内存。 另外,我们还发布了用户期待的 Windows 实验版本 Experimental Windows version,使用 Windows 开发的小伙伴们可以更加方便的使用 Dragonwell JDK 进行相应的开发工作。 G1ElasticHeap从 feature 的名字上我们可以看到 ElasticHeap 是基于 G1 GC 开发的,所以想要使用这个功能的小伙伴,需要开启 G1 GC(-XX:+UseG1GC)。在 8.0.0-GA 正式版介绍时,我们介绍了部分技术背景,由于 Java 自动管理内存的特性,整个 Java Heap 的地址空间和物理内存将被 Java 进程占用,即使使用率不高,回收后也并不会归还给操作系统,导致 Java 进程会有较高的常驻内存。 ...

October 17, 2019 · 2 min · jiezi

支付宝王益40岁写30年代码是一种什么体验

对于蚂蚁金服研究员王益而言,2019年是个颇有纪念意义的年份。今年他整40岁。从10岁开始,写代码整30年。这30年来,他当过“不务正业”的学生,创纪录地在大一就考下系统分析员,“单枪匹⻢”闯荡过从国内到硅谷的多家知名互联网科技公司,和AI领域许多传奇人物都有所交集。不惑之年对于许多工程师来说,或许已是需要焦虑的年龄,但40岁的王益在蚂蚁金服每天都过得很充实:起床,自由泳一千米,然后去做他最喜欢的事——写代码和组织大家一起写代码。2019年9月11日,在上海举办的Google开发者大会上,蚂蚁金服研究员王益分享了新开发的分布式深度学习系统ElasticDL。这是他来到蚂蚁金服的一年之中所做的第二个开源项目,主要用于大幅提升集群总体利用率以及深度学习团队的工作效能。之前开源的 SQLFlow系统在短短的几个月之间,已经在GitHub上获得了三千多颗星星。 2019对于王益而言是个颇有纪念意义的年份,今年他整40岁,写代码整30年。 这听上去是一件不可思议的事——30年前,上世纪的80年代末,他在⻓沙上小学,全城都很难找出一位能教编程的老师,个人电脑更是一个陌生名词,一台以苹果2为原型、可以用BASIC语言编程的 “中华学习机”售价7000人⺠币,在当时几乎可以买下一套房子。幸运的是,王益在10岁那年得到了这样一件贵重的礼物,从这台学习机和一本BASIC语言教材开始,他开启了与代码结缘的人生。 “我那时不是个好学生,经常受‘别人家的孩子’打击,老师和同学都觉得写代码是不务正业。”回想起30年来的经历,这位清华博士、足迹从国内到硅谷历经多家知名互联网科技公司的学霸笑谈自己“活得比较任性”,“但我就是想做与众不同的事。别人越说这样不行,我就越想用这种方式证明自己。” 初中毕业那年的暑假,他用“中华学习机”和自己焊接的电路板,把自家的老式“威力牌”双筒洗衣机改造成了自动洗衣机。同时,他用Apple BASIC语言和6502汇编混合编程,写了人生中第一个游戏。高中三年,其他同学努力备考,他却加班加点自学了大学计算机系所有课程,随后参加计算机水平考试,先后获得了程序员、高级程序员、以及最高级别系统分析员资格。2018年,他获得Google APAC Innovation Award。从不断摸索代码世界的少年时代,到专注于AI基础架构和系统开发的求学工作生涯,这份“任性”一直伴随他走到今天。 “我经常从零开始。选择去做什么的一大标准是‘有意思’。” 相比于规划一条稳妥的职业发展道路,王益更愿意顺应自己强烈的好奇心,去选择最困难但最有意思的探索方向。他在中国和美国互联网公司都工作过,也分别在美国公司的中国分部和中国公司的美国分部工作过。他的足迹遍及国内BAT三家。任性的是,每次跳槽, 他都从一个人coding一个创新项目开始,吸引同事们加入,从而组建团队。虽然2011年就在腾讯作为广告系统技术总监,但是他从不在跳槽时要求带何等规模的团队。 2014年,王益带着妻子和两个月大的女儿离开腾讯移居硅谷。“一切都归零了。工资减半。”他笑笑说。不过凭着多位学界和业界领袖的推荐,他很快就安顿下来,不到一年就开始在硅谷创业,作为Head of Research Scienets 参与创建了AI创业公司 ScaledInference。这是一家人才济济的创业公司。人工智能行业的领袖人物、加州大学伯克利分校的Michael Jordan教授是这家公司顾问。陆奇曾代表微软到访,讨论技术合作。“可惜我们不够关注业务落地,做的不够好。技术研发一定要有落地的能力。”事后,王益不无遗憾的说。 在加入蚂蚁之前,王益在百度硅谷研究院工作,负责开源深度学习系统PaddlePaddle。在历经两年的艰苦开发,新一代技术Fluid开始系统地落地百度各个业务之后,他发起了他在 PaddlePaddle的最后一个子项目——一条太阳能驱动的无人驾驶船。这是一条双体船,由他和五岁女儿的两条划艇构成。船上的笔记本电脑运行基于immitation learning的人工智能系统,自动学习驾驶者的技巧。为了船体稳定,他在自家⻋库里焊接了连接两条划艇的金属框架。便于拆装的结构,可以装上他的皮卡,方便下水测试。 做出加入蚂蚁金服的决定,也是出于同样的理由——“有意思”。“这里的业务很新颖,对AI 有着更加多样化的需求。”如何用AI解决金融行业的问题,是和他以往所面对的完全不同的全新挑战。 SQLFlow:分析师与AI模型间的翻译加入蚂蚁金服不久,王益就意识到自己之前的朦胧猜想越来越清晰地被验证:和主要依靠流量与广告赚钱的传统互联网公司不同,蚂蚁金服不是纯互联网公司,它有独特的商业模式和对于工具的独到需求。 此前的十多年中,他的大部分经历是在传统互联网行业做搜索推荐技术,这一类业务所需的模型总数比较有限,只需要算相关性的模型、排序的模型等,一个成熟的模型通常会有几十上百人维护,每年修改调整去提升性能。但在蚂蚁金服,这种模式被颠覆了。因为金融行业的数据远比社交、电商和搜索引擎的数据要稀疏,很难完全靠机器来挖掘出规律,必须依赖金融专业分析师的智慧。分析师大量使用SQL语言来验证想法,或者进一步做探索,这些结论对金融业务非常关键。 每一位分析师平均每天要提交很多个AI任务,这些任务对AI模型的需求各不相同,差异性特别显著。但是,模型是建模团队用Python语言描述的,分析师们如果要调用模型,要么需要学习Python语言,要么需要专配一位工程师,效率难以显著提高。 语言不通,所以需要翻译,那么能否在SQL和Python之间也设立一个翻译? 基于这样的想法,王益和团队一起开发了SQLFlow,这个系统好比一个“翻译机”,能将分析师们输入的SQL命令翻译成Python语言,这样一来,分析师无需学习Python,使用SQL语言就能够处理数据、训练AI模型,并使用训练好的模型来回答业务问题。这套系统更重要的作用,是重新界定了分析师、建模团队和工具开发团队的责任,让同一个机构里的这三个工种有了清晰的分工,有效形成合力。 ElasticDL:一个“聪明”的智能学习系统通过SQLFlow被调用的模型,会基于基础架构来进行分布式执行,这套分布式的智能学习系统,就是刚刚开源的ElasticDL。ElasticDL基于TensorFlow2.0构建,是面向未来的下一代技术,其很重要的独特之处,就在于它很“聪明”。 首先,它能和SQLFlow一起,补足简短的SQL程序翻译成复杂的Python程序的过程中所需的信息。根据深度学习模型的数学特性,它能够决定用什么样的方式来进行计算,还能在计算过程中智能地决定一些参数。 其次,它的容错和弹性调度机制,能让集群的利用效率更高。用户提交需求之后,不再需要“排队”等待资源释放才开始计算,计算会“插空”进行,这样闲置和等待时间更短,大幅度减少了浪费在等待上的系统资源和人力资源。 在数据收集能力极大提升的今天,拥有能算“大”数据的能力,比算得快更为重要。这是王益一直未变的观点。ElasticDL的开发,着眼之处不仅是计算本身的提速,更是针对云计算时代中,数据量大且多人共用集群的特点而进行的调度优化。“等待的时间有时会占到60%-80%,如果不能有效减少这部分的浪费,只是提升计算速度的话,对整体效率的提升就是杯水⻋薪。”王益说,但是ElasticDL的弹性调度能在资源不足的情况下,有多少就先调用多少,让计算尽快启动。 ⻓远看来,ElasticDL还将支持各种学习模式,以顺应金融行业对AI的多种需求。很多在传统互联网行业可有可无的训练模式,在金融行业都很有广阔的应用场景,比如保障数据安全的同时还能共享数据背后规律的共享智能,或者建立可以进行各种大胆试验的虚拟环境,这些面向未来的需求,在ElasticDL的设计之中也有所考虑。 对于一直在做AI基础架构的王益来说,对AI有着各种不同需求的金融行业,是一片全新的驰骋疆场。无数新的问题等待他去尝试,去寻找新的解法,让他乐此不疲。 实践出真知,无需等待理论完美证明“数学模型和分布式架构是互相影响的,只了解其中任何一面,在这个领域都做不好。要为深度学习的架构去改数学模型,也要因为数学模型的数学特点去做架构调整。” 站在今天回顾过去做AI基础架构的十多年,王益觉得这是自己所学到的最重要一课。 这一想法的首次验证,是在他2009年离开Google进入腾讯之后写出的Peacock系统。和在Google所做的语义理解项目不同,这次他将算法和分布式架构一起考虑调整,让语义理解的规模扩大了上千倍,后来集结成了论文发表在ACM Transactions on Intelligent Systems and Technology杂志上,广为业界知晓。 2015年,他进入百度硅谷参与语音识别项目Deep Speech 2,这一项目不仅被MIT科技评论评为 2016年全球十大科技突破之一,也成为他了解深度学习的一个契机。他一度坚持要有完美的理论论证才能进入实践验证,因为深度学习的理论未经严格推敲,他一直认为只有统计学习才是“正道”。 在百度,王益获得深度学习科学家徐伟的推荐,去负责深度学习平台PaddlePaddle。在不断探索解决实际问题的过程之中,他的想法改变了。 “并不一定先要有完整论证的理论才去进行实践,也可以先实践,实践出真知。实践之后再总结提升为理论。”王益说,“这就像是在牛顿发现力学原理之前的几千年前,人类就已经利用杠杆原理修起了金字塔。” Code Review:从最初的震撼到⻓年的习惯今年5月,SQLFlow宣布开源,之后仅四个月,ElasticDL也宣布开源,这在蚂蚁金服的历史上并不多⻅,却是王益的坚持。他认为唯有开源才能保证信息透明,唯有让代码直接面对全社会,才能全方位的接受审视和检验,对写代码的人自身来说,也是一种自我约束。 “开源和codereview不仅是个技术问题,更是管理学问题、社会学问题,关系到如何把大家组织起来变成更高效的团队。”王益说。 Code Review对他自己而言,也是人生中一段难以磨灭的经历。他用“最初的震撼”来描述12年前初出校⻔加入Google中国时的体验。当时他已经写了18年程序,手握系统分析师资格,还特别研究过了Google的Code style,所以初次遭遇Code Review时并没有太当回事:“以为自己写了这么多年程序,怎么都还行吧。” 但现实是⻣感的:他在Google写出的第一个程序,总共不过100行代码,却被来自美国的同事和好友Jerad提出了120行意⻅。“当时深受打击,简直觉得屈辱。” 他压制了情绪,仔细去看那些意⻅,这才发现每一条都真诚且很有帮助。“从那一刻起, Code Review 成为了我们的工作方式。”每天和这些同事们一起coding,互相review,让中国工程师们很快知道了应当关注哪些地方,应当如何沟通合作。因此,不管是腾讯的 Peacock,百度的PaddlePaddle新版本Fluid,还是蚂蚁的SQLFlow 和 ElasticDL 都是王益先开发出原型,再吸引感兴趣的同事一起来完善。 ...

October 17, 2019 · 1 min · jiezi

git-多人合作

1.在github上建立好你的组织(这里不做组织的演示,如果还不清楚参考腾讯云--github上如何创建自己的组织2.组织创建完毕后邀请你的组织成员,网上也有例子,输入成员的github账号并提交,对方就会收到邀请3.在组织上创建一个仓库存放项目并提交你们的项目到本仓库4.其他小伙伴就可以从这个地址上进行项目的克隆(克隆下来的项目就不用了进行git init初始化了)、以及多人合作开发*克隆指令: git clone 仓库地址多人合作**我们在进行多人合作时,肯定是进行分支操作的,下面说一下操作顺序 在远程仓库上建立分支,也可以在你本地主分支上(不添加分支默认就是主分支master)进行创建分支并推送至远程创建分支 git branch <分支名>切换分支 git checkout 分支名推送到远程 git push origin 分支名2.我们在本地克隆下来的项目中,默认是只能看见主分支master而看不到远程的其他分支的,如果我们要在本地进行多人分支开发(必定的),一般要在本地创建和远程分支对应的分支并建立关联(最好和远程分支名字一样) 创建对应分支 git checkout -b 分支名 origin/分支名建立关联 git branch -u origin/分支名 或者使用 git branch --set-upstream-to origin/分支名顺便说下解除关联: git branch --unset-upstream-to origin/分支名3.一般我们的操作步骤: 首先克隆下来项目后建立好对应分支并与远程分支关联,然后在你建立好的本地分支去更改(如果默认是主分支记得切换分支),时不时地往远程你的分支上推送具体步骤:git checkout 分支git status 在每次执行 `git commit`之前先使用`git status`检查文件状态是一个很好的习惯, 这样能防止你不小心提交了您不想提交的东西//原文出自【易百教程】git add 文件名(全部则 git add .)git commit -m"描述信息"git push origin 分支 (推送到你的远程分支)当你的代码没问题之后,我们要进行分支合并,将本地分支合并到本地主分支上然后将主分支推送至远程主分支具体步骤: git checkout mastergit merge 分支 (将分支的内容合并到本地主分支,注意~你的分支内容要先进行提交)git pull (拉取最新代码,防止你和你一个哥们儿一起往远程主分支上提交出现冲突)git push origin master (提交到远程主分支)ok 以上就是多人合作和具体步骤了对了,一般我们有一些一直不需要改变的比如 node_modules可以在上传的时候把这类文件自动过滤 参考连接git上传忽略node_modules ...

October 17, 2019 · 1 min · jiezi

如何基于-Nacos-和-Sentinel-实现灰度路由和流量防护一体化

基于Alibaba Nacos和Sentinel,实现灰度路由和流量防护一体化的解决方案,发布在最新的 Nepxion Discovery 5.4.0 版,具体参考: 源码主页,请访问 源码主页指南主页,请访问 指南主页文档主页,请访问 文档主页 Nepxion Discovery框架在实现灰度发布和路由功能前提下,结合Nacos和Sentinel,对流量再实施一层防护措施,更能达到企业级的流量安全控制的目的。它的功能包括: 封装远程配置中心和本地规则文件的读取逻辑,即优先读取远程配置,如果不存在或者规则错误,则读取本地规则文件。动态实现远程配置中心对于规则的热刷新封装NacosDataSource和ApolloDataSource,支持Nacos和Apollo两个远程配置中心,零代码实现Sentinel功能。更多的远程配置中心,请参照Sentinel官方的DataSource并自行集成支持原生的流控规则、降级规则、授权规则、系统规则、热点参数流控规则支持扩展LimitApp的机制,通过动态的Http Header方式实现组合式防护机制,包括基于服务名、基于灰度组、基于灰度版本、基于灰度区域、基于机器地址和端口等防护机制,支持自定义任意的业务参数组合实现该功能,例如,根据传入的微服务灰度版本号+用户名,组合在一起进行熔断支持微服务侧Actuator、Swagger和Rest三种方式的规则写入支持控制台侧基于微服务名的Actuator、Swagger和Rest三种方式的批量规则写入支持开关关闭上述功能spring.application.strategy.sentinel.enabled=true,默认是关闭的[Nacos] 阿里巴巴中间件部门开发的新一代集服务注册发现中心和配置中心为一体的中间件。它是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施,支持几乎所有主流类型的“服务”的发现、配置和管理,更敏捷和容易地构建、交付和管理微服务平台 [Sentinel] 阿里巴巴中间件部门开发的新一代以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性的分布式系统的流量防卫兵。它承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等 环境搭建及依赖引入服务端在Discovery框架原有依赖的基础上,再引入如下依赖 <dependency> <groupId>com.nepxion</groupId> <artifactId>discovery-plugin-strategy-starter-service-sentinel</artifactId> <version>${discovery.version}</version></dependency><dependency> <groupId>com.nepxion</groupId> <artifactId>discovery-plugin-strategy-sentinel-starter-nacos</artifactId> <!-- <artifactId>discovery-plugin-strategy-sentinel-starter-apollo</artifactId> --> <version>${discovery.version}</version></dependency>原生Sentinel注解参照下面代码,为接口方法增加@SentinelResource注解,value为sentinel-resource,blockHandler和fallback是防护其作用后需要执行的方法 @RestController@ConditionalOnProperty(name = DiscoveryConstant.SPRING_APPLICATION_NAME, havingValue = "discovery-guide-service-b")public class BFeignImpl extends AbstractFeignImpl implements BFeign { private static final Logger LOG = LoggerFactory.getLogger(BFeignImpl.class); @Override @SentinelResource(value = "sentinel-resource", blockHandler = "handleBlock", fallback = "handleFallback") public String invoke(@PathVariable(value = "value") String value) { value = doInvoke(value); LOG.info("调用路径:{}", value); return value; } public String handleBlock(String value, BlockException e) { return value + "-> B server sentinel block, cause=" + e.getClass().getName() + ", rule=" + e.getRule() + ", limitApp=" + e.getRuleLimitApp(); } public String handleFallback(String value) { return value + "-> B server sentinel fallback"; }}原生Sentinel规则Sentinel在配置中心订阅的Key格式,如下: ...

October 15, 2019 · 2 min · jiezi

使用Vue技术栈手把手从零开发开发旅游网站一

vue-travel 旅游网站 github:writing_hand: 项目介绍该项目是一款实现在线预订旅游度假产品,休闲旅游预订平台,提供国内游、国外游、周边旅游以及旅游攻略等功能的web应用。 项目演示 演示地址 项目功能: 1:用户模块 用户注册(包含ajax方式校验邮箱格式与是否重复) 用户激活(邮件激活) 用户登录 用户退出2:旅游景点模块 景点列表(带分页) 景点详情3:订单模块 确认订单(填写出发日期,人数,出发地等信息) 生成订单(将订单信息保存到数据库) 订单详情展示 订单支付(易宝支付) 扩展功能: 1:用户7天免登录功能(自动登录功能) 2:我的订单列表展示(带分页) 项目初始化在任一个文件里,打开git bash,或者cmd来打开命令行窗口,输入命令vue create vue-travel接下来,进行选择,上下箭头切换选项,空格选中选项。看到一下的最终结果:Vue CLI v3.9.3┌────────────────────────────┐│ Update available: 3.11.0 │└────────────────────────────┘? Please pick a preset: Manually select features? Check the features needed for your project: Babel, Router, Vuex, CSS Pre-processors, Linter ? Use history mode for router? (Requires proper server setup for index fallback in production) Yes? Pick a CSS pre-processor (PostCSS, Autoprefixer and CSS Modules are supported by default): Stylus? Pick a linter / formatter config: Standard? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection)Lint on save? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? In package.json? Save this as a preset for future projects? No我这里选择了Babel, Router, Vuex, CSS Pre-processors(Stylus), Linter,根据自己的需求进行选择安装相应的插件。 ...

October 6, 2019 · 3 min · jiezi

GitHub项目徽标

前言GitHub徽标,GitHub Badge,你也可以叫它徽章。就是在项目README中经常看到的那些表明构建状态或者版本等信息的小图标。就像这样:这些好看的小图标不仅简洁美观,而且包含了清晰易读的信息,在README中使用小徽标能够为自己的项目说明增色不少!如何给自己的项目加上小徽标呢? 一、关于徽标徽标图片分左右两部分,左边是标题,右边是内容,就像是键值对。GitHub徽标官网是 https://shields.io/图标规范二、如何添加动态徽标动态徽标是指如果项目状态发生变化,会自动更新状态的徽标,它能保证用户看到的信息就是项目当前的真实状态。 常用的动态徽标有: 持续集成状态项目版本信息代码测试覆盖率项目下载量贡献者统计等等这里以Travis CI 的持续集成状态为例。没有接触过 Travis CI的可以看我的上一篇文章 利用Travis CI+GitHub实现持续集成和自动部署 登录 Travis CI,进入配置过构建的项目,在项目名称的右边有个 build passing 或者 build failing 徽标。点击它,在弹出框中,就可以看到 Travis CI 为你提供的各种格式的徽章地址了。你可以根据需要选择格式,imageUrl格式大概是这个样子: https://www.travis-ci.org/{your-name}/{your-repo-name}.svg?branch=mastermarkdown格式大概是这个样子: [![Build Status](https://www.travis-ci.org/{your-name}/{your-repo-name}.svg?branch=master)](https://www.travis-ci.org/{your-name}/{your-repo-name})简单起见,我选择 markdown 格式。将内容复制后,打开项目的README文档,在顶部位置粘贴。经过前4步,小徽章就搞定了。将README文档push到远程,刷新GitHub页面,过一会,就会看到README上面已经有了持续集成状态图标了:之所以要过一会才加载出来,是因为它要动态从 Travis CI 平台获取状态。三、如何自定义徽标shields.io 提供了自定义徽标的功能。 徽标图标格式https://img.shields.io/badge/{徽标标题}-{徽标内容}-{徽标颜色}.svg带链接的徽标[![](https://img.shields.io/badge/{徽标标题}-{徽标内容}-{徽标颜色}.svg)]({linkUrl})变量说明徽标标题:徽标左边的文字徽标内容:徽标右边的文字徽标颜色:徽标右边的背景颜色,可以是颜色的16进制值,也可以是颜色英文。支持的颜色英文如下:变量之间用 - 连接。将这3个变量替换为你需要的内容即可生成一个自定义的徽标。 举个栗子例如下面这个是我的博客的徽标: [![](/img/remote/1460000020600529)](https://champyin.com)效果:点击该徽标会打开对应的linkUrl地址,即直接跳到我的博客。 进阶除了上面所说的3个参数,shields.io 还提供了一些 query string 来控制徽标样式。使用方式跟URL的query string一致:徽标图标地址?{参数名}={参数值},多个参数用 & 连接: https://img.shields.io/badge/{徽标标题}-{徽标内容}-{徽标颜色}.svg?{参数名1}={参数值1}&{参数名2}={参数值2}常用的 query string 参数有: style:控制徽标主题样式,style的值可以是: plastic | flat | flat-square | social 。label:用来强制覆盖原有徽标的标题文字。colorA:控制左半部分背景颜色,只能用16进制颜色值作为参数,不能使用颜色英文。colorB:控制右半部分背景颜色。以style参数为例 plastic 立体效果: ![](/img/remote/1460000020600530)flat 扁平化效果,也是默认效果: ![](/img/remote/1460000020600531)flat-square 扁平 + 去圆角效果: ...

October 6, 2019 · 1 min · jiezi

配置-Git-用于-GitHub-Desktop

GitHub Desktop 使用您在本地 Git 配置中设置的电子邮件地址连接提交与 GitHub 或 GitHub Enterprise 帐户1.登录到 GitHub 或 GitHub Enterprise2.在任意页面的右上角,单击您的个人资料照片,然后单击 Settings(设置)3.在左侧边栏中,单击 Emails(电子邮件)4.复制要用于本地 Git 配置的电子邮件地址5.返回到 GitHub Desktop6.在窗口的左上角,选择 File(文件) 菜单7.单击 Options(选项)8.在 Options(选项)窗口中,选择 Git9.在 Name(名称)字段中,键入要用于 Git 配置的名称10.在 Email(电子邮件) 字段中,粘贴从 GitHub 或 GitHub Enterprise 帐户设置中复制的电子邮件地址原文地址

October 5, 2019 · 1 min · jiezi

利用Travis-CIGitHub实现持续集成和自动部署

前言如果你手动部署过项目,一定会深感持续集成的必要性,因为手动部署实在又繁琐又耗时,虽然部署流程基本固定,依然容易出错。 如果你很熟悉持续集成,一定会同意这样的观点:“使用它已经成为一种标配”。 什么是持续集成Continuous Integration(CI) is a development practice that requires developers to integrate code into a shared repository several times a day. Each check-in is then verified by an automated build, allowing teams to detect problems early.———ThoughtWorks 翻译过来就是:持续集成是一个开发行为,它要求开发者每天多次将代码集成到一个共享的仓库,每次提交都会被自动构建所检查,团队可因此提前检测出问题。持续集成的工具非常多,例如用java语言开发的Jenkins,由于其可以在多台机器上进行分布式地构建和负载测试的特性,很多大公司都在使用它。 但是Jenkins的不加修饰的界面界面让我有些嫌弃... 随着GitHub的发展,出现了越来越多支持GitHub的CI/CD产品。在GitHub市场上,可以看到,已经支持的持续集成服务提供商已超过300多家(详情)。 选择Travis CI,是因为身边很多朋友的推荐。 下面分享一下我是如何利用Travis CI+GitHub实现持续集成和自动部署的,通过我的一些研究和实战经验,希望可以帮到有需要的朋友。 什么是Travis CITravis CI是用Ruby语言开发的一个开源的分布式持续集成服务,用于自动构建和测试在GitHub托管的项目。支持包括Javascript、Node.js、Ruby等20多种程序语言。对于开源项目免费提供CI服务。你也可以买他的收费版,享受更多的服务。 Travis CI目前有两个官网,分别是 https://travis-ci.org 和 https://travis-ci.com 。https://travis-ci.org 是旧平台,已经逐渐往新平台 https://travis-ci.com 上迁移了。对于私有仓库的免费自动构建,Travis CI在新平台上给予了支持。 一、获取GitHub Access TokenTravis CI在自动部署的时候,需要push内容到仓库的某个分支,而访问GitHub仓库需要用户授权,授权方式就是用户提供 Access Token 给Travis CI。 ...

October 4, 2019 · 1 min · jiezi

java-编译时注解框架-lombokex

lombok-exlombok-ex 是一款类似于 lombok 的编译时注解框架。 编译时注,拥有运行时注解的便利性,和无任何损失的性能。 主要补充一些 lombok 没有实现,且自己会用到的常见工具。 创作目的补充 lombok 缺失的注解,便于日常开发使用。lombok 的源码基本不可读,应该是加密处理了。为其他注解相关框架提升性能提供基础,后期考虑替换为编译时注解。特性@Serial 支持(1)类实现序列化接口 (2)类生成 serialVersionUID 字段,字段的值可以通过 value() 属性指定。 @Util 支持(1)类设置为 final (2)类构造器私有化 变更日志变更日志 快速开始准备工作jdk1.7+maven 3.x+编译器启用编译时注解功能。如 idea 启用 enable annotation process maven 引入<dependency> <groupId>com.github.houbb</groupId> <artifactId>lombok-ex</artifactId> <version>0.0.2</version> <scope>provided</scope></dependency>例子User.java我们定义一个简单的 pojo,使用 @Serial package com.github.houbb.lombok.test.model;import com.github.houbb.lombok.ex.annotation.Serial;@Serialpublic class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}编译直接使用 maven 命令编译 $ mvn clean install编译结果查看对应的 User.class 文件,内容如下: ...

October 3, 2019 · 1 min · jiezi

太棒了GitHub-Review-代码能力小升级

本文由 yanglbme 原创,首发于公众号“Doocs开源社区”,欢迎转载。选中多行代码添加 Comment一些朋友可能或多或少都会在 GitHub 参与一些项目的Code Review(以下都简称CR) 工作。以前的 GitHub,CR 体验并不好,你无法同时选中多行代码进行 comment。 然而很多时候,我们是需要针对一个代码块进行 comment 的,只能选中一行代码进行 comment 并不满足我们的需求。可能会有一些第三方工具提供相关的功能,但是仅仅一个 CR 的小需求,还有借助其他工具完成,确实是有点麻烦。 好消息就是,现在,没错,就是现在,GitHub 终于为我们已经提供了多行代码 comment 的相关功能。 举个栗子。 比如说,如果你想在第 3-8 行的代码块添加 comment,那么你只需要按住行号 3 后面的蓝色+按钮,往下拖拽到第 8 行,就能选中这个代码块了,之后进行 comment 就可以了,简直完美。 不止于 CR其实,GitHub 近一年已经推出了不少强大的功能或服务,包括: GitHub Actions GitHub Actions 可以为项目自动构建工作流,比如代码检查、自动化打包、自动化测试、发布版本等等,目前该功能处于 beta 测试阶段。 GitHub Package Registry GitHub Package Registry,也即是包管理服务,可以方便地伴随源代码发布公共或私有包。 官方是这样说的: With GitHub Package Registry you can safely publish and consume packages within your organization or with the entire world.目前 GitHub 包管理功能仍处于 beta 测试阶段,想优先体验的朋友,可以进行申请。 ...

October 2, 2019 · 1 min · jiezi

点亮contributions国快乐

github 点亮contributions在举国同庆的时候,本人根据张大导演的晚会灵感,用宫格来点亮星空,完成大师之作,把github上面的contributions宫格来作为画盘,点缀一番,项目地址,效果如下有点拙劣: 项目地址

October 2, 2019 · 1 min · jiezi

是时候让大家看看你用django写出来的博客了内含部署教程视频

作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库博客的基础功能已经开发的差不多了,虽然还有很多地方可以完善,但我们还是希望早点把博客部署到服务器上,让他人可以通过外网访问。至于有待完善的地方,可以等部署完后一点点地迭代和改进。现在就让我们来把博客部署到服务器上吧! ↓↓↓ 视频在这里 ↓↓↓ 作者亲自录制的真机环境演示部署全过程,再不成功你打我!B 站演示(阿里云 CentOS 7 系统)观看地址:https://www.bilibili.com/vide... 注意:本文的每一个步骤都在真实环境下验证无误。除非你知道自己在做什么,否则建议每一步均严格按照教程的指导来,这样能保证你顺利完成部署。 部署前准备我们将使用比较流行的 Nginx + Gunicorn 的方式将 django 开发的博客部署到自己的服务器,让别人能够通过域名访问你的博客。至于 Nginx、Gunicorn 是什么暂时放到一边,读完本教程后你就会知道它们的作用和使用方法了。 为了部署我们的博客,需要满足以下两个条件: 最好有一台可以通过外网访问的服务器(如果没有的话可以在自己的电脑上建一台虚拟机,通过虚拟 ip 访问)。最好有一个域名(如果没有的话,则只能使用 ip 访问,且不能开启 HTTPS)。配置服务器本教程使用的本地环境为 Windows 10,服务器环境为 CentOS 7(64 位)。如果你的环境和我的有所差异(比如 Ubuntu)导致一些命令无法执行,将这些命令转换为你所在环境的命令执行即可,重点在于理解每一步的作用,这样无论在何种环境你都能成功地完成部署,而不是机械地复制粘贴命令。 ### 远程登录到服务器 服务器通常位于云端,需要使用远程登录工具登录后才能对服务器进行操作。我使用的是 Xshell,Windows 下百度 Xshell 下载安装即可,软件对学校和个人用户是免费的。 如何远程登录到服务器这里就不赘述了,相信你参考网上的一些教程肯定能够顺利登录。假如你和我一样使用 Xshell 的话,这里有一篇很详细的教程可以参考:教你怎么使用 xshell 远程连接 linux 服务器。 创建一个超级用户顺利连接到远程服务器了,如果是一台全新服务器的话,通常我们是以 root 用户登录的。在 root 下部署代码不够安全,最好是建一个新用户(如果你已经以非 root 用户登录的话可以跳过这一步)。下面的一些列命令将创建一个拥有超级权限的新用户(把 yangxg 替换成你自己想要的用户名,我这里取我的名字拼音 yangxg): # 在 root 用户下运行这条命令创建一个新用户,yangxg 是用户名# 因为我叫杨学光,所以我取的用户名是 yangxg# 选择一个你喜欢的用户名,不一定非得和我的相同root@server:~# adduser yangxg# 为新用户设置密码# 注意在输密码的时候不会有字符显示,不要以为键盘坏了,正常输入即可root@server:~# passwd yangxg# 把新创建的用户加入超级权限组root@server:~# usermod -aG wheel yangxg# 切换到创建的新用户root@server:~# su - yangxg# 切换成功,@符号前面已经是新用户名而不是 root 了yangxg@server:$新用户创建并切换成功了。如果是新服务器的话,最好先更新一下系统,避免因为版本太旧而给后面安装软件带来麻烦。运行下面的两条命令: ...

September 20, 2019 · 5 min · jiezi

Github-travisci-CI-CD-026

Github travis-ci CI CDCICD 是 持续集成Continuous Integration和持续部署Continuous Deployment简称。指在开发过程中自动执行一系列脚本来减低开发引入 bug 的概率,在新代码从开发到部署的过程中,尽量减少人工的介入。 本文主要介绍一下 travis-ci 持续集成和给 github Actions Travis-cihttps://www.travis-ci.org/1.登录travis-ci通过 github账号登录,会自动同步你的仓库 选择需设置的仓库 先勾选一个测试仓库 3 设置一些解释说明可以看具体的文档,主要包括这几方面 添加.travis.ymlTravis-ci 构建的生命周期 具体一些步骤可以查看文档. 这个文件主要是告诉 Travis CI 应该做什么,以前端node.js为例: language: node_js # 语言设置node_js: # node 版本 - "8"# npm现在默认缓存,如果您要禁用它,请将以下内容添加到您的.travis.yml:cache: npm: false before_install: # 安装前 - npm installscript: - npm run build如果当前目录存在yarn.lock可以使用 Yarn; 如果当前目录中都存在package.json和yarn.lock,则运行以下命令而不是 npm install 具体的一些配置,通过查看文档即可; 现在已经构建成功; 发布部署如果每次构建完都自动部署,或者手动部署可以再下一步; language: node_jsnode_js: - "8"before_install: - yarn installscript: - yarn build after_script: - cd ./dist - git init - git config user.name "${U_NAME}" - git config user.email "${U_EMAIL}" - git add . - git commit -m "Update tools" - git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:${P_BRANCH}#指定分支,只有指定的分支提交时才会运行脚本branches: only: - master发布的是 github page 博客. ...

September 19, 2019 · 1 min · jiezi

RxSwift-MVVM-初体验

一、原起作为一名iOS开发者,必须跟上时代的潮流,随着swift ABI越来越稳定,使用swift开发iOS APP 的人越来越多。从网上看了很多文章,也从github上下载了很多demo进行代码学习。最近使用RxSwift+MVVM+Moya进行了swift的体验之旅。加入到swift开发的大潮中去。 二、目录结构这个demo的项目结构包括:View、Model、ViewModel、Controller、Tool、Extension。 ViewModel是MVVM架构模式与MVC架构模式最大的区别点。MVVM架构模式把业务逻辑从controller集中到了ViewModel中,方便进行单元测试和自动化测试。 ViewModel的业务模型如下: viewmodel相当于是一个黑盒子,封装了业务逻辑,进行输入和输出的转换。 其中View、Model与MVC架构模式下负责的任务相同。controller由于业务逻辑移到了Viewmodel中,它本身担起了中间调用者角色,负责把View和Viewmodel绑定在一起。 demo的整体目录结构如下: 三、使用到的第三方库开发一个App最基本的三大要素:网络请求、数据解析、UI布局,其它的都是这三大要素相关联的,或者更细的功能划分。 网络请求库使用的Moya,数据解析使用的是ObjectMapper,UI布局使用的是自动布局框架Snapkit,图片加载和缓存使用的是Kingfisher,刷新组件使用的MJRefresh,网络加载提示使用的是SVProgressHUD。使用到的三方库的cocoapod目录如下: 四、具体实现4.1 viewmodel的协议viewmodel的实现需要继承NJWViewModelType这个协议,需要实现输入->输出这个方法。这个算是viewmodel的一个基本范式吧。 protocol NJWViewModelType { associatedtype Input associatedtype Output func transform(input: Input) -> Output}4.2 viewmodel的具体实现这里包括了输入、输出的具体实现,与及func transform(input: NJWViewModel.NJWInput) -> NJWViewModel.NJWOutput 这个输入转输出方法具体的实现逻辑。具体代码如下: class NJWViewModel: NSObject { let models = Variable<[GirlModel]>([]) var index: Int = 0}extension NJWViewModel: NJWViewModelType{ typealias Input = NJWInput typealias Output = NJWOutput struct NJWInput { var category = BehaviorRelay<ApiManager.GirlCategory>(value: .GirlCategoryAll) init(category: BehaviorRelay<ApiManager.GirlCategory>) { self.category = category } } struct NJWOutput { let sections: Driver<[NJWSection]> let requestCommand = PublishSubject<Bool>() let refreshStatus = Variable<NJWRefreshStatus>(.none) init(sections: Driver<[NJWSection]>) { self.sections = sections } } func transform(input: NJWViewModel.NJWInput) -> NJWViewModel.NJWOutput { let sections = models.asObservable().map{ (models) -> [NJWSection] in return [NJWSection(items: models)] }.asDriver(onErrorJustReturn: []) let output = Output(sections: sections) input.category.asObservable().subscribe{ let category = $0.element output.requestCommand.subscribe(onNext: { [unowned self] isReloadData in self.index = isReloadData ? 0 : self.index + 1 NJWNetTool.rx.request(.requestWithcategory(type: category!, index: self.index)) .asObservable() .mapArray(GirlModel.self) .subscribe({[weak self] (event) in switch event{ case let .next(modelArr): self?.models.value = isReloadData ? modelArr : (self?.models.value ?? []) + modelArr NJWProgressHUD.showSuccess("加载成功") case let .error(error): NJWProgressHUD.showError(error.localizedDescription) case .completed: output.refreshStatus.value = isReloadData ? NJWRefreshStatus.endHeaderRefresh : NJWRefreshStatus.endFooterRefresh } }).disposed(by: self.rx.disposeBag) }).disposed(by: self.rx.disposeBag) }.disposed(by: rx.disposeBag) return output }}4.3 controller中数据绑定的具体实现把输入、输出和collectionview进行绑定,建立联系,达到操作UI进行数据刷新的目的。具体的绑定逻辑如下: ...

September 11, 2019 · 2 min · jiezi

tech-开源之路-github-PR-走起

date: 2019-09-10 22:25:56title: tech| 开源之路: github PR 走起 想快速提高编程能力, 还不快来 「全球最大同性交友社区」~PR 只需几步github 开源之路, 从 PR 开始, 只需要如下简单的几步: 找到心仪的项目, fork 它 自己的仓库里就有了, clone 它 最新的 master 拉一个分支, 修改代码# 更新 mastergit merge upstream/master# 基于最新的 master 拉出新的分支进行开发git checkout -b feat-xxx# coding# 提交git addgit commitgit push# PR 神器PR 神器参上 github desktop 完成 PR 只需要一步: cmd+r 快捷键 参与 PR参与 PR 使用 cmd+b 快捷键, 切换不同分支, 包括 PR 在 hyperf-cloud/hyperf 主项目上, 使用 github desktop 就可以切换到 PR, 参与到 PR 中 ...

September 11, 2019 · 2 min · jiezi

持续集成及自动化部署之Jenkins

持续集成及自动化部署工具持续部署[CD]**仅仅单元测试还不够,各个模块必须能够在服务器上运行;**关注点在于项目功能(各个模块)部署至服务器后可以运行,为测试环节或最终用户使用做好准备;持续集成[CI]**经常性、频繁的把所有模块集成在一起进行测试[集成测试],有问题尽早发现;**关注点在于尽早发现项目整体运行问题,尽早解决;持续交付[CD]**用小版本不断进行快速迭代,不断收集用户反馈信息,用最快的速度改进优化;[大版本/release]**关注点在于研发团队的最新代码能够尽快让最终用户体验到;总体目标**好处: ***1.降低风险; ***2.减少重复过程[如编译、测试、打包等固定流程] - 自动化流程; ***3.任何时间、任何地点生成 "可部署的软件"; ***4.增强项目的可见性<1>有效决策;<2>注意到趋势; ***5.建立团队对开发产品的信心;Jenkins<open> | Hudson<Oracle>** 前提知识:Linux基本命令|vim编辑器|Maven项目构建管理|Github|SVN** 可整合Github或Subversion** 人工部署** 自动化部署 *** 搭建持续集成环境:可以把构建、部署自动化,减轻工作量 > deploy web container插件 + > *** dev > git repository > 钩子程序 > jenkins > [GIT插件]> code >打包> war包>部署>Tomcat server > [Maven插件] > + >Jenkins:### Jenkins + SVN: ** 要点: *** 创建虚拟机安装Linux系统:vm1-svn,vm2-jenkins,vm3-application(tomcat); *** 版本控制子系统(SVN): - subversion服务器; - 项目对应版本库; - 版本库中钩子程序; -- linux curl命令:-X:指定请求方式;-v:显示响应结果;-u:携带用户名/密码;-H:携带请求消息头信息; *** 持续集成子系统 - JDK; - Tomcat; - Maven; - Jenkins: -- 主体程序; -- svn插件; -- maven插件; -- Deploy to Web Container插件; ***应用发布子系统 - JDK; - Tomcat;### Jenkins + Github: **要点: *** Jenkins需要部署到外网,因Github无法无法访问内网地址; - 安装Jenkins; *** Jenkins所在主机需要安装GIT,git从GitHub上clone代码; - echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc # >>追加 - source /etc/bashrc # 使文件生效 *** Jenkins需要指定git程序位置,和指定jdk、maven程序位置类似; - 配置git; *** 在GitHub上使用每个repository的webhook方式远程触发Jenkins构建; - GitHub配置webhook[repository>settings>webhook>add webhook>远程触发的身份验证令牌] *** 在Jenkins内关闭“防止跨站请求伪造”; - 全局安全配置 > CSRF Protection > 取消勾选;

September 11, 2019 · 1 min · jiezi

AOE工程实践NCNN组件

作者:杨科 NCNN是腾讯开源的一个为手机端极致优化的高性能神经网络前向计算框架。在AOE开源工程里,我们提供了NCNN组件,下面我们以SqueezeNet物体识别这个Sample为例,来讲一讲NCNN组件的设计和用法。 直接集成NCNN缺点为SqueezeNet接入NCNN,把相关的模型文件,NCNN的头文件和库,JNI调用,前处理和后处理相关业务逻辑等。把这些内容都放在SqueezeNet Sample工程里。这样简单直接的集成方法,问题也很明显,和业务耦合比较多,不具有通用性,前处理后处理都和SqueezeNcnn这个Sample有关,不能很方便地提供给其他业务组件使用。深入思考一下,如果我们把AI业务,作为一个一个单独的AI组件提供给业务的同学使用,会发生这样的情况:每个组件都要依赖和包含NCNN的库,而且每个组件的开发同学,都要去熟悉NCNN的接口,写C的调用代码,写JNI。所以我们很自然地会想到要提取一个NCNN的组件出来,例如这样: AOE SDK里的NCNN组件在AOE开源SDK里,我们提供了NCNN组件,下面我们从4个方面来讲一讲NCNN组件: NCNN组件的设计对SqueezeNet Sample的改造应用如何接入NCNN组件对NCNN组件的一些思考NCNN组件的设计NCNN组件的设计理念是组件里不包含具体的业务逻辑,只包含对NCNN接口的封装和调用。具体的业务逻辑,由业务方在外部实现。在接口定义和设计上,我们参考了TF Lite的源码和接口设计。目前提供的对外调用接口,主要有以下几个: // 加载模型和paramvoid loadModelAndParam(...)// 初始化是否成功boolean isLoadModelSuccess()// 输入rgba数据void inputRgba(...)// 进行推理void run(...)// 多输入多输出推理void runForMultipleInputsOutputs(...)// 得到推理结果Tensor getOutputTensor(...)// 关闭和清理内存void close()新的代码结构如下: ├── AndroidManifest.xml├── cpp│   └── ncnn│   ├── c_api_internal.h│   ├── include│   ├── interpreter.cpp│   ├── Interpreter.h│   ├── jni_util.cpp│   ├── jni_utils.h│   ├── nativeinterpreterwrapper_jni.cpp│   ├── nativeinterpreterwrapper_jni.h│   ├── tensor_jni.cpp│   └── tensor_jni.h├── java│   └── com│   └── didi│   └── aoe│   └── runtime│   └── ncnn│   ├── Interpreter.java│   ├── NativeInterpreterWrapper.java│   └── Tensor.java└── jniLibs ├── arm64-v8a │   └── libncnn.a └── armeabi-v7a └── libncnn.aInterpreter,提供给外部调用,提供模型加载,推理这些方法。NativeInterpreterWrapper是具体的实现类,里面对native进行调用。Tensor,主要是一些数据和native层的交互。AOE NCNN组件有以下几个特点: ...

September 10, 2019 · 1 min · jiezi

聊聊-Python-的单元测试框架一unittest

作者:HelloGitHub-Prodesire 前言说到 Python 的单元测试框架,想必接触过 Python 的朋友脑袋里第一个想到的就是 unittest。的确,作为 Python 的标准库,它很优秀,并被广泛用于各个项目。但你知道吗?其实在 Python 众多项目中,主流的单元测试框架远不止这一个。 本系列文章将为大家介绍目前流行的 Python 的单元测试框架,讲讲它们的功能和特点并比较其异同,以让大家在面对不同场景、不同需求的时候,能够权衡利弊,选择最佳的单元测试框架。 本文默认以 Python 3 为例进行介绍,若某些特性在 Python 2 中没有或不同,会特别说明。一、介绍unittest 单元测试框架最早受到 JUnit 的启发,和其他语言的主流单元测试框架有着相似的风格。 它支持测试自动化,多个测试用例共享前置(setUp)和清理(tearDown)代码,聚合多个测试用例到测试集中,并将测试和报告框架独立。 二、用例编写下面这段简单的示例来自于官方文档,用来测试三种字符串方法:upper、isupper、split: import unittestclass TestStringMethods(unittest.TestCase): def test_upper(self): self.assertEqual('foo'.upper(), 'FOO') def test_isupper(self): self.assertTrue('FOO'.isupper()) self.assertFalse('Foo'.isupper()) def test_split(self): s = 'hello world' self.assertEqual(s.split(), ['hello', 'world']) # check that s.split fails when the separator is not a string with self.assertRaises(TypeError): s.split(2)if __name__ == '__main__': unittest.main()上述示例中,通过继承 unittest.TestCase 来创建一个测试用例。在这个类中,定义以 test 开头的方法,测试框架将把它作为独立的测试去执行。 ...

September 10, 2019 · 3 min · jiezi

HelloDjango-第-14-篇交流的桥梁评论功能

作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 截止到目前为止我们的 django blog 文章展示部分,已经实现的“八九不离十”了。你以为本系列文章就要结束了吗?不能够!新的征程才刚刚开始,HelloDjango 系列文章刚刚过半,后面的文章你将接触更多博客系统的细节。向着一个小而全的博客系统前进、前进、前进,你定会收获颇多。 今天我们就来开启博客的评论功能,建起和读者的沟通桥梁。 创建评论应用相对来说,评论是另外一个比较独立的功能。Django 提倡,如果功能相对比较独立的话,最好是创建一个应用,把相应的功能代码组织到这个应用里。我们的第一个应用叫 blog,它里面放了展示博客文章列表和详情等相关功能的代码。而这里我们再创建一个应用,名为 comments 这里面将存放和评论功能相关的代码。首先进入到项目根目录,然后输入如下命令创建一个新的应用: > pipenv run python manage.py startapp comments可以看到生成的 comments 应用目录结构和 blog 应用的目录是类似的(关于创建应用以及应用的目录结构在 "空空如也"的博客应用 中已经有过详细介绍)。 创建新的应用后一定要记得在 settings.py 里注册这个应用,django 才知道这是一个应用。 blogproject/settings.py...INSTALLED_APPS = [ ... 'blog.apps.BlogConfig', # 注册 blog 应用 'comments.apps.CommentsConfig', # 注册 comments 应用]v...注意这里注册的是 CommentsConfig 类,在 博客从“裸奔”到“有皮肤” 中曾经讲过如何对应用做一些初始化配置,例如让 blog 应用在 django 的 admin 后台显示中文名字。这里也对评论应用做类似的配置: comments/app.pyfrom django.apps import AppConfigclass CommentsConfig(AppConfig): name = 'comments' verbose_name = '评论'设计评论的数据库模型用户评论的数据必须被存储到数据库里,以便其他用户访问时 django 能从数据库取回这些数据然后展示给访问的用户,因此我们需要为评论设计数据库模型,这和设计文章、分类、标签的数据库模型是一样的,如果你忘了怎么做,再回顾一下 创建 Django 博客的数据库模型 中的做法。我们的评论模型设计如下(评论模型的代码写在 commentsmodels.py 里): ...

September 10, 2019 · 5 min · jiezi

AoE如何管理好模型

作者:丁超 前言越来越多的业务会用到AI相关的技术,大多数的AI模型是部署在云端使用的,毕竟服务端计算更快,管理也更容易。随着终端设备性能提升,在终端使用 AI 模型有了更大的价值,可以更好满足业务对响应实时性、数据隐私性的需求。滴滴出行的银行卡识别功能也打算部署在客户端,但是遇到的问题也不少: 模型升级困难,模型在终端的存在一般都是已应用软件为载体,用户可以选择是否对应用软件进行更新,导致模型版本会产生分化。硬件适配问题,不同的终端设备因为厂商深度定制因素,会出现一些兼容问题不同模型运行框架不同,对于客户端工程师不够友好。针对这些问题滴滴的终端智能团队推出了AoE作为解决方案,设计之初就将多模型管理支持可能升级、多框架支持、模型加密等功能定为基础设施。 AoE是怎么做好模型管理的我们针对遇到的问题,主要做了3部分工作: 尝试了多机型覆盖测试做好模型的验证利用运行环境配制化来实现加载模型通过动态更新来升级模型下面针对这三项分别进行介绍。 运行环境配置化AoE SDK将推理框架总结了5个过程,它们分别是初使化、前处理、执行推理、后处理、释放资源。对 AoE 集成运行环境来说,最基本的便是抽象推理操作,通过 依赖倒置 的设计,使得业务只依赖AoE的上层抽象,而不用关心具体推理框架的接入实现。这种设计带来的最大的好处是开发者随时可以添加新的推理框架,而不用修改框架实现,做到了业务开发和 AoE SDK 开发完全解耦。 用户只需要简单的描述json文件即可完成对运行环境的配置,简化了用户的使用过程,更为简洁高效。 简单的配置如下: { "version": "1.0.0", // 版本号 "tag": "tag_mnist", // 区分业务场景 "runtime": "tensorflow", // runtime类型 "source": "installed", // 安装源 "modelDir": "mnist", // 所在文件夹 "modelName": "mnist_cnn_keras", // 模型文件名 "updateURL": "https://www.didiglobal.com" // 升级配置链接}机型覆盖测试针对硬件差异的问题,我们在做模型验证期间尝试了多机型的覆盖测试,将模型在不同机型上的表现都记录下来反馈给模型生产团队,帮助模型不断的升级修复。 截取了部分测试时产生的耗时对比数据大致如下: 虽然模型不相同,使用指令可能不同,但是大致也可以了解到机器的性能,具体数值仅供参考。在这个过程中,沉淀下来了benchmark工具来帮助验证多机型的覆盖测试,将来这个工具也会是开源的一部分来帮助大家验证模型的可用性,以及建立有效的机型比较。 动态更新AoE的模型管理模块将模型按分发方式分为两种: 本地模型,意为应用软件自带的模型远程模型,则是通过策略配置,从服务器下载匹配模型到本地的模型本地模型与远程模型最大的区别就是本地模型无法更改,只能跟随应用软件一起更新,而远程模型则是通过和本地模型作比较后更新的较新模型,模型与模型之间通过版本做比较。本地模型与远程模型二者可以共存,也可以单独存在,在最新版的滴滴出行中,为了减少包的大小甚至没有本地模型,所有的模型都是来自远端下载。 之所以将模型分成两部种,是为了保证模型是可用的且可靠的,为什么这么说?一般本地模型都是经过长时间测试后才作为稳定版本跟随APP带到了线上,既可以作为最新版本,又可以作为后来的稳定版本:即使发现后来下载升级的远程模型效果不理想也可以通过灰度测试停止远程使用远程模型的使用,保证模型的高可用性。 远程模型的存在使业务模型拥有了动态更新的能力,方便了产品的迭代,不再依赖客户端的发布周期。在动态开关的写协助下,甚至可以做到精确指定模型版本的加载。 整体模型管理的结构如下图: 模型加载怎么使用?模型管理器是AoE的一个基础组件,以iOS为例,组件实现在Loader目录下。默认支持的模型配置文件为json格式,运行环境配置化部分的代码就描述了mnist demo的配置。 模型和模型配置文件名的格式配置以及远程版本存放地址,都可以通过继承AoEModelConfig类来做修改,具体的使用方式可以参照squeezenet的实例 在已经开源的版本中AoE还为大家提供了单功能多模型的支持,拿银行卡识别来举例,整个过程分两步,一是找到卡片以及卡片上的数字区域,二是根据数字区域的图片识别出卡号,所以整个过程需要两个模型。开源项目使用的模型配置的tag字段主要用来定义模型所属功能,结合dir字段,就可以定位到具体的模型。 写在最后通过远程加载以及多维度的灰度测试配置是的帮助模型稳定安全运行的保证,虽然模型远程加载功能还没有在开源版本上线,但是已经安排在了日程中,预计在9月低就会上线。如果您对这个项目感兴趣,如果您在终端AI运行环境方面有想法,如果您在使用时有疑问,诚挚邀请您加入我们。 Github地址: 欢迎star~ QQ交流群(QQ群号:815254379): ...

September 9, 2019 · 1 min · jiezi

跨平台小程序开发风格指南

原文链接:https://github.com/ant-move/T...这是 Antmove 团队推出的小程序风格指南,该指南结合了微信小程序、支付宝小程序、百度小程序三大小程序框架特性沉淀而来的开发实践指南,旨在于建立一份适用于各小程序平台的开发规范,希望对众多小程序开发者们有所帮助。 下文中每一条规则的示例代码以支付宝小程序语法为例,其它小程序平台等同。规则归类先级 A:必要的这些规则会帮你规避错误,所以学习并接受它们带来的全部代价吧。这里面可能存在例外,但应该非常少,且只有你同时精通 JavaScript 和 各小程序平台开发规范才可以这样做。 优先级 B:强烈推荐这些规则能够在绝大多数工程中改善可读性和开发体验。即使你违反了,代码还是能照常运行,但例外应该尽可能少且有合理的理由。 优先级 C:推荐当存在多个同样好的选项,选任意一个都可以确保一致性。在这些规则里,我们描述了每个选项并建议一个默认的选择。也就是说只要保持一致且理由充分,你可以随意在你的代码库中做出不同的选择。请务必给出一个好的理由!通过接受社区的标准,你将会: 训练你的思维,以便更容易的处理社区共享的代码;不做修改就可以直接复制粘贴社区的代码示例;能够经常招聘到和你编码习惯相同的新人,至少跟小程序相关的东西是这样的优先级 D:谨慎使用有些小程序的特性的存在是为了照顾极端情况或帮助老代码的平稳迁移。当被过度使用时,这些特性会让你的代码难于维护甚至变成 bug 的来源。这些规则是为了给有潜在风险的特性敲个警钟,并说明它们什么时候不应该使用以及为什么。 优先级 A 的规则:必要的 (规避错误)组件名为多个单词,采用横杠分割这样可以避免和现有的以及未来的小程序基础组件相冲突,因为基础组件一版都是单个单词的。 支付宝小程序平台组件命名不支持驼峰形式,横杠形式的命名是都支持的。 反例"usingComponents": { "Todo": "../../dist/todo/index"}好例子"usingComponents": { "todo-item": "../../dist/todo/index"}组件属性组件的 props 需定义类型和默认值。 在支付宝小程序中,即使没有在 props 中声明的属性,组件也是可以接收到的,但是微信小程序和百度小程序是必须在组件中声明的属性才能接收到。 如果传值类型不同组件也是接收不到的,所以请给一个明确的数据类型。 为 for 设置键值在组件上总是必须用 key 配合 v-for,以便维护内部组件及其子树的状态。 反例<view> <view a:for="{{ todos }}"> {{ todo.text }} </view></view>好的例子<view> <view a:for="{{ todos }}" a:key="item.id"> {{ item.text }} </view></view>避免 a:if 和 a:for 用在一起请不要把 a:if 和 a:for 同时用在同一个元素上。 ...

September 9, 2019 · 2 min · jiezi

springbootplusV123发布CentOS快速安装环境构建部署启动项目

spring-boot-plusV1.2.3发布,CentOS快速安装环境/构建/部署/启动项目[V1.2.3-RELEASE] 2019.09.09 spring-boot-plusV1.2.3发布,CentOS快速安装环境/构建/部署/启动项目⭐️ New Features项目运行环境安装脚本CentOS快速构建/部署/启动项目脚本⚡️ Optimization优化 maven-assembly-plugin 项目打包插件???? Added/ModifiedAdd install-jdk.sh yum安装jdk8脚本Add install-git.sh yum安装git脚本Add install-maven.sh yum安装maven脚本Add install-redis.sh yum安装redis脚本Add install-mysql.sh yum安装mysql脚本Add install-all.sh 安装所有环境脚本Add download-install-all.sh 下载并安装所有环境脚本Add deploy.sh 下载项目/构建/部署/启动项目脚本Add maven-javadoc-plugin java api docs???? DocumentationCentOS Quick Installation Environment / Build / Deploy / Launch Spring-boot-plus Project spring-boot-plus java docs???? Dependency UpgradesUpgrade to springboot 2.1.8.RELEASEUpgrade to Mybatis 3.5.2Upgrade to Mybatis Plus 3.2.0Upgrade to Alibaba Druid 1.1.20Upgrade to Fastjson 1.2.60Upgrade to commons-codec 1.13Upgrade to commons-collections 4.4Upgrade to hutool-all 4.6.4CentOS快速安装环境/构建/部署/启动spring-boot-plus项目1. 下载安装脚本安装 jdk, git, maven, redis, mysqlwget -O download-install-all.sh https://raw.githubusercontent.com/geekidea/spring-boot-plus/master/docs/bin/install/download-install-all.sh2. 运行安装脚本sh download-install-all.sh3. 修改MySQL密码ALTER USER 'root'@'localhost' IDENTIFIED BY 'Springbootplus666!';exitmysql -uroot -pSpringbootplus666!4. 导入MySQL脚本create database if not exists spring_boot_plus character set utf8mb4;use spring_boot_plus;source /root/mysql_spring_boot_plus.sql;show tables;exit5. 下载部署脚本 deploy.shwget -O deploy.sh https://raw.githubusercontent.com/geekidea/spring-boot-plus/master/deploy/deploy.sh6. 执行脚本sh deploy.sh7.访问项目SpringBootAdmin管理页面http://47.105.159.10:8888 ...

September 9, 2019 · 1 min · jiezi

基础环境搭建

前提:macOS工欲善其事必先利其器 node下载安装git配置:命令行下git config --global user.name xxxgit config --global user.email xxxgit config --global push.default simplegit config --global core.quotepath falsegit config --global core.editor "vim"vscode Github账号ssh

September 8, 2019 · 1 min · jiezi

git基本使用命令

git cherry -v:列出当前待commit列表git reset --soft HEAD^:撤销上一次commitgit reset --soft HEAD~2:撤销最后2次commit

September 7, 2019 · 1 min · jiezi

搭建github静态博客

极简风格博客 =windows + hexos + github这是这篇教程的成品图 博客搭建分为三步:创建github域名及空间git,nodejs,hexo下载及安装配置环境1.创建github域名及空间进入github官网,注册并登录。登录后,点击右上角的 “+” 号,选择 "new repository" , 会出现以下界面: 在 repository name 中填入 username.github.io 。(username指的是前面owner的用户名,比如我这里应该填 wenjie710.github.io 。)然后点击最下面的create repository 即可。2.安装 git,nodejs,hexo下载地址:git官网下载:https://git-scm.com/download/winnodejs官网下载:https://nodejs.org/en/download/以上两个工具都是直接下载的exe文件,点击安装即可。安装完成之后在文件夹中点击鼠标右键会看到下拉菜单中有一个 Git Bash ,这是一个类似于Liunx的终端,在里面可以模拟Linux下的终端进行操作。git 和 nodejs 安装完成之后才能安装hexo。hexo的安装十分简单,只需要在命令提示符(cmd)中输入以下命令即可。 npm install -g hexo-cli3.配置环境3.1 配置ssh打开 Git Bash ,执行下面的命令生成 SSH 访问私钥及公钥。 ssh-keygen -t rsa -C "email@email.com"输入命令回车之后会提示你输入一些东西,不用管。一直回车到底就好了。然后你的 ~/.ssh 文件下就会生成两个文件 id_rsa 和 id_rsa.pub 。 打开你的 Github -> setting -> SSH Keys 。然后点击 New SSH Key 创建一个新的SSH Key。将文件 id_rsa.pub 中的所以内容复制粘贴到 Key 下面。然后使用下面的命令测试是否可以连接上 Github. ...

August 28, 2019 · 1 min · jiezi

git学习笔记

学习廖雪峰老师博客,一些关于git的笔记。如有记录错误,望能不吝赐教。 1.git诞生git是linus为了linux进行版本控制而自己用c写的分布式版本控制系统,在21世纪初,有cvs、svn这些免费的版本控制系统,这些集中式版本控制系统不仅速度慢,而且需要联网才能使用;还有一些商用的版本控制系统,比如linus后来选择的BitKeeper。 2.集中式vs分布式集中式: 版本库是存放在中央服务器的,干活前,要先从中央服务器取得最新的版本,结束后,还要把自己的活推送给中央服务器。集中式版本控制系统还需要联网才可以进行作业,所以网速慢的话,工作前后等待的时间就极其耗时。分布式: 分布式根本没有”中央服务器“的概念,每台电脑都是一个完整的版本库,这样工作就不需要联网了,版本库在自己的电脑上。工作的时候,只需要把各自的文件互相推送给对方就行了。与集中式相比,分布式更加安全。即使有一个人电脑坏掉了也没关系,因为每个人的电脑都有完整的版本库,可以从别人电脑里复制。但如果集中式版本控制系统的中央服务器坏掉了,那大家什么都不能做分布式通常也将一台电脑充当”中央服务器“来进行方便电脑与电脑直接的信息推送,但是即使这台充当”中央服务器“的电脑坏了也没关系,因为每个人的电脑都有完整的版本库,只是信息互相推送比较麻烦,需要在同一局域网,两台电脑间才能互相访问。3.安装git 在linux上安装git$ git The program 'git' is currently not installed. You can install it by typing: sudo apt-get install git 输入git看有没有安装sudo apt-get install git 如果没有,据说通过它就可以直接安装 在Mac OS X上安装git一个通过homebrew (http://brew.sh/)一个是通过Xcode:选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了 在Windows上安装git在git官网直接下载安装程序,国内镜像( https://github.com/waylau/git...)开始菜单里找到“Git”->“Git Bash”,蹦出一个类似命令行窗口的东西,就说明Git安装成功!安装完成后,还需要最后一步设置,在命令行输入:$ git config --global user.name "Your Name"$ git config --global user.email "email@example.com" 4.创建版本库 版本库又名仓库,英文:repository,可以简单理解成一个目录,这个目录里面的所有文件都可以被git管理起来,每个文件的修改、删除,git都能跟踪。所有的版本控制系统都只能跟踪文本文件的改动,比如TXT文件、网页、程序代码等等,而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但不能跟踪文件的变化。创建一个版本库 git init先创建一个空目录,mkdir <fileName>再通过git init命令把这个目录变成git可以管理的仓库。其中有一个.git的目录是git用来跟踪管理版本库的(这是一个隐藏目录,用ls -ah命令可以看见)。 把文件添加到版本库第一步,用命令git add告诉git,把文件添加到仓库第二步,用命令git commit告诉git,把文件提交到仓库(git commit命令执行成功后会告诉你,1 file changed:1个文件被改动(我们新添加的readme.txt文件);2 insertions:插入了两行内容(readme.txt有两行内容))添加文件到Git仓库,分两步: 使用命令git add <file>,注意,可反复多次使用,添加多个文件;使用命令git commit -m <message>,完成5.版本回退 ...

August 28, 2019 · 3 min · jiezi

Git-如何撤回某一次提交

Git 如何撤回某一次提交在 master 分支做了一次 commit ??!!git add index.jsgit commit -m '自以为是在开发分支其实是在master分支的一次提交'之前没有出过这样的错误。就算出现也是直接push了然后再 reset 回滚然后再次 push -f。 如何合适的解决这种情况reset的三个参数--mixed(默认参数)重置位置的同时,只保留Working Tree工作目录的內容,但会将暂存区 和 Repository 中的內容更改和 reset 目标节点一致,所以原节点和Reset节点之间的变更文件,会放入Working Tree工作目录中。 简单来说就是:不删除工作空间改动代码,但是撤销commit,并且撤销git add git reset --mixed HEAD^ 和 git reset HEAD^HEAD^ HEAD~1 HEAD~2 其中 HEAD^ HEAD~1 同为上一个版本, HEAD~2 为上两个版本,也就是两次commit,以此类推如果需要再撤销修改 git checkout index.js--soft重置位置的同时,保留 working Tree 工作目录和暂存区的内容,只让 repository 中的内容和 reset 目标节点保持一致,所以原节点和reset节点之间的变更文件会放入暂存区中。 简单来说就是:不删除工作空间改动代码,撤销commit,不撤销git add --hard重置位置的同时,直接将 working Tree工作目录、 暂存区及 repository 都重置成目标 reset 节点的內容。 简单来说就是:删除工作空间改动代码,撤销commit,撤销git add 这个操作会直接恢复到了上一次的 commit 状态。如果已经push origin在做完上面的操作后 ...

August 21, 2019 · 1 min · jiezi

HelloDjango-第-09-篇让博客支持-Markdown-语法和代码高亮

作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库为了让博客文章具有良好的排版,显示更加丰富的格式,我们使用 Markdown 语法来书写博文。Markdown 是一种 HTML 文本标记语言,只要遵循它约定的语法格式,Markdown 的解析工具就能够把 Markdown 文档转换为标准的 HTML 文档,从而使文章呈现更加丰富的格式,例如标题、列表、代码块等等 HTML 元素。由于 Markdown 语法简单直观,不用超过 5 分钟就可以轻松掌握常用的标记语法,因此大家青睐使用 Markdown 书写 HTML 文档。下面让我们的博客也支持使用 Markdown 写作。 安装 Python Markdown将 Markdown 格式的文本解析成标准的 HTML 文档是一个复杂的工程,好在已有好心人帮我们完成了这些工作,直接拿来使用即可。首先安装 Markdown,这是一个 Python 第三方库,在项目根目录下运行命令 pipenv install markdown。 在 detail 视图中解析 Markdown将 Markdown 格式的文本解析成 HTML 文本非常简单,只需调用这个库的 markdown 方法。我们书写的博客文章内容存在 Post 的 body 属性里,回到我们的详情页视图函数,对 post 的 body 的值做一下解析,把 Markdown 文本转为 HTML 文本再传递给模板: blog/views.pyimport markdownfrom django.shortcuts import get_object_or_404, renderfrom .models import Postdef detail(request, pk): post = get_object_or_404(Post, pk=pk) post.body = markdown.markdown(post.body, extensions=[ 'markdown.extensions.extra', 'markdown.extensions.codehilite', 'markdown.extensions.toc', ]) return render(request, 'blog/detail.html', context={'post': post})这样我们在模板中显示 {{ post.body }} 的时候,就不再是原始的 Markdown 文本了,而是解析过后的 HTML 文本。注意这里我们给 markdown 解析函数传递了额外的参数 extensions,它是对 Markdown 语法的拓展,这里使用了三个拓展,分别是 extra、codehilite、toc。extra 本身包含很多基础拓展,而 codehilite 是语法高亮拓展,这为后面的实现代码高亮功能提供基础,而 toc 则允许自动生成目录(在以后会介绍)。 ...

August 21, 2019 · 2 min · jiezi

Blockstack2-Blockstack-ID注册

本篇文章主要记录Blockstack ID注册的流程; 在介绍注册流程之前,先简单的介绍一下Blockstack ID; 相对于传统互联网来说,Blockstack ID更像是统一的账号系统;即一个账号即可登录和授权所有基于Blockstack搭建的网站和DApp,是不是很方便。 对我而言,Blockstack ID更像是一把钥匙,一把万能钥匙,一把打开DApp大门的万能钥匙,不论有多少个DApp,不论以后会增加多少个DApp,只要你有Blockstack ID你就能够登录和授权,并且进行相关的操作;是不是很神奇。 对于经常注册账号和设置不同密码的来说,这简直是福音,当然安全性和友好性是相对的,一旦助记词丢失,账号中所有信息都会丢失,所以一定要保存好助记词,并且对密码进行合理的保护,没有完美的解决方案,只有适合的解决方式。 Blockstack ID注册1.打开https://blockstack.org选择Create ID 2.跳转到https://browser.blockstack.org/sign-up有2种选择: Create new ID 创建一个新IDSign in with an existing ID用已经存在的ID进行登录我们选择Create new ID 创建一个用户名,并且程序会自动验证是否可用。 4.创建密码 5.输入邮箱,用来发送recovery Key:recovery Key要进行合理保存。 6.创建成功后的信息bitcoinj.id.blockstack就是你的Blockstack ID 7.保存加密Key;加密Key要安全保存,会引起账号的丢失。加密Key可以用来进行账号的恢复。 以上的就是Blockstack ID注册的流程;已经注册了 Blockstack ID,我们应该怎么用呢? 下一篇:Blockstack ID授权登录

August 21, 2019 · 1 min · jiezi

Python-命令行之旅-深入-argparse-一

作者:HelloGitHub-Prodesire HelloGitHub 的《讲解开源项目》系列,项目地址:https://github.com/HelloGitHu...前言在第一篇“初探 argparse”的文章中,我们初步掌握了使用 argparse 的四部曲,对它有了一个基本的体感。但是它具体支持哪些类型的参数?这些参数该如何配置?本文将带你深入了解 argparse 的参数们。 本系列文章默认使用 Python 3 作为解释器进行讲解。若你仍在使用 Python 2,请注意两者之间语法和库的使用差异哦~参数动作你是否还记得?在上一篇四部曲中的第二步是定义参数,在这个步骤中,我们指定了 action 入参: parser.add_argument('--sum', dest='accumulate', action='store_const', const=sum, default=max, help='sum the nums (default: find the max)')那么这里面的 action,也就是 参数动作,究竟是用来做什么的呢? 想象一下,当我们在命令行输入一串参数后,对于不同类型的参数是希望做不同的处理的。那么 参数动作 其实就是告诉解析器,我们希望对应的参数该被如何处理。比如,参数值是该被存成一个值呢,还是追加到一个列表中?是当成布尔的 True 呢,还是 False? 参数动作 被分成了如下 8 个类别: store —— 保存参数的值,这是默认的参数动作。它通常用于给一个参数指定值,如指定名字:>>> parser.add_argument('--name')>>> parser.parse_args(['--name', 'Eric'])Namespace(name='Eric')store_const —— 保存被 const 命名的固定值。当我们想通过是否给定参数来起到标志的作用,给定就取某个值,就可以使用该参数动作,如:>>> parser.add_argument('--sum', action='store_const', const=sum)>>> parser.parse_args(['--sum'])Namespace(sum=<built-in function sum>)>>> parser.parse_args([])Namespace(sum=None)store_true 和 store_false —— 是 store_const 的特殊情况,用来分别保存 True 和 False。如果为指定参数,则其默认值分别为 False 和 True,如:>>> parser.add_argument('--use', action='store_true')>>> parser.add_argument('--nouse', action='store_false')>>> parser.parse_args(['--use', '--nouse'])Namespace(nouse=False, use=True)>>> parser.parse_args([])Namespace(nouse=True, use=False)append —— 将参数值追加保存到一个列表中。它常常用于命令行中允许多个相同选项,如:>>> parser.add_argument('--file', action='append')>>> parser.parse_args(['--file', 'f1', '--file', 'f2'])Namespace(file=['f1', 'f2'])append_const —— 将 const 命名的固定值追加保存到一个列表中(const 的默认值为 None)。它常常用于将多个参数所对应的固定值都保存在同一个列表中,相应的需要 dest 入参来配合,以放在同一个列表中,如:不指定 dest 入参,则固定值保存在以参数名命名的变量中 ...

August 20, 2019 · 3 min · jiezi

从搭建到部署快速构建一个私人博客

有时候我们希望有一个受控的博客,来记录或分享一些东西。这个博客的主题内容由你自己来决定,可以是技术分享(编程、汉化分享等),也可以是生活感想。 本文将介绍一个可以迅速搭建并部署的受控博客。阅读本文前,希望你对以下知识点有所了解: git(版本控制) 的基础使用markdown 的使用为什么要搭建博客在线类博客有很多选择,为什么我们需要从零搭建新的博客呢?自己搭建的博客有什么好处吗? 首先,前文所提的 “博客受控”,指的就是能够自己控制的博客的样式、内容等,自己想怎么改就怎么改。 内容受控是指我们知道在线类的博客是受平台限制的,这意味着你所发表的内容是需要受审才能发出的,一些敏感的技术词汇,该篇文章都可能会被和谐或被删除。但在自己搭建博客就没有这样的问题,最起码能保留源文件。 其二,博客的样式是受控的。像著名在线博客CSDN上一些博主的文章确实是有学习参考的价值,但问题的是该站广告是在是太多了,字体和排版的阅读体验并不太好。但如果是自己搭建的博客的话,就可以自己着手优化这些问题。 但博客的搭建还需要我们从各方面考虑利弊。平台类博客会有相应的推荐系统,会对同类型文章相互引流,在 SEO 方面会做得比我们好。 个人搭建的博客,刚起步时的浏览量并不高,但是可以通过SEO等方式来逐步增加自己网站的权重。或者提高博客的质量和干货,读者认为文章有价值,自然会收藏起来形成熟客。 那么博客能写什么东西呢?在日常生活中,有很多知识点是呈碎片状,写博客的本质上就是对自己知识的一种梳理,然后再将这些知识分享出来,可能会有对这方面知识有疑惑,或者想找到解决方案,自身分享出来的东西能给读者做一定的参考。同时这也会是一个良性循环,因为分享的同时,你可能也需要去查询一些资料,同时也可以找到别人遇到过并分享出来的解决方案,是一个相互收益的过程。 我们的基本需求是梳理与分享,那么更应该把注意力放在内容本身,网站布局的排版样式等则是增加读者阅读体验的问题。因此我们可以使用现成的博客框架快速完成这些事。 博客框架有很多种选择,笔者选择的是 Hexo,因为它足够便捷优雅。 startHexo 依赖 Node.js 和 NPM包管理,Node.js 安装后一般会自带NPM。 我们打开终端(Windows PowerShell / cmd.exe、bash、macOS 里的终端),输入以下命令: # 检查 npm 是否安装成功npm -v# 安装 hexo cli,# 如果安装速度过慢的话,可以安装国内的淘宝镜像# 在命令行输入 ` npm install -g cnpm --registry=https://registry.npm.taobao.org`npm install -g hexo-cli# 检查 hexo 是否安装成功,并查看版本hexo -v依赖安装成功后,我们可以在命令行输入 hexo help 查看使用方式(描述是英文,示例部分笔者将其转为中文): Usage: hexo <command> commanddescriptionhelp获取命令的帮助init创建一个新的 Hexo 文件夹version显示版本信息使用 hexo help [command] 可以查看更多的信息, 如: hexo help init# Usage: hexo init [destination]# Description(描述):# 在指定的路径或当前目录中创建一个新的Hexo文件夹.# Arguments(参数):# destination 文件夹路径。 如果未指定,则在当前文件夹中初始化# Options(选项):# --no-clone 复制文件而不是从GitHub克隆# --no-install 跳过 npm 依赖安装(默认初始化会自动装依赖)全局选项: ...

August 20, 2019 · 4 min · jiezi

手把手教你使用Hexo和github搭建免费个人博客网站

俗话说的好“吃水不忘挖井人”,当自己体验过Hexo搭建个人网站后,也来分享一下搭建过程遇到的乐趣以及遇到的坑! 准备工作(电脑配置工具)在搭建Hexo博客之前,首先需要简单在你电脑安装一些工具以及依赖包(具体安装方法相信大家都会,就省略了) 首先要有一个github账号其次安装node.js,npm依赖然后安装git工具(当然电脑自身的cmd工具也是可以用的)创建github网站(username.github.io的github仓库)新建一个名为“你的用户名.github.io”的仓库,比如说,如果你的github用户名是mengnn,那么你就新建"mengnn.github.io"的仓库(必须是你的用户名,其它名称无效),将来你的网站访问地址就是 mengnn.github.io了,对的,就是这么方便。 <!--more--> 当然,一个github账户下只能创建一个以此命名的仓库,用来直接访问。 点击New repository输入Repository name,必需为username.github.io格式。username替换为用户名点击按钮Create repository进入仓库username.github.io,点击setting,找到GitHub Pages模块点击choose a theme选择一个页面主题访问https://username.github.io就可以访问博客网站了为github设置SSH Keys之所以配置SSH Keys,是因为你提交代码肯定要拥有你的github权限才可以,但是直接使用用户名和密码太不安全了,所以我们使用ssh key来解决本地和服务器的连接问题。 首先检查机器上是否已经存在id_rsa.pub文件 cd ~/. ssh #检查本机已存在的ssh密钥如果不存在那就通过命令生成秘钥 ssh-keygen -t rsa -C "邮箱地址"一路回车就好(记得应该是连续3次回车),最终会生成一个文件在用户目录下,打开用户目录,找到.ssh\id_rsa.pub文件,记事本打开并复制里面的内容。 打开你的github页面,点击setting进入---> SSH and GPG keys ---> New SSH key,然后把你复制的内容放到Key中,其中Title中的内容可以随便填一个就ok了,如下图: 添加成功保存就OK了。 测试SSH Key输入下面命令,测试SSH Key是否安装成功 ssh -T git@github.com # 不用改邮箱地址如果提示Are you sure you want to continue connecting (yes/no)?,输入yes,然后会类似于:`Hi mengnn! You've successfully authenticated, but GitHub does not provide shell access.`的字符,说明你安装成功了。 安装Hexo以上准备工作完成后,就要放大招了,对,接下来就是重头戏-本地部署Hexo。 ...

August 19, 2019 · 1 min · jiezi

vuepress搭建静态网站

vuepress搭建静态网站全局安装 npm install -g vuepress 或者 yarn global add vuepress新建一个文件夹 (例如 my-vuepress-test) mkdir my-vuepress-test (新建文件夹)cd my my-vuepress-test (切换至my-vuepress-test文件夹下)npm init -y (-y表示使用默认方式创建package.json)打开自动生成的package.json文件,默认创建的文件如下: { "name": "my-vuepress-test", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", }, "author": "", "license": "ISC", "devDependencies": { "vuepress": "^1.0.3" }}然后在scripts属性中输入一下指令 "docs:dev": "vuepress dev docs", (npm脚本语句 启动服务) "docs:build": "vuepress build docs" (npm脚本语句 编译打包输出docs文件夹里面的内容)然后在my-vuepress-test夹中创建docs文件夹,然后在创建README.md文件(编译启动后默认展示文件) //README.md 文件里面 随便输入一些内容 相当于index.html 例如:# Hello VuePress 初次遇见在刚创建的docs文件夹下在创建.vuepress文件夹,在这个文件下在创建config.js文件 ...

August 18, 2019 · 1 min · jiezi

如何在Github上发布自己写的代码给别人使用

在日常开发,我们都会用到别人写的第三方库,那么我们也可以把自己写的代码发布到github给别人使用首先要新建一个人仓库,命名叫goutil,使用public(私有仓库不能被别人见到哦!) 然后clone到本地 git clone https://github.com/startdusk/goutil.git这里我们使用go mod管理go代码依赖,进入到goutil目录下,执行 go mod init github.com/startdusk/goutil # 使用和github.com上的路径做包名新建文件夹hash,这次我们写个常见的md5加密函数:goutil/hash/md5.go package hashimport ( "crypto/md5" "encoding/hex" "errors" "fmt" "io" "os")// get file md5func FileMd5(filename string) (string, error) { file, err := os.Open(filename) if err != nil { return "", errors.New( fmt.Sprintf("md5.go hash.FileMd5 os open error %v", err)) } h := md5.New() _, err = io.Copy(h, file) if err != nil { return "", errors.New(fmt.Sprintf("md5.go hash.FileMd5 io copy error %v", err)) } return hex.EncodeToString(h.Sum(nil)), nil}// get string md5func StringMd5(s string) string { md5 := md5.New() md5.Write([]byte(s)) return hex.EncodeToString(md5.Sum(nil))}下面是测试代码:goutil/hash/md5_test.go ...

August 18, 2019 · 2 min · jiezi

如何打造一个上千Star的Github项目

前言每一个程序员都或多或少接触过Github,至少是听说过吧。而Github最大的好处是在于程序员可以不用付出任何费用,可以在上面参考、借鉴甚至是照搬其他人贡献的项目,因为这一切都是开源的。另外,任何一个Github用户也可以在上面对自己感兴趣的项目做出贡献。所谓贡献,就是对已有的代码进行更正、优化、开发等操作,让项目发展得越来越棒。而且,Github的Star机制让项目的受欢迎程度得到很好的展示。如果您去Github上搜索一个Vue的后台管理模板,您很可能会选择几万Star的Vue-Element-Admin(就像您去挑选晚餐地点,一般会去大众点评上选评价足够高的餐厅)。千万别小看Star这样类似点赞的机制,这些Star的背后是大多数程序员的认可,Github Star数量可比朋友圈的点赞数量要有技术含量得多。我不是在吹捧那些点赞数多的项目,我只是在强调一种增加技术影响力的方式:打造一个上千Star的Github项目。Github作为世界上最大的开源项目管理中心,可以让任何人有机会实现这个目标。 另外,作者只是一个普通人,是一点一滴尝试了很多办法、做出了很多努力才收获了上千Star,并没有很多大佬那样更出色的项目。作者将从自己的角度给大家介绍自己积累的经验教训,从项目定位、产品开发、推广渠道等方面来讲。如果大佬们有更多更优秀的作品和经验,欢迎随时交流。 关于作者的项目Crawlab是作者近期在开发的Github项目,是一个专注于爬虫的管理平台。这个项目从今年3月份上线以来,到现在总共收到了大约1.1k个Github Stars(如下图)。 最初Crawlab是基于Celery的分布式爬虫管理平台,后来由于稳定性、性能等考虑,在v0.3.0版本中将Python Celery改为了Golang,稳定性和性能都得到了极大的提升。Crawlab不仅支持主流的爬虫框架,例如Scrapy,还支持Python、NodeJS、Go、Java、PHP等多种编程语言以及多种爬虫框架。Crawlab的目的是让爬虫工程师以最轻松的方式来管理和运行他们开发的爬虫。Crawlab自上线以来,一直受到爬虫爱好者们和开发者们的好评,不少使用者还表示会用 Crawlab 搭建公司的爬虫平台。在文末有关于Crawlab的往期文章,想要了解更多Crawlab的读者可以去看一下。 Github: https://github.com/tikazyq/crawlab 寻找痛点任何一个产品,都是为需要的人服务的。这个受众可以是您自己,也可以是您的朋友,也可以是完全不认识的陌生人。此外,一个优秀的产品必须解决用户的问题,或者说是痛点。就像雪中送炭那样,恰当的时间出现了恰当的解决办法,别人才会毫不犹豫的使用这个东西。分布式爬虫工具PySpider(13.5k stars)为什么那么受欢迎,就是因为它解决了那些需要抓取大量网站的爬虫开发工程师的管理困难的痛点。Web框架Flask(46k stars)因为其解决了Web开发上手困难的问题(相比于Django、Tornado这样的传统框架),受到了Web开发者的喜爱,在Github上占据一席之地。基于Vue Element的管理后台框架 Vue-Element-Admin(39k stars)让前端开发不用从零开始搭建管理后台,开箱即用,成为Vue开发者的香饽饽。如何寻找到用户的痛点是我们能打造一个优秀产品或项目的首要问题。 从自身周围寻找用户痛点您可能会纳闷,我周围没有感觉到有痛点的用户。如果您这么觉得,您一定是没有注意观察。在工作中我们会处理成千上万的问题,包括一些技术问题或非技术问题。而这些问题的产生,一定是有没有满足到的需求导致的,而这正是可能的出发点。 例如,作者的开源爬虫管理平台Crawlab就是在思考一个工作问题时诞生的。作者所在的部门有上百个爬虫,其中包括了Selenium爬虫和其他类型的爬虫。我们当时的爬虫管理方式和实现方式都有非常多的局限性,导致了扩展性不高、排查异常困难等问题。我们有一个Web UI界面,但是仅仅局限于业务,没有专注于爬虫本身。作者当时思考,是不是只有我们公司才遇到这个问题,还是这个问题是一个普遍问题,几乎每个需要爬虫的公司都会遇到。为了验证这个假设,作者花了半个月的时间做了一个最小可行性产品(MVP),Crawlab v0.1版本,只有最基本的执行爬虫脚本的功能。结果,第一版发布后陆陆续续收到正面反馈,也有不少改进建议。第一天的Star数就达到了30,后面两天涨到了100。这验证了我的假设,爬虫管理困难这个问题是普遍存在的,大家都觉得Crawlab是个不错的idea,愿意来尝试。这才开始让作者更有动力不断完善这个产品。所以,从身边的问题出发是个很好的开始。 扩大自己的知识圈知识就是力量,这句话很正确。在开发产品的过程中我们不仅需要了解自身产品,还需要了解自己的客户,更需要了解自己产品的市场及竞争对手。我们需要不断完善更新自己的知识库,以在后续的开发、推广产品过程中作出最优的选择。扩大知识圈的渠道有很多,掘金就是一个很不错的渠道,上面不仅有各种优质的技术文章,更有掘金小册,可以帮助读者快速了解一项技术。除了掘金以外,还有其他很多优秀的技术网站,包括SegmentFault、GitChat、V2ex等等。相信各位读者及大佬也有自己获取知识的渠道,可以加作者微信tikazyq1分享交流下。 以自己举例,在开发Crawlab之前,我已经是掘金的重度阅读者,而且还购买了韦世东写的掘金小册《Python 实战:用 Scrapyd 打造个人化的爬虫部署管理控制台》,在小册中不仅了解了爬虫部署管理平台的原理和基础知识,还了解到了市场上已存在的爬虫管理平台Gerapy。这为后来我开发Crawlab积累了大量的宝贵经验。我又了解了市面上所有的爬虫平台,无一例外是基于Scrapyd的,因此我在想万一有想要管理非scrapy爬虫的呢,他们会使用什么工具来管理。后面我又做了些研究,发现Crawlab才是他们解决该问题的方法。因此,花一些钱购买知识是非常值得的,我在获取知识的同时帮助了我寻找痛点。 完善产品您可能会认为本小节是在讲如何开发产品,但不是。本小节将讲如何在开发产品中花最少的时间干最正确的事情。用户满意了,增加Star数是自然而然的事情。 我们不可能在第一时间做到一步到位。因此,不断完善产品来满足用户需求变得尤为重要。《精益创业》中的作者定义了最小可行性产品(Minimal Viable Product,MVP),也就是以最低成本尽可能展现核心概念的产品策略。因为我们的时间很宝贵(对于经常需要加班的朋友来说,更是如此),花费大量时间在完善各种不必要的功能上会是极为浪费的行为。我们没有必要花时间开发那些用户认为不重要的功能。如何做到不浪费时间,只开发用户喜爱的功能呢? 询问用户直接询问用户是最为直接也是最有效的方式。我在发布完Crawlab第一版的时候成立了一个微信群,并在推广的时候邀请用户加入,因此积累了一部分实际用户与潜在用户。我在开发一个新功能前我会询问群里的朋友,他们是否喜爱这样一个功能,如果开发这样的功能他们是否会使用。我询问群友是否都在用Crawlab,很多人都回答感兴趣但是没有。这显然是个令人失望的答案,但我并没有丧失信心。我接着问了为什么,结果他们都认为Crawlab虽然不错,但部署太麻烦了。然后我在群里问了他们关于Docker的意见,群友一致认为如果有Docker会非常棒。而现在,Docker变成了部署Crawlab的首选项,几乎每一个用户都是用的Docker来部署Crawlab。 另外一个有效的询问用户的方式是问卷调查。当Crawlab的Golang版本v0.3.0发布后,我在群里发放了问卷调查,邀请用户回答他们认为最重要的功能,答案如下图。统计后发现,任务监控和可配置爬虫是最为重要的两个功能。因此,我会在接下来的开发过程中优先考虑开发这两个功能。 统计用户行为现在的大公司都会在网站或App中做埋点上报统计用户行为数据。这是也是非常有效的了解用户偏好的工具,而且这种方法还排除了用户偏见(问卷中被调查者可能心口不一)。在Crawlab中,嵌入了一小段JS代码,让用户行为数据得到统计,上传到第三方统计工具百度统计上面。下图是用户用得最多的行为。 从该报表可以看到,用户主要在爬虫页面和任务页面来回切换标签,我可能还不知道它是哪些标签,但我肯定会在这两个页面上下更多功夫,来优化Crawlab。当然,这一切的用户数据收集都是经过用户同意的,用户如果在首次加载选择不同意的话,数据将不会上传(有些框架都不会询问用户的意愿,它们会直接上传统计数据)。 其他完善产品的工具例如A/B测试作者不会讲了,因为这要求更多的资源和流量,Crawlab还没有这样雄厚的资源。感兴趣的可以自己去百度。 产品推广如果没有人了解您的产品,您的产品再优秀也只能被凉在一边,无人问津,沾染灰尘。因此,推广您的产品也是增加Github Star数的非常重要的途径。下面我将介绍一些常用的产品推广的方式,包括一些常用的有效渠道,以及如何查看后台数据来监控渠道有效性。 写技术文章这是我认为最有效的渠道了。在推广Crawlab的实践中,我发现在掘金上写文章是一个非常重要的推广产品的方式。下图是用户通过各种渠道(微信群、朋友圈、掘金自然流量)接触到技术文章方式。 将您的文章展示给更多用户有助于提高您产品的曝光度,而且如果用户对您产品感到满意的话,会点击您嵌入到文章中的导航到Github项目地址的链接,然后给您项目Star。我每次在掘金上写完文章之后,我都会将文章的链接发到各个相关的微信群里,感兴趣的群友会点击链接到文章里,从而更有可能到Github上给项目点Star。同理,我也会发布到朋友圈或其他渠道。如果文章读者不会第一时间Star,没关系,他在了解到您项目之后很可能会在后面的曝光过程给您Star。在市场营销中,这就叫再营销(Remarketing)。千万不要觉得写文章是一件没有用的事情,相反,它将帮助您更早地收获上千Star项目。 当然,我们不仅仅有掘金这一个渠道,我们还有很多其他选择。下面列出了我能够知道的推广渠道。 渠道简介掘金偏前端的技术社区V2ex技术论坛GitChat技术知识分享平台微信公众号不用过多介绍了SegmentFault技术问答、技术博客网站知乎知识问答网站CSDNIT技术社区开源中国开源技术交流社区简书博客网站其他读者可以微信我tikazyq1添加您应该定期去Github上查看您的流量来源,看看哪些渠道是有用的。具体地址是: 主页 -> Insights -> Traffic。Crawlab最近30天的Traffic如下图。 可以看到,Github内部、掘金以及V2ex是Crawlab的三大流量来源。上图中8月14号的流量高峰是因为我在当天发了一篇文章《如何快速搭建实用的爬虫管理平台》。 当然,要发布这么多文章这么多平台不是一件容易的事情。作者和另外一些朋友打算基于爬虫的方式,写一个自动发布文章的工具,名字叫ArtiPub(意思为Article Publisher),Github为 https://github.com/crawlab-te... 。现在框架搭建好了,准备不断开发。欢迎大家随时关注。 改造Github首页光是有流量还不行,您还需要对让自己的README显得更加具有吸引力。下列是几个增加吸引力的内容,建议您都该考虑加入到您的项目主页中。 徽章中英文目录产品截图使用安装社区以上几种方式都可以让您的Github首页显得更加专业。您需要清晰地阐述您的项目的安装方式,以及中文介绍,这将有利于让您的读者更加容易上手您的产品。产品截图是非常有效的展示您产品的方式,人都是视觉动物,他们会更倾向于有截图的产品(Airbnb就做的很不错,他们在房屋截图中用了大光圈照片)。如果您能够加上Logo之类的就更棒了。 下图是Crawlab的首页,虽然不完美,但对于增加吸引力来说很有效。 项目管理项目管理是一个可选项,但对于推进和监控项目进度来说是非常有效的。可以用酷炫的项目管理工具,例如Teambition、禅道或Trello,也可以用简单的Excel。我在Crawlab中就是用的Excel。下图是早期Crawlab项目管理的电子表格。 如何进行项目管理,这里我就不详细讲了,因为我也不是专业项目管理经理,也没有PMP证书。后期如果有需求的话我可以在另一篇文章中专门介绍项目管理。 总结本篇文章主要从自己项目Crawlab的角度出发,介绍了如何打造一个上千Star的Github项目的方法。其中包括寻找痛点、完善产品、产品推广和项目管理。相信每一个获得了上千Star的项目的作者都有自己的方法论。我看了老乡大佬CrossoverJie的相关文章《1K star+ 的项目是如何炼成的?》,获得了很多灵感,其中很多理念与本篇文章是相似的。不管如何,都祝愿读者能从本篇文章中收获知识,祝您能早日收获自己的上千Star项目。已经收获的,也可以分享下您的经验。 ...

August 17, 2019 · 1 min · jiezi

git常用命令分享

1.简写git config --global alias.st 'status' // git stgit config --global alias.cm 'commit' // git cm -m 'msg'git config --global alias.unstage 'reset HEAD' // git unstage fimeNamegit config --global alias.last 'log -1' // git last// 查看历史提交,推荐git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" // git lg2.存储暂时存储// !只能存储已经被track的文件git stash取出最近存储git stash pop3.合并commitgit rebase -i 要合并的两个分支的上一个分支号squash 表示这个 commit 会被合并到前一个commit4.merge另一个分支上指定的文件git checkout --patch 要merge的分支 filePath5.将一个分支指定的commits合并到另一个分支git cherry-pick 62ecb36.回退版本git reset --hard HEAD^ // 回退到上个版本git reset --hard HEAD~n // 回退到n次提交之前git reset --hard commit_id // 退到/进到指定commit版本7.切换并跟踪远程新分支git checkout --track origin/branch_namegit checkout -b localBranch origin/originBranch8.标签操作git tag tagNamegit tag -a tagName -m 'tagMsg'// 将本地标签推到远程git push origin --tags/tagName// 删除本地标签git tag -d tagName// 删除远程标签git push origin :refs/tags/标签名9.如何将已经track的文件加入.gitignoregit rm -r --cached .git add .git commit -m 'update .gitignore'如果还是不行的话在先将想要取消追踪的文件移到项目目录外,并提交,然后提交后再将刚刚移出的文件再移入项目中即可如果是对所有文件都取消跟踪的话,就是 ...

August 7, 2019 · 1 min · jiezi

七夕秀恩爱新姿势这波操作我给十分

一、前言像每一滴酒回不了最初的葡萄,我回不到年少。爱情亦是如此,这就是写一篇小程序的初衷,用来记录我和她最美的恋爱。什么是最美恋爱?就是繁忙之余的一封书信,一起奋斗的目标,精彩的瞬间,旅游的足迹,和那无数的纪念日。 言归正传吧,先看看小程序给你的第一印象。(截图的是体验版本,上线版本有些功能是没有上的哦) 页面比较简约,她很喜欢。 二、说说代码1.框架小程序前端用的是taro框架写的,后台用的云开发(简直是个人开发者的福音)。贴一下总体架构图: 其他的架构,页面等等都很常见,我具体来说说云函数的调用吧,主要是对数据库的操作: 云函数的入口(运用TcbRouter实现不同方法的调用): 小程序端是这样调用的: 调用方法的参数: let param = { method:'get', collection:'mail', id:auth.user._id, bindId:auth.user.bindId, start:this.start, limit:PAGE.LIMIT }; let res = await commonApi.list(param);三、说说功能主要来说说邮箱这个功能吧,毕竟现在写信的越来越少了,这里很大程度的还原了写信的过程,可以挑选信封,挑选邮票,然后寄出你的思恋。我已经收到这么多信了 你们呢? 还有个留言板功能,她说和微信聊天有什么区别(区别就在于没有websocket),这里就不赘述啦。 四、结语七夕已至,快和亲爱的人绑定最美恋爱关系吧!在这里,你们就是导演,记录美好爱情。特别说明:此小程序,是我亲手为女朋友写的,感谢她提供需求支持,七夕快乐。 /:heart小彩蛋 /:heart 使用小程序·云开发按以下四步操作即可查看惊喜彩蛋~ 在cloudfuntions文件夹下,点击右键新建一个云函数love,并部署上传, exports.main = async (event, context) => { return { timelimit: 10000, }}使用开发者工具新增一个小程序页面love,在love.wxml里输入以下代码 <view>你问我爱你多少年?</view><image bindtap="loveFunction" src="{{loveurl}}"></image><view wx:if="{{timelimit}}"> <view><text>我爱你{{timelimit}}年</text></view> <view><text>云开发祝所有程序员七夕脱单</text></view> </view>在love.js里输入: data: { timelimit:'', loveurl:"https://tcb-1251009918.cos.ap-guangzhou.myqcloud.com/love.png", }, loveFunction() { wx.cloud.callFunction({ name: 'love', data: { }, success: res => { this.setData({ timelimit: JSON.stringify(res.result.timelimit) }) } }) },在love.wxss里输入: ...

August 7, 2019 · 1 min · jiezi

神奇的标签块级元素行内元素空元素

最近有人问我,前端模块为什么是空着的。是呀,前端模块一直没有着手开始写,不是因为没有东西可写,是一直在想着以什么样的前端开篇,有太多东西要写,但如果没有规划的写,可能久而久之的就遗弃了。所以再三决定,从我第一次认识前端知识开始写起,当然对于那些前端大牛,也许这篇文章没有营养,但我相信也不乏一些刚起步进入前端行业的新人,所以大家选择性预览。 前端是一个很容易入门,但却很难走进去的一个行业。看似简单,但一旦深入,就“不可自拔”。说到,前端,肯定少不了要认识他的组成元素,那这就涉及到块级元素,行内元素以及一些空元素。 Html标签html标签定义:是由一对尖括号包裹的单词构成,例如: <html>.标签不区分大小写<html> 和 <HTML>, 推荐使用小写.标签分为两部分: 开始标签<html> 和 结束标签</html>, 两个标签之间的部分我们叫做标签体.有些标签功能比较简单,使用一个标签即可,这种标签叫做自闭和标签,例如: <br/><hr/><input/><img/>标签可以嵌套,例如:<a><b><b/><a/>;但是不能交叉嵌套,例如:<a><b><a/><b/>块级元素总是在新行上开始;高度,行高以及外边距和内边距都可控制;宽度缺省是它的容器的100%,除非设定一个宽度。它可以容纳内联元素和其他块元素 块级元素分类(双标签,eg:<div></div>):<h1>,<h2>,<h3>,<h4>,<h5>,<h6> 定义 HTML 标题。<div> 定义文档中的节。<p> 定义段落。<ul> 定义无序列表。<ol> 定义有序列表。<li> 定义列表的项目。<dl> 自定义定义列表。<dt> 自定义定义列表中的项目。<dd> 自定义定义列表中项目的描述。<table> 定义表格。<thead> 定义表格中的表头内容。<tbody> 定义表格中的主体内容。<tfoot> 定义表格中的表注内容(脚注)。<th> 定义表格中的表头单元格。<tr> 定义表格中的行。<td> 定义表格中的单元。<pre> 定义预格式文本。<address> 定义地址。<article> 定义文章。<aside> 定义页面内容之外的内容。<audio> 定义声音内容。<video> 定义视频。<blockquote> 定义长的引用。<canvas> 定义图形。<caption> 定义表格标题。<details> 定义元素的细节。<fieldset> 定义围绕表单中元素的边框。<figcaption> 定义 figure 元素的标题。<figure> 定义媒介内容的分组,以及它们的标题。<footer> 定义 section 或 page 的页脚。<form> 定义供用户输入的 HTML 表单。<header> 定义 section 或 page 的页眉。<nav> 定义导航链接。<noframes> 定义针对不支持框架的用户的替代内容。<noscript> 定义针对不支持客户端脚本的用户的替代内容。<legend> 定义 fieldset 元素的标题。<menu> 定义命令的列表或菜单。<meter> 定义预定义范围内的度量。<output> 定义输出的一些类型。<section> 定义 section。行内元素和其他元素都在一行上;高,行高及外边距和内边距不可改变;宽度就是它的文字或图片的宽度,不可改变;内联元素只能容纳文本或者其他内联元素; ...

August 7, 2019 · 1 min · jiezi

HelloDjango-第-06-篇博客从裸奔到有皮肤

文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库在此之前我们已经编写了博客的首页视图,并且配置了 URL 和模板,让 django 能够正确地处理 HTTP 请求并返回合适的 HTTP 响应。不过我们仅仅在首页返回了一句话:“欢迎访问我的博客“,这是个 Hello World 级别的视图函数,毫无美感。 这篇文章我们需要编写真正的首页视图函数,当用户访问我们的博客首页时,他将看到我们发表的博客文章列表,就像 演示项目 里展示的这样。 首页视图函数上一节我们阐明了 django 的开发流程。即首先配置 URL,把 URL 和相应的视图函数绑定,一般写在 urls.py 文件里,然后在工程的 urls.py 文件引入。其次是编写视图函数,视图中需要渲染模板,我们也在 settings.py 中进行了模板相关的配置,让 django 能够找到需要渲染的模板。最后把渲染完成的 HTTP 响应返回就可以了。相关的配置和准备工作都在之前完成了,这里我们只需专心编写视图函数,让它实现我们想要的功能即可。 首页的视图函数其实很简单,代码像这样: blog/views.pyfrom django.shortcuts import renderfrom .models import Postdef index(request): post_list = Post.objects.all().order_by('-created_time') return render(request, 'blog/index.html', context={'post_list': post_list})我们曾经在前面的章节讲解过模型管理器 objects 的使用。这里我们使用 all() 方法从数据库里获取了全部的文章,存在了 post_list 变量里。all 方法返回的是一个 QuerySet(可以理解成一个类似于列表的数据结构),由于通常来说博客文章列表是按文章发表时间倒序排列的,即最新的文章排在最前面,所以我们紧接着调用了 order_by 方法对这个返回的 queryset 进行排序。排序依据的字段是 created_time,即文章的创建时间。- 号表示逆序,如果不加 - 则是正序。 接着如之前所做,我们渲染了 blogindex.html 模板文件,并且把包含文章列表数据的 post_list 变量传给了模板。 ...

August 7, 2019 · 4 min · jiezi

Hexo第二弹

目录 1. Hexo支持流程图、时序图2. Hexo多行代码提供复制3. Hexo复制时追加版权Hexo支持流程图、时序图画流程图还需要用别的编辑器画了用图片导入?Hexo实现手写流程图也很简单哦,但是有个小坑,小编被坑了好久,接下来手把手????带你们过坑。 markdown语法实现流程图的方式可以通过mermaid或flowchart,时序图则可以mermaid或sequence,但是默认是不会识别语法的,只是当做普通的多行代码,需要安装插件。 <!-- more--> 方式一:mermaid支持流程图(graph)、时序图(sequenceDiagram)、甘特图(gantt),可以说支持很多了。配置教方式二麻烦一点。 <p id="div-border-left-yellow">在线编辑器地址:https://mermaidjs.github.io/m... ,可以利用在线编辑器编辑完流程图之后,下载SVG或者直接link。</p> 安装官方说的是通过yarn安装(如果没有安装yarn,使用npm install -g yarn安装) $ yarn add hexo-filter-mermaid-diagrams也可以使用npm: $ npm i hexo-filter-mermaid-diagrams插件的官方网址 配置(1)修改<span id="inline-green">站点配置文件_config.yml</span>在最后加入 # mermaid chart mermaid: ## mermaid url https://github.com/knsv/mermaid enable: true # default true version: "7.1.2" # default v7.1.2 options: # find more api options from https://github.com/knsv/mermaid/blob/master/src/mermaidAPI.js #startOnload: true // default true (2)Next主题更改:在themes/next/_partials/footer.swig 最后加入 {% if theme.mermaid.enable %} <script src='https://unpkg.com/mermaid@{{ theme.mermaid.version }}/dist/mermaid.min.js'></script> <script> if (window.mermaid) { mermaid.initialize({theme: 'default'}); } </script>{% endif %}主题可更改,包含 default | forest ...

July 15, 2019 · 3 min · jiezi

git的使用

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件,Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。 git初始设置git config --global user.name #设置用户名git config --global user.email #设置邮箱仓库初始化git init添加文件到暂存区git add <files_name>将暂存区文件提交到本地仓库git commit -m '备注信息'查看当前提交代码状态git status将暂存区文件撤回工作区git checkout --<file_name>git checkout . 撤回在暂存区的所有文件查看提交日志git log git log --pretty=online #只显示一行信息回滚git reset --hard HEAD^ #回滚至上一次提交前git reset --hard <md5_values> #指定回滚查看操作日志可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作) git reflog提交至远程仓库git push -u origin <分支名>切换分支git checkout 创建分支git checkout -b从远程分支更新本地代码git pull合并分支git merge <branch_name>查询分支git branch临时区操作git stash #放入临时区git stash list #查看临时区记录列表git stash apply #临时区取回git stash pop #取回并删除暂存git stash drop #删除临时区

July 14, 2019 · 1 min · jiezi

什么是GitHub你所使用的很多开源程序都是在Github上

从较高的层面来说,GitHub是一个基于网站和云的服务,可以帮助开发人员存储和管理他们的代码,以及跟踪和控制对代码的更改。要准确理解GitHub是什么,您需要了解两个相关原则: 版本控制Git 在本文中,我们将首先解释这两个原则。然后,我们将深入研究GitHub,以及如何使用GitHub与WordPress一起工作。 什么是版本控制? 版本控制可帮助开发人员跟踪和管理软件项目代码的更改。随着软件项目的发展,版本控制变得至关重要。以WordPress为例...... 在这一点上,WordPress是一个非常大的项目。如果核心开发人员想要在WordPress代码库的某个特定部分上工作,那么让他们直接编辑“官方”源代码是不安全或有效的。 相反,版本控制允许开发人员安全地完成分支和合并。 通过分支,开发人员复制部分源代码(称为存储库)。然后,开发人员可以安全地更改代码的这一部分,而不会影响项目的其余部分。 然后,一旦开发人员使他或她的部分代码正常工作,他或她就可以将该代码合并回主要源代码以使其正式化。 然后跟踪所有这些更改,并在需要时可以还原。 什么是Git? Git是Linus Torvalds于2005年创建的一个特定的开源版本控制系统。 具体来说,Git是一个分布式版本控制系统,这意味着每个开发人员的计算机上都可以使用整个代码库和历史记录,这样可以轻松进行分支和合并。 根据Stack Overflow开发人员调查,超过87%的开发人员使用Git。 那么什么是GitHub呢? GitHub主页GitHub是一家营利性公司,提供基于云的Git存储库托管服务。从本质上讲,它使个人和团队更容易使用Git进行版本控制和协作。 GitHub的界面足够用户友好,所以即使是新手编程也可以利用Git。如果没有GitHub,使用Git通常需要更多娴熟技术并使用命令行。 GitHub是如此用户友好,有些人甚至使用GitHub来管理其他类型的项目 - 比如写书。 此外,任何人都可以免费注册和托管公共代码存储库,这使得GitHub特别受开源项目的欢迎。宝宝起名宝典 作为一家公司,GitHub通过销售托管私有代码存储库以及其他以业务为中心的计划来赚钱,这些计划使组织更容易管理团队成员和安全性。 探索GitHub接口 为了让您基本了解GitHub接口的外观,这里是GitHub存储库中托管的WordPress源代码: 从这里,您可以查看正在处理的各个分支,以及有人进行提交时(这有点像“保存”文件)。根据存储库的设置方式,您也可以创建自己的分支并在那里进行自己的提交。 一旦进行了一些更改,您就可以通过发出拉取请求将该代码提交回分支。拉取请求基本上是要求分支机构的负责人包含您的代码。它还可以帮助那个人准确地看到你在代码中改变了什么。 如果你想更长久地在你自己的帐户上编辑部分或全部WordPress源代码,你也可以通过单击Fork按钮来叉它(叉子在概念上类似于分支,但是fork更永久): 使用Git和GitHub与WordPress 许多WordPress主题和插件开发人员在GitHub上托管他们项目的源代码。例如,您可以查看Elementor页面构建器代码,Zerif Lite主题源代码等等。 但也有WordPress插件可以帮助您更直接地使用Git和WordPress。 例如,VersionPress旨在将Git的强大功能引入常规的WordPress操作,例如更新帖子或安装插件。VersionPress为您的WordPress文件和数据库添加版本控制。 WP Pusher是另一个基于Git的插件,可让您直接从GitHub将主题和插件部署到WordPress网站。 如何开始使用GitHub 要开始使用GitHub: 注册一个免费的GitHub帐户按照GitHub Hello World指南了解您可能想要采取的最受欢迎的操作。

July 13, 2019 · 1 min · jiezi

你和GitHub高手就差这三条规则

为什么 Git 和 GitHub 如此重要? 如果你正在学习编程,而且你的终极目标是获得一份软件开发的工作。在这种情况下,答案很简单: 学习 Git 和 GitHub 非常重要,因为 99% 的公司都会使用 Git 和 GiHub。所以,学习使用 Git 和 GitHub 可以让你更容易被雇佣,并且能将你和初级开发者区别开来。 高级开发者之所以成为高级开发者,并不是因为他们更了解特定语言的语法,而是他们有和真实用户一起处理大型复杂项目和完成业务目标的经验。 当你仍在学习写代码阶段时,你很难获得这种经验。然而,获得现实世界经验的一个简单方法就是利用现实世界项目使用的工具和方法。Git 和 GitHub 就是一个例子。 你还可以做的事情:远程结对编程、为开源做贡献、为你的简历构建专业设计网站。 即使你同意「掌握 Git 和 GitHub 有助于找工作」,你可能仍然会想: 「为什么 Git 和 Github 对公司如此重要?」 简而言之,Git 允许团队以异步方式高效地为同一个项目贡献代码。这使得团队能够更好地协作,从而解决更大更复杂的问题。 Git 是一个分布式版本控制系统,它还提供取消更改、创建代码分支、解决合并冲突等机制。这些都是非常有用的特性,可以解决每个软件团队每天都面临的特定问题和常见问题。Git 是当今的主流解决方案。 另一方面,GitHub 是 Git 之上的附加层,它为其他特定和常见问题提供解决方案,比如代码审查、pull request、问题管理/bug 跟踪等等。 注:尽管 Git 是大多数公司的首选版本控制解决方案,但 GitHub 仍然有一些强大的竞争对手,比如 GitLab 和 Bitbucket。但是,如果你知道如何使用 GitHub,那么你就能驾轻就熟地使用 GitLab 或 Bitbucket。 现在你已经了解了掌握 Git 和 Github 的重要性,接下来我们来看三个简单规则,它们可以让你在学习编写代码阶段,就轻松成为专业的 Git 和 Github 用户。 ...

July 13, 2019 · 1 min · jiezi

敏捷项目的不确定性管理

敏捷方法最大的固有优势之一是管理敏捷项目的不确定性。为了更好地理解这一点,我们需要先了解以下两者之间的区别: 一种经验过程控制模型定义的过程控制模型经验和定义的过程模型在这种情况下要理解的关键是与经验过程和定义过程之间的区别。 经验过程控制模型敏捷基于经验过程方法 - “经验”一词意味着“基于实验或观察”。 当您使用经验过程方法时, 你接受在开始之前你不知道你可能想知道的关于项目的一切该过程旨在调整解决方案和流程,以便随着项目的进展发现学习的解决方案。定义的过程控制模型“定义过程”是可重复的,并且从一个项目到下一个项目并没有显着变化 它产生的结果是非常可预测的,而“经验过程”专门用于支持适应性而不是可预测性。因此,经验过程更适合具有高度不确定性的项目。敏捷项目的不确定性理解敏捷项目不确定性的一个非常强大的概念是“Stacey复杂性模型”,如下所示: 这个模型有两个不确定因素: 要求不确定性一个方面是需求的不确定性 - 项目的目标和要求以及他们知道客户是否真能确定自己想要的是甚么? 技术不确定性另一个方面是技术的不确定性 - 对问题的技术解决方案以及与技术解决方案相关的风险级别的理解程度如何? 这是一个非常重要的概念,因为处理不确定性的能力在当今项目开发中最关键的,而且大量计划驱动的项目并不能很好地应对高水平的不确定性。 不确定性管理计划驱动项目中通常发生的事情是项目经理在启动项目之前尝试将不确定性水平降低到可接受的水平: 在项目开始之前尽可能地解决需求中的任何不确定性,并且尽量消除尽可能多的技术风险这通常会导致使用久经考验的技术,并且在进入新的和未定义的用户需求方面并没有太大的作用。当然,其缺点是技术方法可能会在发布后的相对较短的时间内过时,也可能导致解决方案非常平庸。 “管理不确定性”是什么意思?让我澄清“管理不确定性”的含义。 对某些人而言,不确定性就像是攻击项目的不冶之症并导致其失败。传统的项目管理思想强化了这种方法,以尽可能地降低项目中的风险和不确定性我不这么认为,不确定性也可能代表超出预期的机会,项目产生所创做的价值及机会以倍数的高於其风险和不确定性直如果通过降低风险和不确定性来强制项目去适应计划驱动模型,您可能会最大化项目的可预测性,以满足成本和进度目标,但最大限度地降低项目产生的价值总结以下是一些重要观点的摘要: 不应忽视不确定性,根本不管理。不确定性通常与机会直接相关幸运的是,这不是一个黑白决定: 一种完全僵化的,计划驱动的方法,几乎没有不确定性和完全自适应的方法,具有极高的不确定性。正确的做法是使方法适应项目中的不确定性水平,而不是将项目强制拟合到某种一成文变的預訂好的方法(无论它可能是什么)。开发一种管理不确定性的智能方法需要更多的技能; 这个需要: 能够客观地评估项目中的不确定性水平理解经验和定义的过程模型更深入地了解这些方法背后的原理,了解如何将两者融合在一起以适应这种情况这才是有效的敏捷项目管理方法的本质。 References What is Burndown Chart in Scrum?What is the Role-Feature-Reason Template?Sprint Increment vs Potential Shippable Product vs MVP vs MMPWrite SMART Goals & INVEST for User StoriesWhat is DEEP in Product Backlog?How to Write Product Vision for Scrum Project?How to Use Scrum Board for Agile Development?Who Create Product Backlog Items or User Stories in Scrum?What is Agile Estimation?What is Story Point in Agile? How to Estimate a User Story?

July 11, 2019 · 1 min · jiezi

iOS多渠道统计方法解析

总所周知,iOS 是一个封闭的系统环境,当应用程序需要向外部请求或接收数据时,大部分都需要经过权限认证,否则无法获取到数据。更何况 iOS 本身就无法使用渠道包统计数据,iOS 企业签名包在上传服务器后更是难以引流下载。在这种情况下,如何给多个渠道做推广以及效果统计,是令不少开发者和运营人员头疼的问题。 从技术上,我们要实现 App Store 应用以及 iOS 企业签名包的多渠道推广效果统计。简单来说,包括各个推广渠道下用户的点击、注册、安装等运营推广数据的获取。 方案一:苹果官方统计(iTunes Connect) 在数据权威性上,苹果官方的统计工具必然最权威,也最值得信赖。 登录苹果的官方统计平台 iTunes Connect,在“App分析”模块可以很方便的查看到应用的“展示次数、购买量”等基础数据。 当然,App 推广往往需要多个渠道同时进行,由于 App Store 无法制作渠道包统计,因此 iTunes Connect 也很方便的提供了渠道链接统计服务。只需要在“App分析”的“来源”中点击“营销活动”,右上角有个“生成营销活动链接”,进入后就能自定义设置对应的唯一标识,给每个渠道生成专属的渠道链接。 拿着对应的链接去推广,虽然可以追踪到不同渠道下的精准来源,但 iTunes Connect 的统计也存在许多问题: 只有当营销活动启动后超过一天时间(最长72个小时)后才能显示相关数据;至少有 5 个 App 安装量归因于此营销活动时,营销活动才会在“App 分析”中显示;iOS 8.0 及以上版本的用户可以选择是否将自己的应用使用情况的数据发送给 Apple;iTunes Connect 的统计无法同时兼容 Android 和 iOS,采用不同的统计方法可能会让数据统一性较差。方案二:填写渠道识别码统计(邀请码/渠道码)由于苹果统计数量少时无法展示,以及数据延时性等特性,实际应用中并不适合用来统计地推、邀请有奖等 App 推广场景。 于是在业务流程上,传统做法是让用户填写渠道码来实现业绩统计,比如“老带新”活动中的填写邀请码流程、地推活动中的填写地推码流程等,其本质就是通过获取某个用户填写的专属渠道识别码,来判断用户由哪个渠道邀请来,从而统计推广业绩并发放奖励。 但这种做法会使实际推广中多出一个人工填写的操作流程,高门槛必定导致高流失,用户会产生排斥心理,推广效果也就大打折扣。 方案三:采用第三方SDK追踪以 openinstall 为例,这也是基于渠道链接统计的一种方法,与 iTunes Connect 营销活动链接统计的区别在于: 统计数据能实时反馈并显示;没有数据数量限制,无论采集的样本量多少都能实时显示;能够程序化生成海量专属渠道链接,无需人工定义渠道识别信息;可以同时统计 Android、iOS(包括企业签名) App,数据更有具统一性。同时,由于渠道链接统计的方式具有更高的灵活性,采用 openinstall 可以在不用制作渠道包、填写邀请码的情况下,识别渠道安装来源。这也意味着,开发者甚至能在业务流程上实现免填邀请码、免填地推码统计渠道业绩的需求。 另一方面,在实际应用中,由于能够程序化生成海量渠道链接的特点,可以有效解决 iOS 多渠道统计的难题,主要应用于移动广告效果统计、社交分享效果统计、iOS(包括企业签名)引流与统计、邀请层级关系的建立等方面。 总结:毋庸置疑,苹果官方统计工具在 iOS 领域必然是最优的统计方案,但客观存在的一些弊端在实际应用中也是不可避免的,可以考虑用第三方 openinstall 做这方面的补充。 ...

July 9, 2019 · 1 min · jiezi

一文读懂TOGAF企业架构

TOGAF ®,由The Open Group的标准,是一个成熟的企业架构方法和框架由世界领先的组织使用,以提高业务效率。它是最突出和最可靠的企业架构标准,可确保企业架构专业人员之间的一致标准,方法和通信。精通TOGAF标准的企业架构专业人员享有更高的行业信誉,工作效率和职业机会。TOGAF帮助从业者避免陷入专有方法,更有效地利用资源,实现更高的投资回报。 为何选择TOGAF?IT架构需要密切反映组织的业务目标。实际上,应该使用特定的技术(业务场景)来确保IT架构师正确理解业务目标,并反映在使用TOGAF开发的IT架构中。 以下是我们应该采用TOGAF ADM进行架构开发的原因: 一种全面的通用方法与其他框架互补,不与其他框架竞争在市场上广泛采用可以满足组织和行业的需求可免费获得永久许可供应商,工具和技术中立的开放标准避免重新发明轮子业务IT一致性基于最佳实践可以参与框架的演变什么是TOGAF架构开发方法(ADM)?架构开发方法(ADM)用于开发满足组织业务和信息技术需求的企业架构。TOGAF ADM是大量架构从业者为实现以下目的而不断贡献的结果: 它描述了一种开发和管理企业体系结构生命周期的方法,并构成了TOGAF的核心。它可以根据组织的需求进行定制,然后用于管理体系结构规划活动的执行。TOGAF和ArchiMateArchiMate是Open Group引入的建模标准。它提供了一组丰富的建模符号和概念,支持在域内和域之间一致地建模企业架构。 由于TOGAF和ArchiMate都是由Open Group维护的标准,它们都用于企业架构开发,很多人在它们之间感到困惑,提出诸如“TOGAF和ArchiMate之间有什么区别?”,“TOGAF vs ArchiMate?”之类的问题, TOGAF框架和ArchiMate建模语言均由The Open Group维护。TOGAF 9.1和ArchiMate 2.1或更高版本协同工作,是EA开发的兼容和补充。虽然TOGAF ADM是一个可用于开发和实施企业系统,流程和结构的EA框架,但ArchiMate可用作可视建模语言,可用于创建EA描述。 重申ArchiMate标准是建模语言而非框架是很重要的。ArchiMate语言广泛用于开发可视化EA模型,通常与TOGAF ADM一起使用。此外,TOGAF和ArchiMate标准可以组合在一起,提供一组可用于建模不同体系结构的视点。 ArchiMate语言由ArchiMate核心语言组成,其中包括业务,应用程序和技术层,以及构建体系结构的策略和动机以及实现和迁移的元素。 下图显示了ArchiMate语言如何与TOGAF架构开发方法(ADM)阶段相关的简化映射。 ArchiMate核心代码ArchiMate层可以对TOGAF定义的体系结构域进行建模。 该业务,应用和技术层支持业务,信息系统和技术架构领域由TOGAF框架中定义的描述,以及它们的相互关系。 战略与动机延伸战略和动机扩展可以实现利益相关者的建模,变革的驱动因素,业务目标,原则和要求。 ArchiMate语言中的策略和激励元素可用于支持TOGAF ADM 的需求管理,初步和架构愿景阶段,这些阶段建立了高级业务目标,架构原则和初始业务需求。它们也与TOGAF ADM的架构变更管理阶段相关,因为该阶段涉及不断变化的需求。 实施和迁移扩展实施和迁移扩展支持项目组合管理,差距分析以及过渡和迁移规划的建模。 ArchiMate语言的实现和迁移元素通过TOGAF ADM的机会和解决方案,迁移规划和实施治理阶段支持体系结构的实施和迁移。 TOGAF ADM生命周期 - 迭代ADM支持三个级别的迭代概念: 在ADM周围循环:ADM以循环方式呈现,表明一个架构工作的完成直接进入架构工作的后续阶段。 在阶段之间进行迭代:TOGAF描述了跨阶段迭代的概念(例如,在完成技术架构时返回到业务架构)。 围绕单个阶段循环:TOGAF支持在单个ADM阶段内重复执行活动,作为详细描述架构内容的技术。 TOGAF ADM在ADM过程的应用过程中,根据ADM提供的相位目标,根据一些输入和步骤产生许多输出。 例如: 流程架构要求项目计划项目合规评估等等为了以一致和结构化的方式整理和展示这些主要的工作产品,TOGAF定义了一个结构模型,用于放置它们。 ADM输入和输出TOGAF从每个阶段提供了许多输入和输出可交付成果: 这些是建议,不需要完全遵循生成的每个可交付成果应进行版本化以指示何时发生更改显示的版本编号也是一个建议,无需遵循交付合同规定的工作产品,然后由利益相关者正式审查,同意和签署。它通常在项目完成时归档,或者作为参考模型转换为Architecture Repository ADM初步阶段创建体系结构功能所需的准备和启动活动,包括TOGAF的定制和体系结构的定义 输出可交付成果:架构原则架构库业务原则,业务目标和业务驱动因素企业架构的组织模型要求架构工作量身定制的架构框架ADM阶段A:架构愿景架构开发周期的初始阶段。它包括有关定义体系结构开发计划范围,识别利益相关者,创建体系结构愿景以及获得批准以继续体系结构开发的信息 输出可交付成果:架构原则架构路线图架构愿景业务原则,业务目标和业务驱动因素能力评估沟通计划架构工作声明量身定制的架构框架ADM阶段B:业务架构业务架构:开发业务架构以支持商定的架构愿景 输出可交付成果:架构定义文档架构原则架构要求规范架构路线图业务原则,业务目标和业务驱动因素架构工作声明ADM阶段C:信息系统架构信息系统架构:开发信息系统架构以支持商定的架构愿景 架构定义文档架构原则架构要求规范架构路线图架构工作声明ADM阶段D:技术架构技术架构:技术架构的发展,以支持商定的架构愿景 输出可交付成果:架构定义文档架构原则架构要求规范架构路线图架构工作声明ADM阶段E:机遇与解决方案机遇与解决方案为前几个阶段定义的架构进行初步实施计划和交付工具的识别 输出可交付成果:架构定义文档架构要求规范架构路线图架构愿景能力评估实施和迁移计划架构工作声明ADM阶段F:迁移计划迁移规划通过最终确定详细的实施和迁移计划,阐述如何从基准迁移到目标体系结构 架构构建基块架构定义文档架构要求规范架构路线图变更请求实施和迁移计划实施治理计划要求架构工作架构工作声明ADM阶段G:实施治理实施治理提供了对实施的架构监督 输出可交付成果:改变请求合规评估解决方案构建块架构工作声明ADM阶段H:架构变更管理架构变更管理建立了管理新架构变更的程序。需求管理检查整个ADM中管理架构需求的过程 摘要ADM是一种综合的通用方法 它建议了开发体系结构所涉及的各个阶段和步骤的顺序这是一种迭代方法它利用了TOGAF的其他部分来获取资产和流程它可以与其他框架的其他可交付成果一起使用以下是每个开发阶段的TOGAF ADM概述,如下图所示: ...

July 9, 2019 · 1 min · jiezi

iView-2019-新品发布会

我们目前正在筹划发布会的各项细节, 期待与您一起见证 iView 的成长! iView 2019 新品发布会将在 2019年07月27日14点在首都北京举办。 购票地址: https://www.huodongxing.com/event/5500465916000 线上同步直播地址: https://live.bilibili.com/1353202 活动流程13:00-13:50 签到 14:00-14:10 回顾 iView 2018 14:10-16:00 发布 iView 新产品 16:00-17:00 现场讨论、合影留念 17:00 会议结束 注:以上日程请以会议当天现场实际日程为准 参会须知由于现场至多容纳 150人,为防止无效报名,收取 35元-50元 门票,门票的所有收入将捐赠给 Vue.js 开源项目。 获取更多发布会内容,请关注 iView 官方微信公众号: 购票须知1.报名方式:点击链接,在活动行中报名 https://www.huodongxing.com/event/5500465916000 2.报名须知:凭活动行【电子票】验票签到入场 3.门票优惠:门票分为早鸟票 120 张(35元/张)和普通票 30 张(50元/张) iView 特别赞助商 iView 年度赞助商 iView 技术赞助商 iView 会议赞助商

July 9, 2019 · 1 min · jiezi

了解-Daily-Scrum-活动

如Scrum指南中所述,每日Scrum是一个15分钟的时间盒事件,供开发团队同步活动并为接下来的24小时制定计划。每日Scrum每天都在Sprint举行。在此,开发团队计划在接下来的24小时内开展工作。通过检查自上次每日Scrum以来的工作并预测即将到来的Sprint工作,这可以优化团队协作和性能。Daily Scrum每天都在同一时间和地点举行,以降低复杂性。 Scrum核心的检查与适应 开发团队使用Daily Scrum检查Sprint目标的进展情况,并检查Sprint Backlog中完成工作的进度趋势。Daily Scrum优化了开发团队满足Sprint目标的可能性。每天,开发团队应该了解它打算如何作为一个自组织团队一起工作,以实现Sprint目标,并在Sprint结束时创建预期的增量。开发团队或团队成员经常在每日Scrum之后会面,以进行详细讨论,或者调整或重新规划Sprint的其余工作。 每日Scrums改善沟通,消除其他会议,识别发展障碍,删除,突出和促进快速决策,并提高开发团队的知识水平。这是一次关键的检查和改编会议。 会议结构由开发团队制定,如果重点关注Sprint目标的进展,可以采用不同的方式进行。一些开发团队将使用问题,一些将更多基于讨论。 Scrum Master在每日Scrum中的角色在Scrum Master的保证了开发团队的会议,但开发团队负责进行日常Scrum。Scrum Master教导开发团队将每日Scrum保持在15分钟的时间内。 Daily Scrum是开发团队的内部会议。如果其他人在场,Scrum Master会确保他们不会中断会议。

July 8, 2019 · 1 min · jiezi

在企业中最常用的Git命令分支代码合并到master分支

工作中最常使用的Git命令==start==1.git pull #取回远程仓库的变化,并与本地分支合并 2.git branch #查看本地分支 3.git checkout #切换分支 4.git status #查看修改的文件 5.git add . #添加当前目录的所有文件到暂存区 6.git commit -m "" #提交暂存区到仓库区 7.git push #上传本地指定分支到远程仓库 8.git checkout master #切换到主分支master 9.git merge #将分支合并到master分支 10.git push ==end==

July 8, 2019 · 1 min · jiezi

微信小程序请求封装request

开始写小程序的时候对小程序请求接口的requestAPI相当无奈,因为项目急就没考虑那么多,直接开干。后边闲下来就考虑了一下做了一个封装,来统一做一些数据处理,达到减轻开发重复性,优化代码的作用: 首先我封装了一个类: import { base_url } from '../config/api' // 引入我们接口的ip,后续我们只需要传入apiconst tips = { 1: '抱歉,出现了一个错误', 1005: 'appkey无效,请求错误', 3000: '没有权限', ...} // 多种错误处理字符串----------export default class HTTP { fetch (params) { const { url, method = 'GET', data = {}, success } = params // es6对象解构请求是我们需要的传参和成功的处理 wx.request({ url: base_url + url, method, data, header: { 'Content-Type': 'application/json' }, success: res => { const { code } = res.data if (code === 0) { // 与后台约定的成功判断 success && success(res.data) // 成功的回调 return } const { error_code } = res.data this._show_error(error_code) // 失败的处理,弹出提示框 }, fail: err => { this._show_error(1) // 失败的处理,弹出提示框 } }) } _show_error (error_code = 1) { const tip = tips[error_code] wx.showToast({ title: tip ? tip : tips[1], icon: 'none', duration: 2000 }) }}这里,我们做了一个简单的基础封装,但是也是必须从回调中做出相应的处理,如果我们需要一个变量直接拿到这次请求的数据呢,那我们就需要用到promise, async await 来进行处理了,代码如下: ...

July 8, 2019 · 2 min · jiezi

什么是敏捷中的跨职能团队

什么是敏捷中的跨职能团队?跨职能 - 团队或个人会员?摘要传统上,项目是围绕组件团队(即UX,Dev,Business,Tester和......)组织的,任何需要一系列组件专业知识的版本都需要涉及多个组件团队。通常,不同的团队将有不同的优先级,这不可避免地导致产品发布周期中的瓶颈。 根据维基百科的说法,跨职能团队是一群具有不同职能专长的人,致力于实现共同目标。提高团队质量的最佳方法之一就是使其具有交叉功能。跨职能团队拥有将想法转变为工作产品的所有必要技能。 在Scrum的指南表示“在Scrum团队由的产品负责人,开发团队和Scrum Master的。Scrum团队是自组织和跨职能的。与组件团队方法相比,跨职能团队是由来自公司不同职能领域的人员组成的团队。 - 它不仅应由技术专家(后端,前端开发人员,QA工程师等)组成,还应包括业务分析师,市场营销和用户体验专家或其他积极参与项目的人员。 。 敏捷中的跨职能团队跨职能团队是帮助Scrum团队取得成功和高效工作的关键因素之一。跨职能团队具有更大的灵活性,能够更快地响应不断变化的需求,并能更好地处理持续的支持和维护。 Mike Cohn表示,“也许敏捷中最普遍和最持久的神话是,跨职能团队是每个人拥有完成工作所需的所有技能的团队。这根本不是真的......跨职能团队的成员具有各种技能,但这并不意味着每个成员都具备所有技能“ 实际上,敏捷跨职能团队不仅意味着团队本身具有跨职能性,而且每个团队成员最好也可以扮演多个角色。作为专家并不意味着会员以了解其他事情为代价而知道一件事情,理想情况下,人才形象应该是T形的,因为他/她在一个专业领域具有深度,而在其他领域具有广度。 T形专业人士跨职能团队的优势可以改善跨职能领域的协调,增加产品和流程的创新,缩短开发周期,以便从关键客户接触点获得反馈。跨职能团队消除了大多数(如果不是全部)冲突优先级问题,因为团队中的每个人都具有实现共同目标的相同优先级。 Scrum角色 什么是Scrum团队?什么是Scrum的自组织团队?Scrum团队如何运作? - 简要指南如何成为Scrum项目的优秀产品负责人?什么是产品负责人在Scrum中的角色?敏捷开发:如何成为合格的Scrum Master?什么是Scrum中的猪和鸡?项目经理与Scrum Master对项目所有者什么是三个Scrum角色?什么是Scrum Master?角色和责任什么是敏捷中的跨职能团队?作为Scrum Master,您如何帮助您的项目所有者?

July 8, 2019 · 1 min · jiezi

使用Hexo搭建个人博客并部署到GitHub或码云上访问全过程

一、前言如上图所示:GitHub有Github Pages,而码云也有码云 Pages 1、Github Pages或Gitee Pages是什么呢?Github Pages或者Gitee Pages是一个免费的静态网页托管服务,我们可以使用它来托管博客、项目官网等静态网页。 之前小编也有写过关于GitHub搭建个人博客教程,其采用Jekyll模板搭建~目前码云 Pages 支持 Jekyll、Hugo、Hexo编译静态资源。 2、Jekyll、Hugo、Hexo 是什么?温馨小提示:码云上是如下介绍这三者Jekyll、Hugo、Hexo 是简单的博客形态的静态站点生产机器。它有一个模版目录,其中包含原始文本格式的文档,通过 Markdown 以及 Liquid 转化成一个完整的可发布的静态网站,你可以发布在任何你喜爱的服务器上。Jekyll、Hugo、Hexo 也可以运行在 码云(Gitee.com) Pages 上,也就是说,你可以使用码云的服务来搭建你的仓库页面、博客或者网站,而且是完全免费的。 Jekyll 使用文档:https://www.jekyll.com.cn/doc...Hugo 使用文档:https://gohugo.io/documentation/Hexo 使用文档:https://hexo.io/docs/下面小编将介绍使用其中的Hexo来搭建个人博客的全过程~ 3、为什么采用Hexo呢?原因是Hexo基于NodeJS实现,而目前主流的vue前端一般都是使用npm或者yarn来跑项目,因此使用hexo搭建个人博客,易学,且搭建环境相对简单~ 而 Hexo官网 上这样介绍它:Hexo是一个快速,简单和强大的博客框架。您使用Markdown(或其他语言)撰写帖子,Hexo会在几秒钟内生成具有漂亮主题的静态文件。二、安装基本环境1、Git : https://git-scm.com/downloads2、Node.js : https://nodejs.org/en/三、安装Hexonpm install -g hexo-cli四、初始化项目 -> 配置 -> 部署到码云访问 -> 本地运行1、初始化项目在项目预存位置,cmd或者git bash执行如下命令: hexo init blog # 注:blog为执行完此命令后项目所在文件夹名完成后,生成如下文件: 2、修改站点配置文件 _config.yml可参考Hexo官网提供文档进行修改:https://hexo.io/docs/configur...注:deploy部署需要安装 hexo-deployer-git npm install hexo-deployer-git --save我的修改如下: # Hexo Configuration## Docs: https://hexo.io/docs/configuration.html## Source: https://github.com/hexojs/hexo/# Sitetitle: 郑清的个人博客subtitle: zhengqing's blogdescription: Hello,here is zhengqing's blog.keywords:author: 郑清language:timezone:# URL## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'url: http://zhengqingya.gitee.io/blogroot: /blog/permalink: :year/:month/:day/:title/permalink_defaults:# Directorysource_dir: sourcepublic_dir: publictag_dir: tagsarchive_dir: archivescategory_dir: categoriescode_dir: downloads/codei18n_dir: :langskip_render:# Writingnew_post_name: :title.md # File name of new postsdefault_layout: posttitlecase: false # Transform title into titlecaseexternal_link: true # Open external links in new tabfilename_case: 0render_drafts: falsepost_asset_folder: falserelative_link: falsefuture: truehighlight: enable: true line_number: true auto_detect: false tab_replace: # Home page setting# path: Root path for your blogs index page. (default = '')# per_page: Posts displayed per page. (0 = disable pagination)# order_by: Posts order. (Order by date descending by default)index_generator: path: '' per_page: 10 order_by: -date # Category & Tagdefault_category: uncategorizedcategory_map:tag_map:# Date / Time format## Hexo uses Moment.js to parse and display date## You can customize the date format as defined in## http://momentjs.com/docs/#/displaying/format/date_format: YYYY-MM-DDtime_format: HH:mm:ss# Pagination## Set per_page to 0 to disable paginationper_page: 10pagination_dir: page# Extensions## Plugins: https://hexo.io/plugins/## Themes: https://hexo.io/themes/theme: landscape# Deployment## Docs: https://hexo.io/docs/deployment.htmldeploy: type: git # repo: https://github.com/zhengqingya/zhengqingya.github.io # github仓库 repo: https://gitee.com/zhengqingya/blog # 码云仓库 branch: master message: # 自定义提交消息3、部署项目到码云访问执行如下命令生成静态文件(public文件夹),并提交到码云或github远程仓库上 ...

July 8, 2019 · 2 min · jiezi

读取燃尽图

什么是燃尽图?燃尽图是在“剩余工作”和“时间”之间绘制的折线图。Scrum团队使用这些图表来跟踪他们在sprint中“烧毁”任务时的进度。 Burndown图表相当容易理解,但团队通常很难理解图表背后的全部含义。 燃尽图的一部分 X轴: 图表的X轴始终表示时间(通常以天为单位)。 Y轴: y轴表示在sprint中要完成的剩余工作。这可以由剩余任务(在任务的数量中)或剩余的努力量(在故事点/小时中)来表示。 进度线: 进度线表示您的团队在冲刺方面的进展情况。它每天都会使用新的剩余估算进行更新。随着冲刺的进行,这条线将指示您的团队是否正常,以及是否需要采取任何纠正措施。 准则: 这是在图表上从左到右向下绘制的对角线。理想情况下,您的冲刺进度线应尽可能接近指南。如果您的团队能够在整个sprint中以稳定的速度完成所有故事,那么您的进度线最终将与指南完全相同。 选择正确的跟踪指标Y轴作为剩余任务的数量: 这是在任何给定日期保留在sprint中的任务数的图表。随着任务在一段时间内完成,进度线开始向下移动。这种方法的最大优点是图形易于理解。 使用这种类型的燃尽图表的缺点是不估计任务。并非所有任务都需要同等的努力来完成。通常情况下,在冲刺结束时离开困难任务的团队发现尽管在大部分时间内处于“正常”状态,但他们无法完成所有任务。 Y轴作为剩余的故事点: 这是随着时间的推移剩余多少故事/估计点的图表。故事点是通过其复杂性来估计任务的好方法。这标准化了完成任务所需的工作量。 该图最终类似于先前的方法,但估计点消除了跟踪任务完成带来的模糊性。 燃尽图何时有用?Burndown图表在以下两个方面都很有用:主动冲刺和冲刺回顾。 冲刺期间: 在正在进行的冲刺期间查看燃尽图表可以帮助Scrum主管或产品负责人回答以下问题: 冲刺是否按目标进展?所有的故事(或任务)都能按时完成吗?需要采取哪些纠正措施来达到目标?冲刺后: Burndown Charts是Sprint团队表现的指标。在sprint回顾中,燃尽图可作为围绕估计准确性,冲刺性能,障碍以及随后冲刺期间所做更改的讨论的参考。 阅读燃尽图通过将冲刺进度线与指南进行比较来读取Burndown图。两条线彼此越接近,在截止日期之前完成所有任务的机会就越大。 落后于时间表:如果进度线高于指南,则意味着您的团队落后于计划,并且理想情况下应该完成更多工作。正轨:进度线和指南紧密相连。如果他们保持目前的速度,团队将击中目标。提前计划:进度线低于指南。即使在冲刺结束日期之前,该团队仍有望达到目标。这可能是因为在计划冲刺时任务被高估了。团队可以向sprint添加更多任务,以确保每个人都在sprint中占用。Burndown图表模式以下是使用燃尽图跟踪冲刺时可能会观察到的一些常见模式。 不正常的状态更新(或)不正确的故事细分 以块为单位更新其状态的团队(例如,在每周结束时)以阶梯图形结束。定期状态更新可提供更准确的图表。理想情况下,Sprint团队应该每天更新他们的任务。 阶梯图有时也是不正确的任务分解的结果。如果任务没有足够的细分,个别问题可能需要很长时间才能完成:导致几天内缺乏进展的错觉。避免这种情况的最佳方法是将大型任务分解为小的可执行工作块。 冲刺结束时更新进度 这是一个团队的燃尽图表,它在冲刺审查会议前一天更新所有状态。此图表在回顾期间增加的价值非常小,团队应确保每天更新其状态。 提前完成。 此图表代表一个团队过高估计完成任务所需的时间。 如果该团队保持当前的速度,他们最终将在sprint结束日期之前完成所有任务。产品所有者需要向sprint添加更多任务(由估计的急剧上升表示),以便在整个sprint期间保持团队忙碌。 落后于时间表。 这是一个努力跟上理想指南的团队的燃尽图。 这很可能是因为他们低估了完成任务所需的工作量。纠正课程的两种方法是 为团队添加更多人(或)通过删除故事或任务来缩小sprint的范围。敏捷与Scrum基础综合Scrum指南什么是Scrum的三大支柱?什么是敏捷软件开发?Scrum在3分钟内完成什么是5个Scrum值?Scrum的演变是什么?经典项目管理与敏捷项目管理为什么Scrum难以掌握?什么是Scrum中的速度?什么是敏捷?什么是Scrum?敏捷中的三个Amigos发展战略是什么?经验过程控制与定义过程控制如何保持Scrum的透明度?Scrum vs Waterfall vs Agile vs Lean vs Kanban什么是Scrum框架中的3355?

July 8, 2019 · 1 min · jiezi

????揭秘vuesfccli-组件研发利器

前言本文将揭示vue单文件组件的工具 vue-sfc-cli 的内涵,说明它是如何在整个组件研发流程中提升效率的。 本文可以看成是 ????vue组件发布npm最佳实践 的成长篇,是 ????打造自动化的Github Workflow 的姐妹篇,是团队最佳实践的落地产物,涉及的背景知识有点多,需要花点时间消化???? 使用教程快速开始npx vue-sfc-cli# 接下来会有一串的提示,请务必填写# 推荐kebab-case风格,小写字母,多个单词用-(dash)分隔,如my-component# 填充完提示后cd my-component# 使用git初始化,这样可以使用commit hookgit init# 安装依赖yarn# 开始开发yarn dev# 打包yarn build# 可以发布了!yarn publish参数选项-u, --upgrade根据 template目录下模板,生成新的文件,更新到当前组件中。使用的是覆盖策略,默认覆盖的文件定义在 update-files.js。常用于使用最新版本vue-sfc-cli对旧组件的配置进行升级 # cd my-componentnpx vue-sfc-cli -u--files如果想更新额外的文件,可以传此选项,后接文件名,多个文件使用 , 分隔 npx vue-sfc-cli -u --files package.json,.babelrc.js--test生成一个测试的组件模板,常用于ci环境测试。 npx vue-sfc-cli --test示例文档在docs目录下,新建 md 文件,建议命名同样是kebab-case 以上传组件upload-to-ali的 docs/draggable.md 文档为例  yarn dev 时会转这个markdown文件就会换成demo,可以看到实际代码,还可以实时修改代码,让demo刷新 API文档在vue文件里,编写注释,即可生成API文档。 props在props里使用多行注释 slot在slot上一行,使用  @slot 开头的注释 event在emit事件上方,使用多行注释 methods在要公开显示的方法上方,使用多行注释,并添加 @public 效果预览 引入第三方库以Element-UI为例 yarn add element-ui新增一个文件:styleguide/element.js import Vue from 'vue'import Element from 'element-ui'import 'element-ui/lib/theme-chalk/index.css'Vue.use(Element)修改配置文件:styleguide.config.js 环境变量如果需要使用环境变量,推荐使用 dotenv  yarn add dotenv --dev ...

July 7, 2019 · 2 min · jiezi

开发一个基于-Vue20-的个人天气预报

本场 Chat 是一个基于 Vue 的个人天气预报项目,就是兴趣所致,做来玩玩。顺便扩展一下知识面。 本项目会采用高德地图 API,Echarts 可视化库和 Vue 相关的技术来开发本项目。有兴趣的同学,可以一起来玩玩。 本场 Chat 你将学到如下内容: 学会制作自己的天气预报;学会使用部分高德地图的 API;学会使用 Echarts的部分 API;Vue+Webpack 相关的一些技术。有兴趣的请到gitchat查看: https://gitbook.cn/gitchat/ac... 效果图如下:

July 5, 2019 · 1 min · jiezi

腾讯荣获唯一OSCAR尖峰开源企业奖

7月3日,由中国信息通信研究院主办的2019云计算开源产业大会在北京举办。腾讯开源独揽尖峰开源企业奖、尖峰开源技术创新奖(自主研发项目)、尖峰开源技术创新奖(基于社区版本二次开发项目)、行业开源技术领航奖和尖峰开源人物等5项大奖,并成为首个通过可信开源治理能力评估认证的自发开源企业。 就在7月2日,腾讯在GitHub上的Star数累计达到23万,在全球企业开源Star数排名中跃居前十。 腾讯开源管理办公室执行总监许勇表示,“我们最近刚发布了腾讯开源路线图,通过‘三步走’的开源计划,不断深化腾讯已有的技术能力。在内部,我们也在大力推进开源协同,可以预见,未来会有越来越多的优质开源项目涌现。在开源的道路上,腾讯致力于贡献企业的科技力量,助力开源行业规范化,推动开源和开放进一步升级。 唯一尖峰开源企业奖获奖单位,全国首家通过自发开源类可信开源企业认证 自2010年以来,腾讯开始试水开源,为适应开源业务日益蓬勃的发展情况,腾讯积极探索有自己特色的开源治理方法,特别成立了腾讯开源管理办公室,并下设项目管理委员会、腾讯开源联盟和开源合规组三大组织,自上而下地传递腾讯开源策略,自下而上地落地开源技术生态。同时,通过开放的开源评审平台,孵化和培育优秀的自主开源项目。此次会上,腾讯不仅是唯一的OSCAR尖峰开源企业奖获奖单位,腾讯开源联盟主席堵俊平也荣获开源尖峰人物奖。 腾讯开源管理办公室高级合规经理夏紫鑫介绍,这是一套从平台建设、孵化、评审到项目发布、运营的完整开源运作机制,不但使腾讯开源以高效、可持续的方式发展,也为行业的开源标准化治理提供了很好的借鉴模式。腾讯也是此次全国首家通过可信开源治理能力评估认证的自发开源企业,体现了行业对“腾讯方法”的肯定。 据了解,可信开源认证由中国信息通信研究院牵头、国内20余家IT企业和金融机构都参与了制定,是国内首个开源治理能力评价标准。面向自发开源企业的开源治理能力评估,主要考察企业在开源治理组织架构、开源项目管理制度、开源工具平台建设、开源项目申请、开源项目审批、开源项目发布、开源项目运行维护、开源社区管理、开源项目关闭共九个方面的规范性。 在高效的开源治理机制之下,腾讯涌现了一批高质量、高复用的开源项目,截至目前总数已达75个,覆盖云计算、腾讯游戏、腾讯AI、腾讯安全、小程序等多个领域。这些项目在GitHub的各项互动也获得了很好的反馈。就在7月2日,腾讯在GitHub上的Star数累计达到了23万,在全球企业开源Star数排名中跃居前十。作为收藏开源项目的功能,Star数越多,表示该项目越受欢迎。 TarsCloud、腾讯云TStack等获开源技术创新奖 作为代表性项目,腾讯开源旗下的TarsCloud、腾讯云TStack等在会上亮相。 TarsCloud此次获得了自主研发项目类的“尖峰开源技术创新奖”。它包括TARS、TSeer、DCache 三个开源项目,TARS是基于名字服务使用TARS协议的高性能RPC开发框架,同时配套一体化的服务治理平台。TSeer和DCache基于TARS生态切入不同细分领域,TSeer是对TARS名字服务功能的轻量化,DCache则是基于TARS框架开发的分布式NoSQL存储系统。 据TarsCloud项目负责人单致豪介绍,TarsCloud开源项目已经应用在了通讯、金融、交通、物联网等领域的上百家企业,服务有上万名开发者。从项目受欢迎程度和代码贡献程度看,截至2019年7月4日,TarsCloud累计Star数超过一万,已经有87位贡献者,平均两个月发行一次新版本,Commit数达1479个,现有13个代码库。从技术创新来说,TARS提供了高效、可视化运维平台,支持多语言,包括现今各种主流语言,如C++、Java、Go、PHP、Node.js等,能自动生成客户端和服务端相关的通信代码,支持同步、异步、单向三种调用模式。同时,它支持IDC、SET分组,提供了跨地区、跨机房,就近接入的功能。TSeer轻量级服务注册发现容错方案,对业务侵入性极低。DCache的数据采用内存存储,支持连接后端DB实现数据持久化。 获得基于社区版本二次开发项目类“尖峰开源技术创新奖”的是腾讯云TStack。作为目前国内最大的开源私有云平台之一,腾讯云TStack基于OpenStack、docker、k8s、istio等开源底层,并在开源基础上进行了大量的开发改造,不仅解决了OpenStack在大规模部署时的存在的不稳定风险,还实现了自动化部署、多云管理、容器服务与微服务框架等关键能力,并提供完备的产品体系和运营服务,形成一整套私有全栈云解决方案。 腾讯云TStack技术负责人郑松坚提到,腾讯云TStack超强的兼容性不仅支持传统X86架构,还可适配多种国产服务器、小型机等,灵活的交付部署能力使其具有极强的项目适应能力,被广泛应用于政务、医疗、制造、建筑、教育等关乎国计民生的行业中。截至目前,腾讯云TStack在腾讯内部部署的主机已经超过12000台,稳定运营7年。 蓝鲸智云斩获 行业开源技术领航奖 “行业开源技术领航奖”是今年设置的新奖项,旨在表彰与OSCAR建立合作的自主开源项目中,能够在垂直行业内产生巨大影响,填补国内技术空白,起到引领和带动效应的项目。 获奖的腾讯蓝鲸智云项目定位于企业上云前后的研发、运维、运营一体化跨云管理,基于PaaS技术构建新一代企业分布式运营操作系统,适用于私有云、公有云、混合云等多种场景。目前开放的国内唯一的运维PaaS部分已经帮助数万家企业解决了运维自动化、运维一体化和运维开发等云时代的运维难题,其中开源的CMDB、标准运维、容器管理、持续集成等部分均实现了“自主开源”,“完整开源”和“协议宽松”三项基本要求,对垂直行业产生了巨大影响,填补了国内技术空白,受到众多企业的接受及模仿,起到了引领和带动作用,给予重点表彰,单独授奖。

July 5, 2019 · 1 min · jiezi

VueBetterScroll-实现多Tab上拉加载更多实例

本场 Chat 是讲一个基于 Vue+Better-Scroll 实现多 Tab 切换上拉加载更多的实例,像这种多 Tab 切换加载更多的场景,不管在 PC 端还是移动端都还挺常见的,比如商城类,订单中心等。本人在项目中也经常用这种,已经轻车熟路了,所以就想做个总结出来,并做成一个实例 Demo,把经验分享出来,供同样有所需的前端同学学习。 本项目使用 Vue 和 Better-Scroll 相关的技术来开发本项目。通过学习本项目,你也可以做出多 Tab 切换上拉加载更多的效果,而不必到处找别人的例子。 本场 Chat 你将学到如下内容: 学到 Better-Scroll的相关知识;学到 Vue 开发的相关知识;学到用 Vue+Better-Scroll实现多 Tab 切换上拉加载更多。有兴趣学习的可以请到gitchat查看: https://gitbook.cn/gitchat/ac... 效果图如下:

July 5, 2019 · 1 min · jiezi

仿美团城市选择器的-Vue-插件开发实例

本文是讲一个基于 Vue 的仿美团城市选择器的插件开发实例,目前关于城市选择器的插件比较少,在自己做项目的时候一直没有找到合适的城市选择器插件,所以自己开发了一个。同时也想把这个插件分享给出来,供同样有所需的前端同学学习使用。 本项目使用 Vue 和 Vue 插件相关的技术来开发本项目。通过学习本项目,不仅可以拥有自己的城市选择器插件,还可以学到 Vue 插件的开发过程以及 NPM 发布包的相关知识。 通过本吻你将学到如下内容: 学会制作自己的城市选择器;学习 Vue 插件的开发过程;学习如何将制作的插件发布到 NPM。请到gitchat查看 https://gitbook.cn/gitchat/ac... 效果图如下:

July 5, 2019 · 1 min · jiezi

获取不到Gist-id解决gistgithubcom无法访问的办法

欢迎关注前端小讴的github,阅读更多原创技术文章办法超简单,如下图: 在编辑器打开HOSTS文件,在最后一行添加192.30.253.188 gist.github.com,如下图: HOSTS文件的作用?Hosts是将一些常用的网址域名与其对应的IP地址建立关联的”数据库”——用户在浏览器输入网址时,系统优先从Hosts文件中寻找对应的IP地址,找到后自动打开对应网页;若没有找到,则再将网址提交DNS域名解析服务器进行IP地址的解析。(更多关于HOSTS文件的详细说明可自行百科)

July 5, 2019 · 1 min · jiezi

积压修饰最佳实践-Best-Practices-for-Backlog-Grooming

如上所述,积压修饰正在进行中。通常,这些更新是在与相关利益相关方会面时进行的。产品所有者将主持会议并让每个人查看现有的用户故事,以决定哪些可以从积压列表中删除。此时也可以添加用户故事,或者拆分用户故事以使其更易于管理。以下是一些提高进度效率的技巧。 先让较高级的项目深入敏捷倡导者Roman Pichler提出了首字母缩略词DEEP,它代表了详细的,适当的,估计的,紧急的和优先的。这些描述了管理良好的积压。 “适当详细”意味着优先级较高的项目应具有比优先级较低的项目更多的细节。应该“估计”积压项目以了解实施的成本。“紧急”表示积压是动态的,总是从想法转向完成工作。“优先排序”说明哪个项目最重要,必须在其他项目之前解决。它们位于列表的顶部,最后移动到最低优先级。 有更好的会议积压修饰 (backlog grooming) 的工作通常在会议中完成,因此更有效地开展这些会议可以提高订单的效率。因此,您并不总是要邀请所有人。唯一重要的人是产品所有者。之后,只邀请那些相关的人。如果需要来自会议中不需要的其他人的输入,则在会议之前获取该信息。 和任何会议一样,准备好了。制定一份明确规定目标的议程,并确保所有人都了解这些目标是什么以及预期如何为实现目标做出贡献。最后,保持会议简短。会议往往会很长,但最好是保持简短。知道必须做什么,并且可能每两周才会遇到一两个小时。 牢记顾客积压修饰必须遵循lodestar,指南始终是客户。将它们视为优先处理积压工作。客户可以像其他所有衡量标准一样。该产品正在为客户生产,因此客户是始终保持视线的目的地。 识别依赖关系有时会有用户故事或任务在另一个完成之前无法启动。如果未识别,这些依赖关系可能会阻止团队成员,延迟进度并阻碍团队生产力。因此,请确保在积压修饰时识别任何依赖关系。 疏理有太约两个Sprints的用户故事的量 (而不是一个Sprint)完成备份修饰会话后,应该有两个可用于团队准备工作的用户故事冲刺。通过这种方式,他们有足够的工作让他们保持参与,直到下一次积压工作,并且如果优先级发生变化團隊也可以继续补上其他工作。 倾听这个建议适用于无数的个人和专业情况,无论如何重复,它总是需要进一步关注。虽然具有既定目标的议程对于智能积压培训至关重要,但这并不意味着它是一成不变的。产品所有者必须保持开放的心态,倾听团队的意见,并根据需要进行调整。 专业在积压的修饰会议中会有不同的意见,但团队中的每个人都在努力创造最好的产品。他们可能会在如何做到这一点上发生冲突,但他们的动机是激情和经验。产品所有者或经理必须牢记这一点并对所有人采取友好行动。让每个人都听到并受到尊重,但让团队保持专注。

July 4, 2019 · 1 min · jiezi

Scrum會議太多了-你的團隊在Scrum活動中使用了多少時间

Scrum事件 - 會議太多了,太耗時了!!!我们究竟化了多少间?幾乎每一個我將Scrum引入新公司的團隊都曾在某些方面抱怨Scrum會議的持續時間。我得到的評論如下: “Scrum會議太多了”“什麼?兩個星期衝刺的四小時計劃會議!“”我們在這裡舉行了很多會議,現在你們正在通過更多的會議來殺死我們“”我不能讓我的團隊花費這麼多時間參加會議“”我太忙了“以下是Scrum中的事件以及每個事件的小時數: 新手團隊可能會看到這些數字在每個事件中都有大量的時間,但是如果您遵循檢查原則並實際深入了解時間; 你可能會對一些數字感到有些驚訝。 出於數學目的,我將假設平均上午9點到下午5點的工作,工作時間為8小時。我還將承擔週一至週五的工作,因為這在我與之合作的所有團隊中都很常見。 以下是Sprint中每個事件花費的時間細分: 2%的回顧團隊應該花時間檢查他們的流程和實踐,並尋求更好,更快地做事的機會。沒有這種檢查和精神,適應就完全喪失,敏捷的本質不存在。 2.5%的評論和反饋在衝刺結束時,團隊與利益相關者交談並尋求他們對剛剛完成的工作的反饋非常重要。這種風險管理策略通過允許團隊展示他們建立的內容以及利益相關者同意或糾正它來幫助儘早糾正錯位目標。不花時間做這些反饋只會導致錯誤的產品交付給利益相關者,而不是他們的期望。這通過定期反饋支持對增量和迭代開發的整體信念。 接下來是審查即將開展的工作,並允許產品負責人向團隊和利益相關者展示工作管道的健康狀況。它有助於透明地溝通產品,項目和即將開展的工作。 2.5%協調每日Standup每天,團隊只需要一個15分鐘的活動來計劃誰在接下來的24小時內做什麼,直到下一個每日Scrum。 5%規劃和設計最大的Scrum活動是規劃下一個sprint,並就如何處理工作進行高級設計。傳統開發團隊在規劃和設計方面花費了更多精力,而Scrum團隊完全減少了這一點。然而,這一事件是最具爭議性的事件,可能團隊認為這5%時间仍然很長。我個人不認為要求任何團隊有5%的時間來計劃和設計即將開展的工作是一個很大的問題。當然,專業人士應該能夠認識到計劃的重要性。 88%工作時间明显我们还有大比率時間去工作。這是一些更多的事實如下: 會議每天1小時(平均) 如果你把它看作平均每天只有一個小時的會議,是多是少见仁见智吧。 時間盒 時間框是事件的最長建议時間,這意味著如果您可以更快地地它们完成,只要能同時提供相同的質量; 那麼請快點完成它。 如果你的會議次數多於Scrum會議,那麼你做錯了,組織的功能失調需要解決。示例計算

July 4, 2019 · 1 min · jiezi

git关联本地文件和远程仓库

平时自己有一些本地的项目想把它们放到github上去,就需要关联一下。 步骤一:在本地想放到github上的项目的根文件夹执行git init。 步骤二:在github上新建一个仓库Repository,得到仓库地址。比如https://github.com/MR-yuhuash... 步骤三:本地项目根文件夹执行: git remote add origin https://github.com/MR-yuhuashi/jest-nuts.git步骤四:关联之后,就可以进行拉取远程代码和提交本地代码到远程等等操作啦比如 git pull origin mastergit add .git commit -m 'first commit'git push

July 3, 2019 · 1 min · jiezi

用户故事地图-User-Story-Map

User Story Mapping 是Jeff Patton倡导的一项技术。它为我们提供了一种将整个产品或服务设想为用户完成的一系列任务的方法。 从纯粹的实际角度来说,它涉及构建一个用户故事网格,这些故事在标题下排列,代表用户在产品中的体验。这可以通过团队成员之间的一系列对话迭代完成。因此,第一次尝试可能看起来像这样,用户故事按其各自的功能分组(有些可能称这些顶级功能'Epics')。 在这里,我们将产品的高级功能(骨干,如果您愿意)分解为组件用户故事。很容易看出每个用户故事属于哪个功能,因此每个用户故事都在整个产品的上下文中呈现,而不仅仅是列表中的项目。 虽然这种方法有助于组织我们的想法 - 它已经比简单的故事列表更具信息性 - 它实际上还没有构成故事地图,因为它没有考虑用户旅程的流程。 开发故事地图让我们通过想象一个简单的电子商务网站让我们的例子更加具体,产品愿景板提到了三个特征: 产品页面产品搜索查看最初的故事地图可能如下所示: 我们有“产品页面”功能,其中包含与下面列出的功能相关的用户故事,同样适用于“产品搜索”和“结帐”功能。但是这些故事还没有特别好地发展,并且没有迹象表明每个故事的重要性。 例如,用户需要在订购之前阅读产品说明,但这是在他们阅读评论之前或之后发生的吗?哪个为用户提供更多价值? 在进行了更多的研究并收集了来自利益相关者的更多意见之后,另一次迭代可能看起来像这样。 请注意,我们通过将其中的一些细分为更小的部分来改进我们的用户故事,我们引入了一个新的维度,故事按照用户旅程中的位置排列,我们已经开始安排最高的我们地图顶部附近的优先故事 在这个方向上进一步发展,很容易看出我们最终是如何得出一张地图,指出在前几个版本中需要包含哪些故事。 建立故事地图 (Visual Paradigm)故事地图是一个用于需求收集的4级层次结构。故事地图从不同来源(即积压)收集的用户特征集合开始,这些用户特征将通过执行某些任务作为活动来实现。这些任务可以转换为史诗,然后转换为软件开发的用户故事。 故事地图结构:用于实现目标的用户功能(待办事项记录)>活动>任务>史诗>故事 规划故事地图的步骤为了促进敏捷开发,Story Map可以接收从不同来源识别的用户功能。如上所述,它可能是来自EA合同的要求,来自项目管理计划的工作包或特殊分析(例如 - 是和将来的分析),使用图中的用例与敏捷软件开发集成等等。 假设我们已经从多个不同的来源累积了故事地图积压中的用户特征列表。通过执行某些任务,将实现用户功能作为活动。每个任务都可以进一步分解为几个史诗(更大的用户故事)。每个史诗都包含一个用户故事列表,这些用户故事被分解为适合适合sprint迭代的大小。以下是规划故事地图所涉及的步骤: 将用户要素从左向右拖动到地图的顶行。地图顶行中的每个功能都是呼叫用户活动。 创建完成活动所需的许多步骤,称为用户任务。 这些用户任务中的每一个都可以分解为多个史诗。 在史诗下,可以定义用户故事列表,其大小适合放入sprint。 请注意:我们可以考虑从左到右安排实施的优先级,从顶部到底部安排用户故事。 相关链接敏捷用户故事映射工具有效的用户故事工具

July 3, 2019 · 1 min · jiezi