WTF

如何写出无法维护的代码

帅比萌擦擦* 提交于 2021-02-17 10:57:54
对,你没看错,本文就是教你怎么写无法维护的代码。 一、程序命名 容易输入的变量名 。 比如:Fred,asdf 单字母的变量名 。比如:a,b,c, x,y,z(如果不够用,可以考虑a1,a2,a3,a4,….) 有创意地拼写错误 。比如:SetPintleOpening, SetPintalClosing。这样可以让人很难搜索代码。 抽象 。比如:ProcessData, DoIt, GetData… 抽象到就跟什么都没说一样。 缩写 。比如:WTF,RTFSC …… (使用拼音缩写也同样给力,比如:BT,TMD,TJJTDS) 随机大写字母 。比如:gEtnuMbER.. 重用命名 。在内嵌的语句块中使用相同的变量名有奇效。 使用重音字母 。比如:int ínt(第二个 ínt不是int) 使用下划线 。比如:_, __, ___。 使用不同的语言 。比如混用英语,德语,或是中文拼音。 使用字符命名 。比如:slash, asterix, comma… 使用无关的单词 。比如:god, superman, iloveu…. 混淆l和1 。字母l和数字1有时候是看不出来的。 二、伪装欺诈 把注释和代码交织在一起。 for(j=0; j < array_len; j + = 8) { total += array[j+0 ]; total += array[j+1 ]; total

带你认识 flask web 表单

断了今生、忘了曾经 提交于 2021-02-10 17:44:25
为梦想而战,上节课为你讲解了 flask 模板,还不知道的伙伴可以回去回顾一下,链接在此 带你认识 flask 的模板 Flask-WTF简介 我将使用Flask-WTF插件来处理本应用中的Web表单,它对WTForms进行了浅层次的封装以便和Flask完美结合。这是本应用引入的第一个Flask插件,但绝不是最后一个。插件是Flask生态中的举足轻重的一部分,Flask故意设计为只包含核心功能以保持代码的整洁,并暴露接口以对接解决不同问题的插件。 Flask插件都是常规的Python三方包,可以使用 pip 安装。那就继续在你的虚拟环境中安装Flask-WTF吧: 由于今天电脑出问题了,重装系统之后,还没安装 anaconda3 今天无法演示了,抱歉了。 (venv) $ pip install flask-wtf 配置 到目前为止,这个应用程序都非常简单,因此我不需要考虑它的 配置 。但是,除了最简单的应用,你会发现Flask(也可能是Flask插件)为使用者提供了一些可自由配置的选项。你需要决定传入什么样的配置变量列表到框架中。 有几种途径来为应用指定配置选项。最基本的解决方案是使用 app.config 对象,它是一个类似字典的对象,可以将配置以键值的方式存储其中。例如,你可以这样做: app = Flask(__name__) app.config['SECRET_KEY'

Java命令行

巧了我就是萌 提交于 2021-02-10 08:57:42
使用 Java.exe 和 Javac.exe 来运行和编译 几个重要的 系统参数 属性 java.library.path -- dll库 java.class.path -- jar和类库 user.dir -- 启动时的目录 file.encoding -- file java.io.tmpdir -- temp文件 file.separator -- 文件分隔符 line.separator -- 换行符 sun.boot.class.path -- Bootstrap Jar java.ext.dirs -- Extension Jar 动态参数 : -D 设置动态参数 例: java -Dxx=yy ClassName //自定义多个参数需要多个 -D 获取: System.getProperties().getProperty("xx");//yy 注意:像 java.library.path 这些动态属性,虽然程序启动后可以动态改变,但是没办法改变其达到的功能。只能在程序启动时设置才能加载dll: java -Djava.library.path=D:\java\dlls MyTestClass -cp或-classpath 设置类和jar包路径 例: java -cp .;d:\java\jarlib\* TestClass 注意: 在 linux系统是用

Python

不打扰是莪最后的温柔 提交于 2021-01-12 19:59:18
适用于新生和经验丰富的Python基本面试问答 1)什么是Python?使用Python有什么好处? Python是一种具有对象,模块,线程,异常和自动内存管理的编程语言。python的优点是它简单,易用,可移植,可扩展,内置数据结构,并且是开源的。 2)什么是PEP 8? PEP 8是一个编码约定,是一组建议,有关如何编写更具可读性的Python代码。 3) 什么是Pickle和pickling? Pickle模块接受任何Python对象并将其转换为字符串表示形式,并使用转储功能将其转储到文件中,此过程称为pickling。从存储的字符串表示中检索原始Python对象的过程称为解开。 4)如何解释Python? Python语言是一种解释性语言。Python程序直接从源代码运行。它将程序员编写的源代码转换为中间语言,该中间语言又被翻译为必须执行的机器语言。 5)如何在Python中管理内存? Python内存由Python专用堆空间管理。所有Python对象和数据结构都位于私有堆中。程序员无权访问此私有堆,解释器负责处理此Python私有堆。 为Python对象分配Python堆空间是由Python内存管理器完成的。核心API允许访问一些工具,以便程序员进行编码。 Python还具有一个内置的垃圾收集器,该垃圾收集器回收所有未使用的内存,并释放内存并使之可用于堆空间。 6

同城异地灾备

老子叫甜甜 提交于 2021-01-07 10:35:59
序言 同城异地灾备,主要是用来进行备份容灾的,从而当一个数据中心挂了,另外一个数据中心经过切换之后,能让服务迅速的恢复。 同城双活,则是基于多机房的情况下,流量经过双机房,一个机房挂掉,完全不影响业务。 微风浮起,吹动星空一缕轻云 很正经的吹牛逼 从网络的层面来说,单个机房的存在是一个单点故障,因为一个机房宕机,那么业务立刻中断,从而无法进行升级。 云服务,最重要的就是可扩展性,而什么版本支持扩展。。。从集群的角度来进行扩展。。。 从最开始,业务不断的发展,各种流量拥上来,导致业务的吞吐量的剧增,从而促使底层的技术要不断的进行扩展,从而云平台的版本是否支持,必须要进行升级。。。 随着业务的进一步发展,需要提供高可用水平,从而需要从单机房扩展为多机房,从而也就有了同城容灾。。。 对于运维来说,多一次升级,多一次变更,就会多一个故障,多一个锅。。。大家排排坐,每个人分一点。。。热升级了解一下,不可预知的中断了解一下 同城异地最关键的点在于存储,存储如何跨机房使用,从而分为几个方面进行探讨: 1、 DNS解析 在业务大量使用DNS解耦的时候,而且使用双机房的时候,那么就必然需要DNS具有一定的智能化,从而就有anycast类型的DNS,所谓的anycast类型的DNS,也就是能返回客户端最短路径的IP地址,从而让用户使用更少的时间得到需要访问的IP地址。 换一种解释的方法就是

WTF Python课堂(2)

一世执手 提交于 2021-01-06 15:29:50
Hello~大家好~这里是Paradoxical的wtf课堂第二期,接下来Paradoxical会和你一起学习python的奇妙特性哦~ 今天学习的是for关键字的相关知识。 先来看看代码吧。 第一句代码创建了一个内容为“wtf”的字符串变量,第二句代码创建了一个空字典。 第三句使用for循环遍历enumerate()的内容。 emmmm……这个enumerate()是什么东西鸭? 去问问小哥哥吧。 我:小哥哥,enumerate()是什么东西鸭? 惨绿青年:enumerate() 函数可将一个可迭代对象(如列表、元组或字符的元素和下标组合为一个元组,这些元组作为元素组成一个可迭代对象返回,所以enumerate()常用于 for循环。 我:懂了懂了。 既然知道enumerate()是什么东西,就来分析一下那个for循环语句吧。 之前学过for循环是将全部可迭代元素赋值给变量一次,那么i对应的应该就是下标,some_dict[i]对应的应该就是字符串里的元素。 哦~我懂了~第一次迭代i先被赋值some_string第一个下标“0”,然后some_dict[i]变成some_dict[0],最后some_dict[0]被赋值 some_string 第一个元素“w”,所以迭代完的字典是那样。 看一下解释吧~ 果然是这样~ 来源: oschina 链接: https://my

What the f**k Python!

允我心安 提交于 2021-01-06 12:40:57
昨天Paradoxical在看剧的时候,小哥哥发了一个链接给我“ https://github.com/leisurelicht/wtfpython-cn ”。 我: 这是什么鸭? 惨绿青年: 你点进去看看就知道了。 于是Paradoxical就点进去一探究竟。 哦~原来是 Python 中那些难以理解和反人类直觉的例子以及鲜为人知的功能特性, 并尝试讨论这些现象背后真正的原理 ! 看一下目录,好像不错喔~ 再往下看,是示例结构。 再看一下用法。 原来是酱紫~ 来看下实例是怎样的。 我: emmm……大部分都懂了。 但这个Cpython是什么鸭? 惨绿青年: 计算机是只认识机器码,不认识python和其它语言的。 所以在计算机语言输入到计算机之前会经过编译器编译成机器码,编译器相当于翻译人员,把计算机语言翻译成机器码。 Cpython就是用C语言写的能将python代码编译成机器码的编译器。 我: 哦~懂了懂了。 那么来看一下新的栗子吧~ emmm……这个如果键是5.0取出来的值也是python,应该是后来的键值5把它覆盖了。但是不知道为什么鸭,去看看答案吧。 原来是酱紫,5.0等于5,而且它们的哈希值也相同。但是哈希值是啥鸭?这次先不麻烦小哥哥了,去网上查一下吧。 有点明白了,哈希表就和python中的字典差不多,但是键的值可能会相同。所以那个栗子的情况”Python”会把

flask之--钩子,异常,上下文,flask-script,模板,过滤器,csrf_token

风格不统一 提交于 2021-01-02 05:58:56
一.请求钩子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: - 在请求开始时,建立数据库连接; - 在请求开始时,根据需求进行权限校验; - 在请求结束时,指定数据的交互格式; 为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子。 请求钩子是通过装饰器的形式实现,Flask支持 如下四种请求钩子 : - before_first_request - 在处理 第一个请求 前执行(初始化的时候) - before_request - 在 每次 请求前执行 - 如果在某修饰的函数中返回了一个响应,视图函数将不再被调用 - after_request - 前提是视图函数没有抛出错误,在每次请求视图函数处理之后执行 - 接受一个参数:视图函数作出的响应 - 在此函数中可以对响应值在返回之前做最后一步修改处理 - 需要将参数中的响应在此参数中进行返回 - teardown_request: - 在每次 请求后 执行, 无论视图函数是否正常工作 - 接受一个参数:错误信息, 如果有相关错误抛出   工作模式为非调试模式,即Debug=False   代码: # !/usr/bin/env python # -*- coding: utf-8 -*- # author tom from flask import Flask from

一股脑追中台就好比没看完阴阳师拍了晴雅集

|▌冷眼眸甩不掉的悲伤 提交于 2020-12-28 18:42:06
其实中台这个东西,18年就想谈,19年就想吐槽,但是那时候你不能说面对中台大家要冷静,这玩意不是什么新东西也不具备普适性,别被概念炒作坑了。那时候这样讲要被认为是逆潮流的。 很多去年要上中台,今年又要追风拆中台的企业,这些企业就像是郭小4刚上映的晴雅集,你都怀疑郭小4是不是就看了阴阳师第一本第一章,也不知道他是基于什么体系训练出来的风格。 阴阳师原著就像是中台设计参考的架构设计原则,而晴雅集就是大家追风的中台。所以阴阳师里的博雅贵族出身善良正义共情能力极高,安倍晴明则是天才阴阳师超凡脱俗,二人惺惺相惜;到了晴雅集就变成典型的基腐同人文,这博雅一副恶俗一点也不温文尔雅,而安培晴明呢?就会用法术传送和偷窥,WTF,而战斗的时候不用法术不用式神,上去就是肉搏。而两个主角的相爱相杀就是10年前的基腐特征,被重新包装一下就又登上大银幕了。 所以无论是中台还是晴雅集,其实我们都可以把架构设计的基本理念和阴阳师原作拿出来对比,就不会盲目跟风了,无论是跟风吹还是跟风黑。 其实我在18年第一次看阿里的中台的书时,没看出什么新东西,因为这东西我们从16年做系统架构调整,17年整个存贷汇中间业务的系统,自然而然地就是阿里所讲的中台,中台其实从系统设计的层面并不新颖,相反我相信很多的架构师或CTO都能在组织的业务以特定形式展开时,都会把系统设计为所谓的中台。 但是这两年中台这个概念太热了,今年中去一家公司

平庸开发者的生存指南

旧街凉风 提交于 2020-12-06 18:31:56
我个人认识一些非常有才华的开发人员,他们可以一帆风顺地创建极好的软件。正是这些天赋人士,使得外行人对我们这个行业充满了很高的期望。但我要说的一个可悲的事实是: 并非每个人都是忍者/大师/明星开发者 。 我就不是这些闪耀的新星,我只是一名平庸的开发者。 如果你也不是天才玩家,那么本文将指导你如何在这个行业中生存下去。 最简单的事情——只要google一下 我记不了很多东西。像标准库中的函数和方法、参数位置、软件包名称,样板代码等等,都在我脑容量之外。 所以,我必须使用google搜索。我每天都这样做。我也一直在重复使用旧项目的代码。有时我甚至从StackOverflow或Github复制粘贴答案。是的,我的开发其实可称之为: StackOverflow驱动开发 。 但我并不孤单。许多其他开发人员也这样做。有一个受众面很广的twitter讨论就是由Ruby on Rails的创建者所启动的。 那么,为什么一开始会认为这种行径是不好的呢?因为它有若干缺点: 会导致你复制到糟糕的设计决策或易受其他人攻击的代码 会形成一种依赖心态:要是我们不能google到内容,那么只能向人求助 没有网就不能工作 但是,我不认为这些是大问题。它甚至可以作为是你的秘密武器。我有一些建议可用于减少其负面影响。 生存指南: 使用IDE来获得自动完成和建议,所以你不必google编程语言的基础内容;