我泡在GitHub上的177天 by Ryan Seys

我泡在GitHub上的177天

这是一个关于我如何连续177天(将近半年)泡在 GitHub 上不间断地贡献代码的故事。我会谈到我为什么要这么做,以及为什么你也应该效仿,或者至少做点类似的事情。这是一个关于接受挑战,改变旧习并懂得适可而止的故事。我在这个过程中获益匪浅,也希望能够给大家一点启示。下面我开始讲这个故事。

 

github的30天挑战

故事要从一个30天的挑战开始说起。2月21日那天,我的一个好朋友Shuhao发消息给我,向我发出挑战:我必须连续30天向Github提交代码更新,而他也同样要完成这个任务。那时我在Github上的最长“连击”天数只有5天而已。这个“连击”记录太不给力了,我一直想要提高它,却总是没有足够的动力付诸实践。这个对我俩而言都非常具有挑战性的机会正是我所需要的。我接受了这个挑战,并列出了以下几个简单的约定:

  1. 除非有显著的更改,否则编辑README文件不能计入更新
  2. 禁止使用脚本自动编辑;所有的提交的更新必须是人为完成的
  3. 禁止提交搞笑的无关程序逻辑之类的更新

一开始我就来了个爆发式增长——第一天提交了近30个更新到我的网站及其他项目。 事实上,这也是我在这近半年的“连击”过程当中一天内贡献最多的一次。我立志完成这30天的目标,甚至更长,直到我俩中有一人认输为止,这样的想法让我感到斗志昂扬——我想这是最好的开端。

 

一个星期

到了一个星期左右的时候,这个挑战的难度开始渐渐地显现出来。有一次我差点忘记还有这回事,直到最后一刻才匆匆忙忙把当天的更新提交上去。Shuhao在第八天放弃了;我想他大概是忘记了——这也无可厚非。

 

两个星期

到了第二周和第三周,每天记得要提交更新已经变得比较容易,我把它变成了一种习惯性地动作。很快这种提交更新的自醒就和刷牙的自觉绑定了起来,而刷牙是一件我很少会忘记去做的事情。与此同时,我开始阅读一本叫《习惯的力量》的书,这本书让我了解了习惯,以及如何理解和改变你的习惯并从中受益。如果你有兴趣了解你的大脑是如何处理习惯的,我推荐你读一下这本书。它很有意思,里面有个故事提到了一个从来记不住回家路线的人,却能够每天在这个街区散步而从来不迷路,这都是因为习惯的力量。有点扯远了。还没等我意识到习惯的力量,它已经引领我到达了……

 

三十天!

三十天是个激动人心的里程碑!我做到了!我只想继续前进!三十天之后,“连击”就变成了一种生活方式。吃饭,睡觉,提交更新——已经成为常态,我可以不费吹灰之力地把它纳入我每天的例行公事。可是像所有习惯一样,它很难保持百分百的连贯性,有时太忙了就得临时抱一下佛脚。曾经我从手机上提交过更新,跟朋友聚会到很晚回家之后提交过更新,甚至在“鲍尔默癫峰”【译注1】状态下都提交过更新。这让我想起了一些我学到的关于向GitHub提交代码的小技巧:

GitHub代码更新小技巧:

  1. GitHub按照太平洋标准时间(PST, Pacific Standard Time)计时,这意味着我可以在东部时间(EST, East Standard Time)凌晨12点到3点之间随便在哪儿提交代码,然后算成是前一天的任务,这招在我有几次回家特别晚的时候很管用。
  2. 记录一个问题可以算做提交过东西了,这招在我想不出什么新点子的时候救我过几次。
  3. 提交更新和上传代码是分开算的,现在提交更新然后晚点再上传代码,还是会以提交更新的时间为准。
  4. 新建代码库的初次提交是不纳入统计的,但是当你第二次提交更新的时候就会把两次都算进去,这点比较诡异。
  5. 归并请求创建的时候会被算作一次提交,实际合并分支的时候则算作另一次提交。如果最后两个分支没有合并,那么不好意思,第二次提交就不算数了。

虽然这些小技巧曾经在我的GitHub“连击”过程中毋庸置疑地挽回了局势,我还是遵守了之前列出的那些小约定。你可以在这里找到更多GitHub小贴士。

 

一百天

一百天对我来说也是一个重要的时刻。那时我在旧金山,在Mozilla实习。你可以在我的博客(注:该文已由@ctcetl 翻译)上读到关于这段经历的所有东西。在Mozilla实习最棒的一点就是一切都是开源的,所以我基本上只需要工作就可以让我的“连击”不间断。虽然没有说起来那么容易,但是呆在Mozilla确实帮了大忙。

在Mozilla内部也有一些竞争对手,包括Shuhao,他这个暑假跟我一起在那里实习,重新开始了他的“连击”并且这次更加成功;据Mozilla的小道消息说,另外还有一个我不认识的对手也在默默地与我竞争。

 

一百五十天

那时我继续坚持“连击”的动力突然急剧下降。我把这归根于新想法的缺失,想追寻新挑战的冲动,同时我也意识到“连击”总有一天会不可避免地结束。这些因素,再加上实在有太多方法可以作弊(就像这哥们干的那样),使得这个挑战变得来越鸡肋。

我想要逃离。我想要片刻休憩,彻底忘掉GitHub。我只想要无拘无束地思考新的主意而不用愁着为了提交更新而提交更新。于是我决定用一个整数来结束”连击“。我决定一直继续到两百天,然后我就可以淡定地坐下来,看着我的“连击”记录逐渐崩塌。

 

呃噢!

200天的目标终于还是没有达成,我在第178天得时候忘了提交更新。意识到杯具的同时,我也卸下了心头的重担,感觉浑身轻松。一切终于结束了。

 

回顾

177天的“连击”教会了我不少关于习惯的东西。它教会了我好习惯如果刻意过度遵循的话也会变成坏事;它让我明白了“不要断开惯性链”【译注2】的力量,那是驱使GitHub“连击”成功的激励方法。我现在仍然定期向GitHub提交更新,但是现在“必须”提交的少了,“需要”提交的多了。我有时会离开电脑几天去更新我的想法,等我回来的时候就变得更加给力。我推荐每个人都可以尝试一下用这个方法去打破一个旧习惯或者建立一个新习惯,但它可能过于强大以至于会让人不能自拔,所以小心点!

如果你知道谁有比我更长的GitHub“连击”数,务必告诉我!我还没找到过这样的人呢!:)

快乐地贡献代码吧!请在GitHub上follow我!这是在HN上的讨论

 

【译注】

      1. Ballmer Peak, 鲍尔默癫峰,传说中微软在80年代末发现的定律,即程序员在血液酒精浓度在0.129%~0.138%时会产生超人的编程能力。这个能力也有副作用,千万不要给一个团队可以喝一年的威士忌然后让他们开始干活,Windows ME就是前车之鉴。
      2. Don’t break the chain, 不要断开惯性链,指的是一种自我激励方法,每天完成一个目标之后就在时间表上做一个标注,时间长了标注就会连成一条链,可以用来自我激励,坚持每天完成目标,这条惯性链就不会断开

参考:本文由 伯乐在线 - 龚凌晖 翻译自 Ryan Seys

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
图像识别技术在病虫害检测中的应用是一个快速发展的领域,它结合了计算机视觉和机器学习算法来自动识别和分类植物上的病虫害。以下是这一技术的一些关键步骤和组成部分: 1. **数据收集**:首先需要收集大量的植物图像数据,这些数据包括健康植物的图像以及受不同病虫害影响的植物图像。 2. **图像预处理**:对收集到的图像进行处理,以提高后续分析的准确性。这可能包括调整亮度、对比度、去噪、裁剪、缩放等。 3. **特征提取**:从图像中提取有助于识别病虫害的特征。这些特征可能包括颜色、纹理、形状、边缘等。 4. **模型训练**:使用机器学习算法(如支持向量机、随机森林、卷积神经网络等)来训练模型。训练过程中,算法会学习如何根据提取的特征来识别不同的病虫害。 5. **模型验证和测试**:在独立的测试集上验证模型的性能,以确保其准确性和泛化能力。 6. **部署和应用**:将训练好的模型部署到实际的病虫害检测系统中,可以是移动应用、网页服务或集成到智能农业设备中。 7. **实时监测**:在实际应用中,系统可以实时接收植物图像,并快速给出病虫害的检测结果。 8. **持续学习**:随着时间的推移,系统可以不断学习新的病虫害样本,以提高其识别能力。 9. **用户界面**:为了方便用户使用,通常会有一个用户友好的界面,显示检测结果,并提供进一步的指导或建议。 这项技术的优势在于它可以快速、准确地识别出病虫害,甚至在早期阶段就能发现问题,从而及时采取措施。此外,它还可以减少对化学农药的依赖,支持可持续农业发展。随着技术的不断进步,图像识别在病虫害检测中的应用将越来越广泛。
1 目标检测的定义 目标检测(Object Detection)的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一。由于各类物体有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具有挑战性的问题。 目标检测任务可分为两个关键的子任务,目标定位和目标分类。首先检测图像中目标的位置(目标定位),然后给出每个目标的具体类别(目标分类)。输出结果是一个边界框(称为Bounding-box,一般形式为(x1,y1,x2,y2),表示框的左上角坐标和右下角坐标),一个置信度分数(Confidence Score),表示边界框中是否包含检测对象的概率和各个类别的概率(首先得到类别概率,经过Softmax可得到类别标签)。 1.1 Two stage方法 目前主流的基于深度学习的目标检测算法主要分为两类:Two stage和One stage。Two stage方法将目标检测过程分为两个阶段。第一个阶段是 Region Proposal 生成阶段,主要用于生成潜在的目标候选框(Bounding-box proposals)。这个阶段通常使用卷积神经网络(CNN)从输入图像中提取特征,然后通过一些技巧(如选择性搜索)来生成候选框。第二个阶段是分类和位置精修阶段,将第一个阶段生成的候选框输入到另一个 CNN 中进行分类,并根据分类结果对候选框的位置进行微调。Two stage 方法的优点是准确度较高,缺点是速度相对较慢。 常见Tow stage目标检测算法有:R-CNN系列、SPPNet等。 1.2 One stage方法 One stage方法直接利用模型提取特征值,并利用这些特征值进行目标的分类和定位,不需要生成Region Proposal。这种方法的优点是速度快,因为省略了Region Proposal生成的过程。One stage方法的缺点是准确度相对较低,因为它没有对潜在的目标进行预先筛选。 常见的One stage目标检测算法有:YOLO系列、SSD系列和RetinaNet等。 2 常见名词解释 2.1 NMS(Non-Maximum Suppression) 目标检测模型一般会给出目标的多个预测边界框,对成百上千的预测边界框都进行调整肯定是不可行的,需要对这些结果先进行一个大体的挑选。NMS称为非极大值抑制,作用是从众多预测边界框中挑选出最具代表性的结果,这样可以加快算法效率,其主要流程如下: 设定一个置信度分数阈值,将置信度分数小于阈值的直接过滤掉 将剩下框的置信度分数从大到小排序,选中值最大的框 遍历其余的框,如果和当前框的重叠面积(IOU)大于设定的阈值(一般为0.7),就将框删除(超过设定阈值,认为两个框的里面的物体属于同一个类别) 从未处理的框中继续选一个置信度分数最大的,重复上述过程,直至所有框处理完毕 2.2 IoU(Intersection over Union) 定义了两个边界框的重叠度,当预测边界框和真实边界框差异很小时,或重叠度很大时,表示模型产生的预测边界框很准确。边界框A、B的IOU计算公式为: 2.3 mAP(mean Average Precision) mAP即均值平均精度,是评估目标检测模型效果的最重要指标,这个值介于0到1之间,且越大越好。mAP是AP(Average Precision)的平均值,那么首先需要了解AP的概念。想要了解AP的概念,还要首先了解目标检测中Precision和Recall的概念。 首先我们设置置信度阈值(Confidence Threshold)和IoU阈值(一般设置为0.5,也会衡量0.75以及0.9的mAP值): 当一个预测边界框被认为是True Positive(TP)时,需要同时满足下面三个条件: Confidence Score > Confidence Threshold 预测类别匹配真实值(Ground truth)的类别 预测边界框的IoU大于设定的IoU阈值 不满足条件2或条件3,则认为是False Positive(FP)。当对应同一个真值有多个预测结果时,只有最高置信度分数的预测结果被认为是True Positive,其余被认为是False Positive。 Precision和Recall的概念如下图所示: Precision表示TP与预测边界框数量的比值 Recall表示TP与真实边界框数量的比值 改变不同的置信度阈值,可以获得多组Precision和Recall,Recall放X轴,Precision放Y轴,可以画出一个Precision-Recall曲线,简称P-R
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值