作者归档:月小升

关于 月小升

正在创业

bug对你的四个好处

“大多数开发人员只是想写新的功能,他们不想使用维护和修补漏洞”。这也是大多数开发人员是错过的乐趣和好处就是发现和修复bug。 每个错误都可以教你一些东西。 反馈是一个关键,它是敏捷开发的主要原则之一。单元测试和迭代开发技术更快地提供反馈。与单元测试你的代码是否有效的问题上得到反馈,和每个交付版本你可以听听客户认为的新特性。错误报告是另一种形式的反馈您的代码。一个错误的可以有许多不同的原因。一些可能性是:一个简单的编码错误(比如一个嵌套的if语句,你最终在错误的分支),或者一个错误的假设你(也许传入的消息并不总是有某些字段,所以你有一个空指针异常),或有缺失的要求(你应该回答消息以不同的方式,如果一个给定的参数存在),或客户使用软件在一个意外的(但正确),导致错误。 在这些情况下,您可以学习如何代码,它是关于你的产品或系统的作用。例如,当我在Tilgin VoIP开发产品,有一个情况我们收到了一个错误的信息,导致我们的软件循环下去。消息所包含元素使用tag-length-value编码(电磁阀)参数,长度值元素的总长度。这样你可以跳过未使用或未知元素向前跳“长度”的字节数。在这种情况下,长度值是零,所以跳过我们指向相同的元素后,指出在跳之前,导致无限循环。这个bug前,仔细检查我的代码长度值太大值会导致阅读过去的消息缓冲区。不过,在那之前,我从来没有想到,一个零长度可能是同样糟糕。 自己的代码变得更容易调试。 当你花时间故障问题和修复bug,它不会花很长时间,直到你想让自己的代码尽可能容易调试。这是令人沮丧的不所有可用的信息。一个非常常见的问题是不包括动态信息的异常。例如,假设有代码,预计值范围在0 – 20。有多少次你看到一个异常,只是说“非法价值”?不告诉你如果你想找到一个bug。如果例如21日收到,应该说“非法值:21日不在范围0 – 20”。它有助于包括允许范围,肯定有助于包括当前值。当前值可能是21日或-128年或65535年。所有这些可能给你一个线索是什么导致了它,你不从一个普通的“非法价值”。甚至Steve McConnell打破这个规则在某些地方的优秀作品代码完成。例如,在第15章中有一个例子,一个意想不到的发现类型的字符,但错误消息不包括字符的问题。每次你找到并修复一个错误,你需要问问自己:我应该做有什么在我的代码不同,以消除错误避免未来再次出错吗?有什么我应该做,使这种错误更容易避免发生在未来吗? 你和客户会很高兴。 正如我所提到的,为什么我爱编码、编程的乐趣之一就是做对别人有用的东西。你得到同样的踢修复一个缺陷,但在不同的时间尺度。提供新功能通常需要一段时间,但一个bug修复可以在一个小时内完成。每个固定的错误让你感觉你是完成一些东西,这是一个伟大的感觉。有点矛盾,修复一个缺陷会使客户满意。如果没有一个错误首先,不会有需要修复它,那么为什么他们应该快乐吗?然而,我的经验是,他们乐于接受一个bug修复,尤其是如果它是快速解决。每个人都知道总是会有缺陷。重要的是,有人准备修复它们很快被发现时。 解决问题是有趣的。 许多程序员喜欢解决问题,像数学难题,编程挑战,数独或填字游戏。甚至谋杀谜团饲料解读:你看看线索,试着找出它的发生而笑。调试和修复bug是相同的。每个错误都是一个新的谜题找出。经常看到一个新的错误报告的时候你的第一反应是:这是不可能的吗?怎么能这样呢?这是当你开始寻找线索。日志怎么说?从系统错误报告吗?此时系统中发生了什么?最近任何改变——新软件,配置更改,交通干扰?让找出开始!这些都是四个原因我喜欢调试和修补漏洞太多。你的经验是什么? 后记:月小升认为,正确的策略是没次编写一小段代码,就多加测试,把bug消除在集成之前,越在前期检测,越容易查到bug,而且后期调用无bug的模块,团队作业效率会高出很多。不过bug总会有的,面包也总会有的。 翻译原文:https://henrikwarne.com/2012/10/21/4-reasons-why-bugs-are-good-for-you/

发表在 互联网观察 | 标签为 , | 留下评论

apache 自带压力测试工具ab 来场测试吧

apache自带压力测试工具 叫 ab 装了apache 在bin下就有了。 ab -n 20 -c 10 http://java-er.com/ -n 请求数量 -c并发数 你也可以 ab -n 1000 -c 100 your domain 返回结果 This is ApacheBench, Version 2.3 Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache … 继续阅读

发表在 JAVA, Linux, PHP | 标签为 , , | 留下评论

java 程序员如何成长

作为刚刚进入Java领域的新同学,无论是高校的毕业大学生,还是有志转行的在职人员,都面临着诸多如下的困惑。 l 如何学习Java语言? l 在Java学习过程中需要掌握哪些技能? l 各大公司对Java开发的要求是什么? l Java 学习过程中有哪些注意事项? l Java 工程师的职业发展规划是什么? 我把Java 的学习过程分为5个阶段:理论阶段、开发阶段、进阶阶段、实战阶段以及深造阶段。 理论阶段 在具体谈论Java知识点之前,我想先跟同学们聊聊Java 语言自身的一些特点、生态系统以及适用的场景,这有助于我们更好的学习语言本身。 首先,我们从Java 语言自身的实现机制来聊聊Java 语言的一些特性: 面向对象:Java 是一门面向对象的编程语言,封装、继承、多态这些特性使得Java 语言适用于大型软件系统的研发。 跨平台:这是Java 最重要的特性之一,由于有虚拟机的支持,Java 代码可以无缝运行在任何操作系统中,无需重新编译; 透明内存管理:做C/C++的同学最头疼的事情就是内存泄漏问题,在Java中,由于虚拟机会自动回收不再使用的内存空间,所以程序员无需显式回收内存。 足够的性能:性能一直是Java为人诟病的问题之一,但是在java6 之后,随着JVM虚拟机编译优化技术的不断进步,垃圾回收算法的不断优化,Java的性能已经能够胜任绝大多数系统的要求,甚至在性能要求极为苛刻的底层系统中,我们也能看到Java的身影。 此外,Java 还有完善的生态系统: Java 拥有数量众多的第三方类库,作为一个开发者,你会发现作为一名Java程序员是一件很幸福的事情,因为很多事情别人都已经帮你做好了,你需要做的只是把别人造好的轮子组装起来,实现你的业务需求。 Java 拥有非常完善的开发环境Eclipse,集成了非常多实用的功能,且操作界面非常友好。 Java 有非常多优秀的框架,基于这些框架,可以快速开发出一个可扩展的业务系统。 Java 拥有非常活跃的社区和论坛,当你遇到问题的时候,你可以快速的得到其他人的帮助。 … 继续阅读

发表在 JAVA | 标签为 , , | 2 条评论

php数组的21个操作合并,拆分,删除,排序…

1. 合并数组 array_merge()函数将数组合并到一起,返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加。其形式为: array array_merge (array array1 array2…,arrayN) 这个函数将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。 如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。 如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。 2. 追加数组 array_merge_recursive()函数与array_merge()相同,可以将两个或多个数组合并在一起,形成一个联合的数组.两者之间的区别在于,当某个输入数组中的某个键己经存在于结果数组中时该函数会采取不同的处理方式.array_merge()会覆盖前面存在的键/值对,替换为当前输入数组中的键/值对,而array_merge_recursive()将把两个值合并在一起,形成一个新的数组,并以原有的键作为数组名。还有一个数组合并的形式,就是递归追加数组。其形式为: array array_merge_recursive(array array1,array array2[…,array arrayN]) 程序实例如下: 现在键 mango 指向一个数组,这个数组由两个颜色值组成的索引数组。 3. 连接数组 array_combine()函数会得到一个新数组,它由一组提交的键和对应的值组成。其形式为: array array_combine(array keys,array values) 注意,两个输入数组必须大小相同,不能为空。示例如下 4. 拆分数组 array_slice() array_slice()函数将返回数组中的一部分,从键offset开始,到offset+length位置结束。其形式: array array_slice (array array, int … 继续阅读

发表在 PHP | 标签为 , , | 留下评论

海外支付stripe对接支付

strip支付 https://stripe.com/docs/checkout/tutorial <form action="index.php" method="POST"> <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" data-key="pk_test_wIAv7SdDJV2B6zPPUdnXnJCd" data-amount="999" data-name="Leoptique Inc." data-description="Widget" data-image="https://stripe.com/img/documentation/checkout/marketplace.png" data-locale="auto"> </script>     </form> 测试的信用卡号 4242424242424242 各种测试的信用卡 https://stripe.com/docs/testing#international-cards 注意填写日期的时候,尽管可以随便写,但是你不能写年份低于当前的,比如15 就不行。我写19就可以了 2019年到期 2015年到期,就不行了,说明卡过期了。 strip 返回的数据,采用POST方式 array(3) { ["stripeToken"]=> string(28) "tok_19xSp5GoFgQiAmhVvbVsCIGI" ["stripeTokenType"]=> string(4) "card" ["stripeEmail"]=> string(15) "asdasdf@afd.com" … 继续阅读

发表在 PHP | 标签为 , , , | 留下评论

mysql Lost connection to MySQL server at ‘reading initial communication packet

mysql 爆出,本地连接正常,远程链接无法链接,爆出错误 Lost connection to MySQL server at ‘reading initial communication packet 大量无法远程链接的问题 1.iptables 导致 看看iptables -L 2.mysqld 下增加 skip-name-resolve 我加了发现不行 看下面 3.bind-adress 我发现mysqld 还有一句 bind-address = ::ffff:127.0.0.1 [mysqld] #bind-address = ::ffff:127.0.0.1 local-infile=0 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended … 继续阅读

发表在 数据库 | 标签为 | 一条评论

Centos 7 mysql 如何重启动MariaDB篇

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。[3] MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,10.0.9版起使用XtraDB(名称代号为Aria)来代替MySQL的InnoDB # yum install mysql -y # mysql ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (111) 试着去启动mysql服务,仍然不行   # systemctl start mysql Failed to issue method call: Unit mysql.service failed to load: No such … 继续阅读

发表在 Linux, 数据库 | 标签为 , , | 留下评论

游戏上瘾如何戒掉游戏

游戏控制的极端 我本人一直是一个重度的游戏瘾患者,知道前天,我半夜3点,不睡觉,沉迷在游戏里,我才最终承认我是个上瘾的人。游戏如同毒品,烟瘾一样。只是我从来不承认 我只是玩一会儿 我没什么事情可做。 我放松一下 我庆祝一下 持续打游戏的借口,如同那些想戒烟,禁止自己吃零食的人一样的多,如滔滔江水,连绵不绝。 查了下百度,不少人和我一样 我玩了游戏觉得才有意思,人生太无聊。 我戒了游戏2个月,觉得人生失去了整个意义。 我忍不住玩游戏,如何戒掉。 说一下本人的感受 1.每次遇到身体不舒服,我玩游戏打发时间,觉得时间很快就过去了。 2.我想念游戏的时候,几乎迫不及待 3.我每次长时间的打了游戏,会状态下降,一直输,一直打。然后很生气 4.我打了很久,腰疼背痛,脾气暴躁 我经常一天长达8小时的打游戏,那是周末 然后我睡前对自己说,明天不玩了,然后重复了好多年。 现在我承认了自己的病,然后开始寻找生命的其它意义。 1.挣钱,追求财富的自由 2.去旅游 3.我一直想画画 我的人生梦想的清单多达30项,需要我去实现,我居然一拖再拖 策略1.把人生当成游戏,比如我要完成一个计划 策略2.相信生命中不仅仅只有游戏才有意义,才刺激 策略3.安静下来,每天打坐。 策略4.游戏突破了现实的限制,我要问问自己是实际社会里的失败者么,才去追求那个虚无的荣耀。游戏很多时候不过是人生并不那么精彩的人的追求刺激的一个方式。精彩的人生有很多种,但不是游戏。 策略5.用其它事情来替代游戏,比如画画,读书,健身,把自己的时间排满。 如果你是重度患者,或许应该继续向下阅读 下面的这个文章,解释了如何对抗。 扩展:游戏真的可以对抗人生中的无意义? “从我的孩子,一位10后,不顾一切地挣脱我的手在购物商城里的电子游戏厅流连忘返那一刻起,从他一到周末就心心念念要去VR体验馆玩滑雪、搏斗和切水果、随时随地都想从我兜里掏出手机玩赛车游戏和奥特曼打怪那一刻起,我感到了自己人生经历的局限性。他如此急切地奔向游戏世界,沉迷其中。我则陷入迷惘:我应该给他自由,还是限制,甚至禁止他?” 这一组关于游戏的报道,始于我的同事蒲实在育儿过程中一个简单的困惑。我相信,这个时代的为人父母者,多少都带着类似的困惑。或者说,作为在书籍文化中成长起来的一代人,面对在数字文化中成长起来的一代人,我们对于坚守过去的生活方式和价值观,并没有那么大的自信。 美国当代著名人类学家玛格丽特·米德(M·Mead)曾经从文化的传递的角度,把人类文化分为前喻文化、并喻文化、后喻文化,其中,前喻文化是指晚辈主要向长辈学习;并喻文化是指晚辈与长辈的学习都发生在同辈之间;后喻文化则是指年轻人因为对新观念、新科技良好的接受能力而在许多方面都要胜过他们的前辈,年长者反而要向他们的晚辈学习。莫非,对游戏文化的怀疑与拒绝,是我们固守着前喻文化的偏见,是我们自身的匮乏,而不是年轻人的问题? 去年6月,芝加哥大学经济学院的教授Erik Hurst在给学生的一次毕业演讲中也提到了一个类似的困扰,他的儿子12岁,“现在他可以在周末写完作业以后玩两个小时的游戏,但如果由他来决定,我相信他每天会花23个小时半的时间玩游戏。如果没有我们的强令配给制度,我不知道他会不会不吃饭,但我很肯定他不会洗澡。” 毕竟是经济学教授,这一点育儿的忧虑被拓展到对整个美国经济与政治前景的不安。他说,与21世纪之初相比,美国20多岁的工人阶级的工作时间减少了4个小时,而玩游戏的时间增加了3个小时。在人口统计学的规模上,玩游戏取代了他们失去工作的时间。究其原因,是现代技术,尤其是自动化技术减少了对“低水平技术”工作的需求,而越来越强大的游戏技术则提升了娱乐的主观价值。他表达了对于这些工人人生前景的担忧,包括经济不稳定、药物滥用、自杀倾向等。 但是,与他们暗淡的未来形成鲜明对比的,是他们当下的幸福水平。就当下而言,这些年轻人并非悲惨绝望,而是恰恰相反。如果进行问卷调查,你会发现,这些人的幸福水平远远超过了2000年早期同类人群的幸福水平。也就是说,尽管就业率降低了,越来越的年轻人住在父母的地下室里,但他们对生活的满足感却更高了。 我们应该如何看待这种变化?游戏,到底是消费主义的精神鸦片?还是生产所谓“心流体验”的幸福引擎? ▲2016年7月份,任天堂公司推出的游戏“Pokémon … 继续阅读

发表在 吐槽 | 标签为 , | 3 条评论

程序员编程的五种境界

对号入座看看自己属于那个编程层次 编程技能层次 编程技能层次,指的程序员设计和编写程序的能力。这是程序员的根本。 0段—非程序员: 初学编程者,遇到问题,完全是懵懵懂懂,不知道该怎么编程解决问题。也就是说,还是门外汉,还不能称之为“程序员”。计算机在他面前还是一个神秘的黑匣子。 1段—基础程序员: 学习过一段时间编程后,接到任务,可以编写程序完成任务。 编写出来的代码,正常情况下是能够工作的,但在实际运行中,碰到一些特殊条件就会出现各类BUG。也就是说,具备了开发Demo软件的能力,但开发的软件真正交付给客户使用,恐怕会被客户骂死。 2段—数据结构: 经过一段时间的编程实践后,程序员会认识到“数据结构+算法=程序”这一古训的含义。他们会使用算法来解决问题。进而,他们会认识到,算法本质上是依附于数据结构的,好的数据结构一旦设计出来,那么好的算法也会应运而生。 设计错误的数据结构,不可能生长出好的算法。 记得某一位外国先贤曾经说过:“给我看你的数据结构!” 3段—面向对象: 再之后,程序员就会领略面向对象程序设计的强大威力。大多数现代编程语言都是支持面向对象的。但并不是说,你使用面向对象编程语言编程,你用上了类,甚至继承了类,你就是在写面向对象的代码了。 我曾经见过很多用Java,Python,Ruby写的面向过程的代码。 只有你掌握了接口,掌握了多态,掌握了类和类,对象和对象之间的关系,你才真正掌握了面向对象编程技术。 4段—设计模式: 曾经在网上看到这样一句话:“没有十万行代码量,就不要跟我谈什么设计模式”。深以为然。 记得第一次看Gof的设计模式那本书的时候,发现虽然以前并不知道设计模式,但在实际编程过程中,其实还是自觉使用了一些设计模式。设计模式是编程的客观规律,不是谁发明的,而是一些早期的资深程序员首先发现的。 5段–语言专家: 经过一段时间的编程实践,程序员对某一种常用的编程语言已经相当精通了。有些人还成了“语言律师”,擅长向其他程序员讲解语言的用法和各种坑。 6段–多语言专家: 这一个阶段的程序员,因为工作关系,或者纯粹是因为对技术的兴趣,已经学习和掌握了好几种编程语言。已经领略了不同编程语言不同的设计思路,对每种语言的长处和短处有了更多的了解。 他们现在认为,编程语言并不是最重要的,编程语言不过是基本功而已。

发表在 吐槽, 日常随笔 | 标签为 , , , | 留下评论

php小函数,遍历文件夹的4种姿态

php遍历文件夹,不少时候还是很需要的 /*获取所有文件*/ function get_all_files( $path ){ $list = array(); foreach( glob( $path . ‘/*’) as $item ){ if( is_dir( $item ) ){ $list = array_merge( $list , get_all_files( $item ) ); } else{ $list[] = $item; } } return $list; … 继续阅读

发表在 PHP | 标签为 , , | 留下评论