科普:码农如何保存代码?

请注意!如果这个系列的文章你从第一篇一直看到了这里,那么你很有做码农的潜质。前面动手操作的过程中我们发现写代码有时会出错,千方百计终于改好以后,是不是很想把这段代码存进保险柜——可不能弄丢了!码农必须要考虑代码管理的问题,万一丢了,可能就是几个月白干了,今天就来聊一下写好的代码应该如何保存。

代码管理的核心思想是用较少的存储空间保存最多的历史版本,并提供快速浏览、比对、冲突解决、回退等功能。最流行的代码管理工具是Git和Svn,前者是分布式的,后者是集中式的。

简单来说,分布式就是每个人的电脑里都保存所有的版本信息(这个信息的集合叫做代码仓库Repo),版本比对、回退这些操作都可以在本地进行,只有涉及多人协作时,一个作为代码数据中心的服务器才是必要的。每个人电脑里的代码仓库都要上传到服务器势必会面临冲突的问题,一般每次修改代码前都会从服务器获取最新的版本,但如果在你修改完成并打算提交到服务器的这段时间内,另外一个人也修改了同一段代码,这时候冲突就发生了,解决觉冲突是代码管理流程的基本操作。Git工具在管理代码时的基本操作就是:pull/commit/push,其中pull/push是在跟服务器交互,commit 则是把这次修改相关的东西记录在Repo里面。

集中式的Svn我们从操做上就可以看出区别,它没有pull和push,因为所有的操作都要跟服务器交互,相当于本地只保存一个版本,就算是只有一个人写代码也得有个服务器,其它功能和操作则是同Git类似的。我个人比较喜欢Git。

说到Git就不得不提GitHub,对,它们是不同的东西,Git是一套工具、系统、一种方法,GitHub则是一个开源社区、一个用于管理代码的网站。开源就是码农们本着众人拾柴火焰高的心态,提倡的一种代码共享的思想,大家写的代码都放在那里,互相学习互相参考、合作开发,充分发挥集体的智慧,最终做出伟大的产品。GitHub早期就是这样一个开源传教士,他鼓励大家把代码都共享出来,创建私有项目则必须付费,不过现在这位传教士的信仰大概也不那么虔诚了,它把自己卖给了一家商业软件公司,创建私有项目也不用花钱了。

GitHub在国内使用可能会不太顺畅,我们也有很多类似的替代,比如gitee.com,我用的是一个原本比较小众的网站,叫做coding.net,存取代码速度非常快,后来感觉也被收购了,不过有很多便宜实用的功能,后面可以介绍一下。

到这里,有了这些方法和工具,就可以开始安心写代码了对不对?No No No!还不到时侯,此时此刻你应该潜下心来好好学一门编程语言了,就像潘石屹同学做的那样。对了,既然到了这一步,我不得不告诉你一件事情:从我这儿什么都学不到的,得看书。

学完Python之后你可以再自学一下 Tensor Flow、DeepLearning、LSTM、seq2seq以及学习过程中碰到其他陌生知识,这些全都学完以后我们可以一起动手写一个基于神经网络的聊天机器人,对,就是能跟你对话的那种。如果你学完了发现我还没发新文章,那也不要奇怪,再等等看,因为我还没学完呢。好的,再见,今天提到很多次服务器,下次就科普一下什么是服务器。

原文始发于微信公众号(EZApps):科普:码农如何保存代码?

试试用100行代码写一个网站

其实写网站之前应该先了解一下浏览器、服务器、http、html、css等等这些东西,我们直接一些,先写一个再说,这样比较直观,后面再回过头聊这些东西也会更容易理解。

网站需要用什么语言来写?我的理解是所有的高级语言都可以,比如C语言、C++、C#、Java、PHP,当然Python也可以,前面介绍过编程语言就像食物种类一样繁多,我们也不讨论到底哪种语言更好,今天就动手用Python来写一个网站,看看到底能有多简单。

要开始写代码了是不是有点激动?我也是。先看看要准备什么工具,这里不妨告诉大家一个秘密:世界上最好用的写代码工具叫做Google,实在没办法用百度也行。不过我们暂时用不到这么高级的工具,先从最基础的来,首先需要一台电脑,有很多程序员尤其是年轻的码农,是一定要用苹果电脑的,因为这玩意儿贵,不对,酷。当然苹果电脑也是有一些实际优势的,主要是因为它的操作系统Mac OS是基于Unix架构的,而另外一种基于Unix架构的操作系统叫做Linux,很多软件在这两种操作系统平台下有类似的版本,它们的命令行操作方式也是类似的,而Linux是开源的,程序员都喜欢开源的东西,因为大家写的代码都可以共享,相当于能力翻倍加持,May the Force be with you!

这里提到几个陌生的名词,像是操作系统、MacOS、Unix、Linux、命令行、开源等等,这些你都可以请教Google,每个名词都够解释一本书的篇幅,不过不用担心,这些对于我们写代码不会造成太大的障碍,等用到的时候再去查也是可以的。对于最后一句英文则要去看一部叫做《星球大战》的电影才能了解。

好,有了苹果电脑,应该就同时有了Python环境,不信?给你看一下:

在苹果电脑里打开一个叫终端的App,红框里是我敲进去的命令,蓝框里则是终端程序对命令作出的回应,这个App似乎在用它蹩脚的英文嘲笑我:你的电脑太旧了所以预装了Python2.7,新款的电脑已经不用这个了,等你有钱换电脑的时候,记得使用Python3。哼!我就不换,看你把我怎么着,Python3也没什了不起:

有没有看到上面这个exit(),对,这就是一句Python代码,不知不觉中我们已经开始写代码了,这一句就是对前面无情嘲笑的反击:把Python2.7给退出去了。原来写代码这么简单,一鼓作气,我们正式开始吧,为了方便文本编辑,再安装一个叫做VS Code的App,具体用法自行了解,找一个文件夹创建两个文件:index.html和webServer.py,里面的代码如下:

第一个文件决定网页的显示内容,我们这里只显示Hello World!几个字;第二个文件是一段Python代码,其中带#的绿色文字叫做注释,是给人看、方便理解的,没有其他用处。从注释可以看出这个网站的工作流程就是服务器从一个叫浏览器的地方接收到一串文字请求,将请求打印出来并根据其中的内容选择将某个HTML文件内容返回给浏览器。我们来看下效果,这回用Python3来启动网站,在Chrome浏览器中访问http://localhost:8000查看效果:

你可能发现代码不到100行啊?是的我撒谎了,其实根本不需要100行代码,1行都不需要,用下面这种方式启动效果是一样的(完全不需要webServer.py这个文件):

以上是使用Python创建网站最基本的示例,不会有人用这个方法去写网站的,如果真的打算用Python建站的话,建议去了解一下Flask框架。好了好了,今天的内容有点多,而且用到了很多陌生的名词,诸如服务器、浏览器之类,我们有必要结合网站的工作原理解释一下这两个名词,不过在这之前先聊一聊写好的代码应该如何保存,下回见!

原文始发于微信公众号(EZApps):试试用100行代码写一个网站

介绍一位新朋友:Python

前文介绍了“码农”和“写代码”两个概念,这样我们就有共同语言了,不管你是什么行业,我用这两个词造的句子你大概齐也能听懂了,这是一个很好的开端,后面我们可以有更深入的交流,今天就来说说语言这回事。

语言是彼此用来沟通的一种约定,树上掉下来一个圆圆的红红的东西,咬一口嘎嘣儿脆还挺甜,大家一合计管这玩意儿叫苹果吧,这就算对上号了,往后只要提这俩字儿都知道在说什么,英语、汉语都是这个原理,写代码用的语言也不例外。

写代码用的语言又叫编程语言,它是人和计算机沟通的一种约定。人的语言我们很熟悉,大概一两岁时就基本掌握了,计算机用什么语言呢?你可能经常听说计算机只认识0和1,其实这都是骗人的,说白了计算机也就是个机器,它哪懂得那个呀,它什么都不懂。机器嘛,你打开它就转,关上它就停了,当然它不止有机箱上那个电源开关,内部无数个小到不能再小、肉眼看不见的零件上都有开关,我们写的代码最终就是去不停地按那些开关。

从能听懂的人话到按开关的动作看起来挺复杂的,实际也挺复杂,中间要经过很多层的翻译,每一层翻译就是一种编程语言,我们习惯认为人是高高在上的、机器则在底层社会,所以离机器更近的语言叫做底层语言,离人更近的叫做高级语言,嗯对,高级。

Python就是一种高级语言,跟它类似的语言有很多,都是高高在上的最顶层,比它们更高级的就是PPT和人与人的交流了。高级语言也有很多种,为什么今天要介绍Python呢?我觉得它比较有用,不光码农用得上,作为事业单位财务人员的我哥也能用得上。码农用Python可以做的事自然不必说了,可谓装逼撩妹无所不能啊,现在比较流行的人工智能、机器学习、神经网络算法这些领域也都把Python作为很重要的工具;那么我哥能用Python做什么呢?他是个精力充沛的学霸型选手,首先Python可以帮他再做一遍财务报表,是的这玩意用Excel就可以做,妙就妙在我们可以用Python来生成Excel,What?! 这不是多此一举么?不不,你不懂,这样会有一种创造出新事物的快感。Python最大的优势在于用的人很多,而且好多别人写好的代码都变成了大礼包,拿来就能用。

由于方便友好用户多,Python这门语言已经变得老少咸宜了,各种培训机构遍地开花,我儿子的编程课老师说等到九岁就可以上他们的Python课程了,我想了想,九岁可能有点晚。

好了,先介绍这么多,趁热打铁,下次我们就开始写代码。

原文始发于微信公众号(EZApps):介绍一位新朋友:Python

科普:什么是写代码?

上一篇介绍了码农就是那些从事写代码工作的人,那么什么是写代码?怎么讲呢,现在已经没有人不知道电脑了,写代码其实是人对电脑的一种服务,目的是让电脑能够好好工作,就好比农民买了一头牛,每天要喂料饮水,还要带它下地耕田、拉车运粮,总之牛虽然有一把力气,干活还必须得有人跟着。码农写代码也是充当这样的角色,工厂生产出来的电脑被搬到各行各业的机房、办公桌上,虽然插着电、号称比人脑快一亿倍,但它们并不能自己工作,还需要有人来为它服务,更具体地说,需要人写出的代码来服务它,具体就是告诉电脑先干什么再干什么,跟农民牵着牛鼻子往田里拽是一个道理。

那么代码到底是些什么东西?代码并不是一件固定不变的物品,就像米饭、大米、水稻、小麦、面粉、面条、馒头,阶段不同形态各异,代码也是这样,也有各种各样的名字:软件、程序、应用、APP、网站、网页、算法、服务等等。最初的阶段就是码农进行“写”这个操作的阶段,这时候的代码就是一些字母和数字,跟英语、汉语没有太大的差异;随着生命周期的演进代码可能变成一些叫做文件的东西,跟你往优盘、手机里保存的照片、视频没什么分别;这些文件被运送到各式各样的电脑里,也可能跑到叫做内存或者缓存的各种实体物件中,就像米饭面条包子馒头被每个人咽到肚里一样,一个由电脑组成的世界就开始运作了。对了,电脑又叫计算机,所谓计算就是电脑嚼馒头的行为。

扩大一下范围,我们日常用到的手机、平板、电视,甚至包括冰箱、洗衣机、路边的监控摄像头、汽车,几乎所有的电子产品都可以看成一台计算机,里面都有码农写的代码。

食物的多样性和代码的多样性,缘起是一样的,都是因为人类五花八门的需求和欲望。

好了,今天就说这么多,下次我们尝试了解一种写代码的语言:Python.

原文始发于微信公众号(EZApps):科普:什么是写代码?

科普:什么是码农?

首先,这是一篇科普文,是给那些还不属于码农的人看的,比如我哥,他曾经是一名优秀的的美术编辑。昨天我试图用半个小时给他讲清楚一个网站是如何工作的以及如何快速搭建自己的网站,他学习能力很强,我一直把“这个很简单”挂在嘴边,然而完全讲不清楚,需要解释和演示的东西还挺多。所以我想,要不写一个系列的科普文,深入浅出地介绍一下码农的世界。

码农这个词在码农群体中间很流行,码农的身边全是码农,所以他们认为世界上大部分人都是码农、全世界都知道码农。

然而,到底什么是码农?大概就是指从事写代码这类工作的人,包括软件工程师、算法工程师、硬件工程师等俗称程序员,也可能包括项目经理、产品经理、部门经理、各种经理,甚至这个行业的CTO、CEO、董事长都可能因为喜欢写代码而把自己划归为码农。码农像是一种自己给自己取的外号,用来自嘲,某种程度上也算是自我夸耀,至于码农都没头发、码农都找不着女朋友这些大约都是他们自己编的段子。码农大部分也都是普通的平凡人,有长得矬的也有帅哥美女,有沉默内向的也有侃侃而谈的,有不爱洗澡的也有特会打扮的,码农里也有跨界的名人比如刺猬乐队的赵子健。

别的地方我不了解,北京的码农可能出没在西二旗软件园、望京酒仙桥、温泉环保园等地。

好了就写这么多吧,下回说说什么是写代码。

原文始发于微信公众号(EZApps):科普:什么是码农?

原创Hexo主题-Gallery

这是一个相册主题,图片使用腾讯云的对象存储保存,文章的 Title 与存储桶中的文件夹名称匹配时自动扫描所有图片,并以瀑布流的形式显示在文章页面中。

  • 直接上代码: https://github.com/EasyApple/hexo-theme-gallery

Quick Start

  1. 图片资源需预先上传到腾讯云对象存储空间,并配置权限、跨域访问 CORS 等;
  2. 下载主题文件到 themes/gallery/,在网站 _config.yml 中配置当前主题为 gallery;
  3. 在 gallery 主题的 _config.yml 中配置 COS 访问地址:tencent_cos_url: http://yourtencentcosurl/;
  4. 新建 post 并将 Title 设置为与 COS 中某个文件夹名称一致,提交发布即可查看效果;
  5. 主题效果请参考 Demo Site:https://gallery.museradio.net

Demo Site

Reference

LeetCode 练习总结

LeetCode 常见题型

题型 知识点 题目
回文/子串/子序列 滑动窗口 #3 #76
动态规划 #3 #5 #128
并查集 #128
中心扩散 #5
模式匹配/转换 循环/分治 #6 #932
动态规划 #10 #32 #72
栈/队列/回溯 #17 #32 #1239 #1255
位压缩 #32 #1255
排序/堆/分治 #692
广度优先搜索 #127
求值/中位数/XX数 二分查找/数组 #4
动态规划/分治/递归 #53 #509 #932
排序/双指针 #295
单调栈 #503
容器/股票/航班预订/上下车/加油站 双指针 #11 #42 #121
一次遍历 #121 #134
动态规划 #121
差分 #1094 #1109
最短距离/路径/岛屿/区域 递归/动态规划 #62 #63 #64 #94 #145 #337
DFS/BFS #102 #130 #200 #684 #1319 #面试16.19
并查集 #130 #200 #547 #685 #1319
任务管理/进程操作 排序/桶思想 #621
并查集 #582

继续阅读LeetCode 练习总结

灵感录音室

或许我最大的缺点就是兴趣过于广泛、无所精通,以至于年过而立一事无成,至今依然在思索如何将这短板变成长处,比如写不动代码时去做一个知识面颇宽的产品经理。
我的其中一项爱好是广播,爱听广播、加入过校园广播电台、也自己做过播客。做播客其实涉及很多东西,比如我做的是故事配乐朗读(录播节目),首先要准备故事素材;然后需要一个编辑把文字内容润色为可以用声音演绎的版本;再需要一位主播(那时候的主播跟现在的主播不是一个意思哦)和一位录音师,把文稿录制成音频;接着做配乐设计并进行分轨编辑、混音等;最后还要有一个平台把节目发布出去并向目标听众推广;当然还需要一套录音设备和软件,这里就不细说了。可以看到,从产生一个想法到节目最终被听众听到,中间有很多环节。很多优秀的播客节目都是一个颇具规模的团队在运作,比如糖蒜广播、逻辑思维等。而像我这样完全出于个人爱好的 Podcaster 往往都是单枪匹马在战斗,不妨看看我的超级团队:

继续阅读灵感录音室

Easybot 聊天机器人

这是一个用Python+Tensorflow实现的聊天机器人程序,使用seq2seq模型训练。示例所用训练数据集是IMDB600多部电影中的英文台词对话部分,训练时间为3天左右(2012款MacBook Pro i7),目前仅支持英文。另外程序包含一个简单的Python+Flask WebUI,并实现了微信公众号对接功能。

操作说明

execute.py为Python主程序,程序有三种模式:训练、测试和服务,可通过修改配置文件seq2seq.ini来改变模式:

  • 选择运行模式:
    • 训练模式:mode = train
    • 测试模式:mode = test
  • 前台进程方式启动程序:python execute.py
  • WEB服务方式启动程序:python webui/app.py
    • 需预先安装Flask环境:setup.sh/requirements.txt
    • 通过脚本启动后台服务:sh webui/startup.sh

继续阅读Easybot 聊天机器人

EasyDesktop 轻松桌面 V1.0

功能简介

  • EasyDesktop 是 Windows 平台下的休闲娱乐小工具,通过给键盘、鼠标操作增加有趣的特效,为呆坐在电脑前的我们带来了些许乐趣。
  • 双击 EasyDesktop.exe 即可运行程序。启动后桌面上会显示一个蓝色的图形,这个就是 EasyApple 的LOGO。
  • 在蓝色图标上按鼠标右健来可以更改参数,参数的意义请自行摸索。在键盘上敲 H I D E 几个键并按回车,可以隐藏图标。
  • 按下鼠标左键并拖动时,你会看到有一个小圆圈一直伴随着光标,甩一下,你甚至可以把它甩出去,赶快试一下,很意思哦~~~
  • EasyDesktop 还有许多有趣的功能,直接在键盘上输入命令即可,比如:HEATMAP回车,你会看到自软件启动以来你在屏幕上点击鼠标的热图。
  • 输入 HELP 并回车,你可以看到更多的的命令,自己试试吧!祝工作愉快!

继续阅读EasyDesktop 轻松桌面 V1.0