opencv lbp 草坪

我个人编程史的附录

今天的程序员...

……真的不知道语言在哪里停止,框架在哪里开始。

我是什么意思

直到大约1988年,一个人(像您一样)将使用的大多数程序都是由少数使用3GL(第三代语言)的程序员(通常只有一个)进行的。 关键词是: 从头开始

正如我在本系列的第一篇文章中所解释的那样,3GL 汇编语言或机器语言抽象保留字 。¹编程语言是保留字的集合,以及一些有关语法的规则,这些规则限制了人们如何以不会混淆编译器(它将单词扩展为一系列机器语言指令)。 总之,这被称为语言的语法。

如您所见,大多数语言都很少有保留词要记住。 SmallTalk只有6个!

因此,回到1988年前的软件,如果您查看在那之前编写的程序的代码,除了少数保留字之外,您将看到的唯一字就是程序员创建的变量和函数的名称。 这就是大多数人认为的编程方式。

下面的图像比较代码(用C编写)使用两个保留字: fordouble 。 两个带下划线的文字( 晶圆厂 ,和printf的 )是函数从包括 stdio.hmath.h )。 当这样包含一个库时,它称为依赖项。 该程序中的所有其他单词都是程序员编写的变量或注释。

通过简单的单词计数,该代码的90%是由程序员编写的。 不到10%的代码是别人的代码,4%的语言是代码,6%的是两个库。

 for( x= 0 ; x < im1->width; x++ )  {    for( y= 0 ; y < im1->width; y++ )    {      totalDiff += fabs ( GET_PIXEL ( im1, x, y )[ RED_C ] - GET_PIXEL ( im2, x, y )[ RED_C ] ) / 255.0;     totalDiff += fabs ( GET_PIXEL ( im1, x, y )[ GREEN_C ] - GET_PIXEL ( im2, x, y )[ GREEN_C ] ) / 255.0;     totalDiff += fabs ( GET_PIXEL ( im1, x, y )[ BLUE_C ] - GET_PIXEL ( im2, x, y )[ BLUE_C ] ) / 255.0;   }  }  printf ( "%lf\n", 100.0 * totalDiff / (double)( im1->width * im1->height * 3) ) ;

现在让我们看一下相同功能的Java版本:

 public enum ImgDiffPercent {     ;

    public static void main ( String [] args ) throws IOException {         // https://rosettacode.org/mw/images/3/3c/Lenna50.jpg         // https://rosettacode.org/mw/images/b/b6/Lenna100.jpg         BufferedImage img1 = ImageIO. read(new File ( "Lenna50.jpg" )) ;        BufferedImage img2 = ImageIO. read(new File ( "Lenna100.jpg" )) ;

        double p = getDifferencePercent ( img1, img2 ) ;        System . out . println( "diff percent: " + p ) ;    } 

    private static double getDifferencePercent ( BufferedImage img1, BufferedImage img2 ) {         int width = img1. getWidth() ;        int height = img1. getHeight() ;        int width2 = img2. getWidth() ;        int height2 = img2. getHeight() ;        if ( width != width2 || height != height2 ) {             throw new IllegalArgumentException ( String . format( "Images must have the same dimensions: (%d,%d) vs. (%d,%d)", width, height, width2, height2 )) ;        } 

        long diff = 0 ;        for (int y = 0 ; y < height; y++ ) {             for (int x = 0 ; x < width; x++ ) {                 diff += pixelDiff ( img1. getRGB( x, y ) , img2. getRGB( x, y )) ;            }         }         long maxDiff = 3L * 255 * width * height;

        return 100.0 * diff / maxDiff;    } 

    private static int pixelDiff (int rgb1, int rgb2 ) {         int r1 = ( rgb1 >> 16) & 0xff;        int g1 = ( rgb1 >>  8) & 0xff;        int b1 =  rgb1        & 0xff;        int r2 = ( rgb2 >> 16) & 0xff;        int g2 = ( rgb2 >>  8) & 0xff;        int b2 =  rgb2        & 0xff;        return Math . abs( r1 - r2 ) + Math . abs( g1 - g2 ) + Math . abs( b1 - b2 ) ;    }  } 

粗体字都是关键词,带下划线的东西都是导入库中的函数。 此清单中约有65%是由程序员编写的代码,而20%来自语言语法的代码和15%依赖外部库的代码。

我并不是说这是一件坏事。 我只是在陈述事实。 碰巧的是,包括库中的代码是一个重要的生产力增强器。 一般程序员没有正当理由重新发明语言的轮子。 保留字,库类和函数。 因此,在大多数现代代码中,这种趋势趋向于减少由程序员编写的代码,并越来越依赖于以库的形式编写的其他人编写的代码。 尽管天生不是一件坏事,但许多人都认为事情太过分了。

魔术发生了……

在2016年初,感觉一半的互联网崩溃了,因为程序员从名为npm的公共存储库中删除了一个名为left-pad的11行程序。 事实证明,世界上一些最大,最常用JavaScript框架包括对左键的依赖,而不是键入以下十行代码:

function leftpad (str, len, ch) {    str = String(str);    var i = -1;        if (!ch && ch !== 0) ch = ' ';    len = len - str.length;    while (++i < len) {        str = ch + str;    }    return str;}

另一个名为isArray的 npm软件包在2016年2月下载了1800万次,并且依赖于其他72个NPM软件包 。 每天有1800万程序员和72位软件包作者使用了include而不是键入以下1行代码:

return toString.call(arr) == '[object Array]';

现在我只是一个乡下男孩,但是对我来说,这很清楚地表明,创建这72个npm软件包的程序员或者具有我见过的最扭曲的幽默感,或者真的不知道isArray中的内容以及如何JavaScript实际上有效。 我将其作为最极端的货运崇拜编程示例。

为了进一步阐明大多数现代程序员盲目使用类库而不了解它们的含义的观点,我想请您参考Jordan Scales的清醒(令人沮丧)的叙述 ,以了解他对左手惨败的个人React。

离开我的草坪

所以我要去哪里?

我的观点是,正如一般人想象的那样,“编程”在今天几乎不存在。 仅有的以新算法形式“编写代码”的程序员正在大型互联网公司工作,或者正在为初创公司编写专门的图像,视频或声音处理软件。

在企业和政府IT盐矿中工作的“今天的孩子”大军正在完全做其他事情。 他们所做的编码是等同于模因创作和社交媒体帖子的软件,并带有后现代流行文化参考。 他们只是在复制和粘贴代码,并且不加选择地使用诸如left-padisArray之类的库,而不是回收Clint Eastwood,Good Guy Greg或Scumbag Steve的图片 。 他们真的不知道语言在哪里结束以及框架在哪里开始。 这对他们来说只是一大汤。

尽管我不是一个“孩子”,但我几乎无法使自己变得更好。 我形容自己是一个狂热的程序员(勉强但诚实)。 你们中有些人可能熟悉史诗般的《梅尔》 。 下周我会告诉你...

我的故事

[1]在ALGOL,FORTRAN和PL / 1中,没有保留字,只有关键字 。 在本文的上下文中,差异并不那么重要。 在本文中,我将使用保留词来引用这两者。

本文摘自我即将出版的《混沌工厂》 ,该书解释了为什么大多数公司和政府无法编写“有效”的软件,以及如何对其进行修复。

翻译自: https://hackernoon.com/framework-or-language-get-off-my-lawn-9935e1c72019

opencv lbp 草坪

opencv lbp 草坪_框架还是语言? 离开我的草坪!相关推荐

  1. PHP语言Yii框架,Yii框架多语言站点配置方法分析【中文/英文切换站点】

    本文实例讲述了Yii框架多语言站点配置方法.分享给大家供大家参考,具体如下: 这里假设我们要建立 中文/英文 切换的站点 1. 设置全局默认的语言 文件添加代码:protected/config/ma ...

  2. 电子英汉词典c语言程序设计报告,英汉电子词典设计报告_设计_C语言_C语言程序设计.doc...

    英汉电子词典设计报告_设计_C语言_C语言程序设计 课程设计 课程名称 :C语言程序课程设计 题目名称 :电子英汉词典 学生学院 :电气信息学院 专业班级 :自动化1101 学 号 :20110102 ...

  3. OpenCV函数简记_第三章数字图像的滤波处理(方框,均值,高斯,中值和双边滤波)

    系列文章目录 OpenCV函数简记_第一章数字图像的基本概念(邻域,连通,色彩空间) OpenCV函数简记_第二章数字图像的基本操作(图像读写,图像像素获取,图像ROI获取,图像混合,图形绘制) Op ...

  4. c语言编写订货系统,学位论文_基于c语言的仓库订货系统的仿真.doc

    学位论文_基于c语言的仓库订货系统的仿真 本科毕业论文(设计.创作) 题目: 基于C语言的仓库订货系统的仿真 学生姓名: 学号: 所在系院: 信息与通信技术系 专业: 电子信息工程 入学时间: 201 ...

  5. python语言的格式框架_django框架模板语言使用方法详解

    本文实例讲述了django框架模板语言使用方法.分享给大家供大家参考,具体如下: 模板功能 作用:生成html界面内容,模版致力于界面如何显示,而不是程序逻辑.模板不仅仅是一个html文件,还包括了页 ...

  6. 8_用opencv调用深度学习框架tenorflow、Pytorch、Torch、caffe训练好的模型(20190212)

    用opencv调用深度学习框架tenorflow.Pytorch.Torch.caffe训练好模型(20190212) 文章目录: https://blog.csdn.net/hust_bochu_x ...

  7. 让数组的左边全为奇数C语言,2015年全国计算机等级考试全真模拟考场_二级C语言试卷四.docx...

    2015年全国计算机等级考试全真模拟考场_二级C语言试卷四 全国计算机等级考试全真模拟试卷(4) 二级C (考试时间l20分钟,满分100分) 一.选择题(每小题1分,共40分) (1)算法是指( ) ...

  8. OpenCV加载Caffe框架模型

    OpenCV加载Caffe框架模型 加载Caffe框架模型 简介 源代码 解释 加载Caffe框架模型 简介 在本教程中,您将学习如何使用Caffe模型将opencv_dnn模块用于图像分类. 我们将 ...

  9. 河南理工大学c语言报告封面,河南理工大学图书信息管理系统设计_纯c语言课程设计.doc...

    河南理工大学图书信息管理系统设计_纯c语言课程设计 C语言课程设计报告 题 目:图书信息管理系统设计 河南理工大学计算机学院 目 录 第一章 题目与要求 1.1 问题提出1 1.2 本系统涉及的知识点 ...

最新文章

  1. 奇奇怪怪的冒泡排序 TOJ 2014: Scramble Sort
  2. Hibernate一对多(注解)
  3. 报错解决办法 SLF4J: Failed to load class org.slf4j.impl.StaticLoggerBinder
  4. Java虚拟机详解----JVM常见问题总结
  5. 《Exchange Server 2010 SP1/SP2管理实践》一2.2 部署域名解析网络环境
  6. YOLO Object Detection with OpenCV
  7. PostgreSQL 统计信息pg_statistic格式及导入导出dump_stat - 兼容Oracle
  8. 【OpenGL从入门到精通(一)】Windows搭建OpenGL的渲染环境,并初始化一个OPenGL窗口
  9. C语言 const、volatile、const volatile限定符理解
  10. lstm 输入数据维度_理解Pytorch中LSTM的输入输出参数含义
  11. Android文件下载——多文件多线程断点下载
  12. (人脸)目标检测指标-FDDB
  13. java ffmpeg swf_flash – ffmpeg:将仅音频flv转换为swf
  14. Robust performance of virtual sensing methods for active noise control 翻译
  15. flash制作文字笔顺_汉字标准读音与笔顺Flash版
  16. 监控系统-Prometheus(普罗米修斯)(三)Grafana可视化图形工具
  17. 实验十三——DD和S-MAC协议仿真实验
  18. 雨水全自动浮动床过滤器
  19. Android 天气APP(九)细节优化、必应每日一图
  20. 如何查看电脑是否支持CUDA及支持的CUDA版本

热门文章

  1. ATTCK靶场系列(一)
  2. 吴恩达机器学习ex2 Logistic Regression (python)
  3. 东华助手 v1.6.5
  4. 如何统计多个Excel文件中的信息,统计多个工作簿中的数据,统计多个表格中相同的条,统计多个表格的和等等
  5. 当前 IT 行业,软件开发应该掌握的几种编程语言,你学会了几种?
  6. iphonex 测试电池软件,iPhoneX电池容量多大 iPhoneX电池性能评测【详解】
  7. linux pppd源码下载_PPPD源码分析
  8. java JPI中常使用的类介绍即java.lang包下的东西
  9. 离散数学:格与布尔代数
  10. 速度来看mac电脑怎么彻底关闭系统更新