刘悦的技术博客 学习研究python能做什么以及如何能做的更好,关注互联网行业相关技术,浸淫web开发技术。 https://v3u.cn 天人合一物我相融,站点升级渐进式Web应用PWA(Progressive Web Apps)实践 https://v3u.cn/a_id_216 Tue, 14 Jun 2022 00:00:00 +0000 https://v3u.cn/a_id_216 PWA(Progressivewebapps,渐进式Web应用)使用现代的WebAPI以及传统的渐进式增强策略来创建跨平台Web应用程序,说白了,PWA可以让我们的站点以原生APP的形式运行,但相比于安装原生APP应用,访问PWA显然更加容易和迅速,还可以通过链接来分享PWA应用。有许多知名的网络平台已经将PWA方案落地,比如Twitter。选择增强的网站体验而不是原生应用。事实上使用PWA也确实从中获得了显而易见的益处。https://www.pwastats.com这个网站上分享了许多案例研究,PWA相比于传统应用有以下好处:1、减少应用安装后的加载时间,通过ServiceWorkers来... 见微知著,细节上雕花:SVG生成矢量格式网站图标(Favicon)探究 https://v3u.cn/a_id_215 Tue, 07 Jun 2022 00:00:00 +0000 https://v3u.cn/a_id_215 Favicon是favoritesicon的缩写,也被称为websiteicon(站点图标)、pageicon(页面图标)或者urlicon(URL图标)。Favicon是与某个站点或网页相关联的图标,网站设计者可以多种方式建立这种图标,几乎所有浏览器都支持此功能,浏览器可以将favicon显示于浏览器的地址栏中,也可置于书签列表的网站名前,还可以放在标签式浏览界面中的页标题前:我们定义一个favicon的方法是将一个名为“favicon.ico”的文件置于Web服务器的根目录下,IE的收藏夹(即书签)可以自动显示该文件。后来出现了一种更为灵活的方法,即使用HTML来为任何一个网页指示其图标所... 当我们进行性能优化,我们在优化什么(LightHouse优化实操) https://v3u.cn/a_id_214 Thu, 02 Jun 2022 00:00:00 +0000 https://v3u.cn/a_id_214 好的互联网产品不仅仅在功能上要高人一筹,在性能层面也需要出类拔萃,否则金玉其外败絮其中,页面是美轮美奂了,结果首屏半天加载不出来,难免让用户乘兴而来,败兴而归。幸运的是,前端的性能优化有诸多有迹可循的理论和方法,其中相对权威的,无疑是LightHouse。LightHouse是一个开源的自动化工具,它作为Chrome浏览器的扩展程序运行,提供一套完整的站点评分标准,我们可以依据此标准对站点进行基准测试,从而达到优化的效果。怎么打开LightHouse?可以在Chrome浏览器开发人员工具中找到LightHouse。要打开“开发人员工具”,请选择:“顶部菜单→查看→开发人员→开发人员工具”或者使... 青山不遮,毕竟东流,集成Web3.0身份钱包MetaMask以太坊一键登录(Tornado6+Vue.js3) https://v3u.cn/a_id_213 Tue, 31 May 2022 00:00:00 +0000 https://v3u.cn/a_id_213 上世纪九十年代,海湾战争的时候,一位美军军官担心他们的五角大楼会被敌人的一枚导弹干掉,从而导致在全球的美军基地处于瘫痪状态。这时候,有一位天才的科学家说,最好的中心就是没有中心。是的,这就是最朴素的去中心化思想,于是互联网出现了。一个没有互联网的时代是无法想象的,互联网的核心就是把一个信息分成若干的小件,用不同的途径传播出去,怎么方便怎么走。三十年后的今天,去中心化身份逐渐被广泛采用。用户的部分在线活动在链上是公开的,可通过加密钱包搜索到,用户在链上创造、贡献、赚取和拥有的东西,都反映了他们的喜好,也逐渐积累成该用户的身份和标识。当我们的用户厌倦了传统的电子邮件/密码注册流程时,他们会选择Go... 众妙之门玄之又玄,游戏系统中的伪随机(Pseudo-Randomization)和真随机(True-Randomization)算法实现Python3 https://v3u.cn/a_id_212 Fri, 22 Apr 2022 00:00:00 +0000 https://v3u.cn/a_id_212 有人说,如果一个人相信运气,那么他一定参透了人生。想象一下,如果你在某款moba游戏中,在装备平平,队友天坑的情况下,却刀刀暴击,在一小波gank中轻松拿下五杀,也许你会感叹自己的神操作和好运气,但其实,还有另外一种神秘的力量在支配着这一切,那就是:随机算法。伪随机(Pseudo-Randomization)其实,竞技游戏通常是拒绝随机性干预的,因为它干扰了玩家实际操作水平的考量。但是,应对突发情况也应该是玩家应变能力的一种表现。因此,在moba游戏中,有很多随机事件,这些随机事件降低了游戏的可预测性,增加了变数。为了限制这种随机性的影响,伪随机算法应运而生。伪随机分布(pseudo-rand... 小波从此逝,江海寄余生,不但是文坛巨擘还是不世出的编程奇才,王小波离世25周年 https://v3u.cn/a_id_211 Mon, 11 Apr 2022 00:00:00 +0000 https://v3u.cn/a_id_211 二十五年前的今天,王小波先生因病于北京逝世,享年四十四周岁。喜爱他的人,都知道他是一个特立独行的人,拥有谦虚与自豪并存的强大气质,并且留下无数传世作品,无可争议的文坛巨擘,他的力量、有趣,对媚众形式束缚的反抗,以及一以贯之的,对待生活无比真诚的态度都让我们为之倾倒。然而,鲜为人知的是,他不仅仅在文学上造诣非凡,与此同时,他还是一位不世出的编程奇才。在整个九十年代,除了和文字跳舞,王小波还将他的才华通过键盘喷涌而出,天才的脑细胞幻化为一行一行的代码,挥洒自如,回转如意。王小波在编程领域的惊人艺业,我们也许可以通过他的书信以及著作中的内容略窥一二。1988年12月,致好友刘晓阳:回来之前我曾往人大... 轻盈潇洒卓然不群,敏捷编辑器Sublime text 4中文配置Python3开发运行代码环境(Win11+M1 mac) https://v3u.cn/a_id_210 Fri, 01 Apr 2022 00:00:00 +0000 https://v3u.cn/a_id_210 20世纪初,几乎所有的飞机都是并列双翼结构,此时,美国著名飞行大亨霍华德·休斯认为自己的飞机不够快,助手委婉地提醒他,如果速度太快,飞机的上翼结构支柱很可能会支撑不住,发生断裂。霍华德愤怒地向助手大喊:“谁说我们需要上翼结构?让上翼和支柱见鬼去吧,我们需要的是更轻便的单翼飞机!”于是乎,H1单翼飞机就此出现,这款机型身上体现了霍华德作为一名航空工程师的天才之处:突破性的流线型机身,可收放起落架,轻巧灵动,平面的铆钉和接头以减少空气阻力,因其优美的造型被称为“银色子弹”。同样地,如果你入职了一家公司,当主管拍拍你的肩膀让你往电脑里安装Pycharm的时候,你也可以愤怒地向他大喊:“谁说我们需要P... 孔雀折翼空中浩劫,东航MU5735航班高空垂直骤降八千米坠毁失事原因技术性分析 https://v3u.cn/a_id_209 Tue, 22 Mar 2022 00:00:00 +0000 https://v3u.cn/a_id_209 公元2022年3月21日北京时间下午2点22分,东航MU5735航班(昆明至广州航段),以接近音速的速度和近乎垂直的角度,高速俯冲地面坠毁。坠毁位置位于广西省梧州市埌南镇莫埌村神塘表附近的山林中,坠毁前,该航班并未挂出“7700”紧急代码。北京时间下午1点16分,MU5735航班顺利起飞,并在升空的十分钟后飞行至海拔7500米左右的高度。此后,这架航班以每小时830公里左右的飞行速度途径云南百色市、广西南宁市和玉林市的上空,前往广州。MU5735航班在持续飞行近63分钟后,其航行高度突然从海拔约8870米的高度下降至约2770米,时长约持续了2分15秒。当时,这架飞机依然以每小时约842公里的... 并发异步编程之争:协程(asyncio)到底需不需要加锁?(线程/协程安全/挂起/主动切换)Python3 https://v3u.cn/a_id_208 Fri, 18 Mar 2022 00:00:00 +0000 https://v3u.cn/a_id_208 协程与线程向来焦孟不离,但事实上是,线程更被我们所熟知,在Python编程领域,单核同时间内只能有一个线程运行,这并不是什么缺陷,这实际上是符合客观逻辑的,单核处理器本来就没法同时处理两件事情,要同时进行多件事情本来就需要正在运行的让出处理器,然后才能去处理另一件事情,左手画方右手画圆在现实中本来就不成立,只不过这个让出的过程是线程调度器主动抢占的。线程安全系统的线程调度器是假设不同的线程是毫无关系的,所以它平均地分配时间片让处理器一视同仁,雨露均沾。但是Python受限于GIL全局解释器锁,任何Python线程执行前,必须先获得GIL锁,然后,每执行100条字节码,解释器就自动释放GIL锁,... Logo小变动,心境大不同,SVG矢量动画格式网站Logo图片制作与实践教程(Python3) https://v3u.cn/a_id_207 Wed, 23 Feb 2022 00:00:00 +0000 https://v3u.cn/a_id_207 曾几何时,SVG(ScalableVectorGraphics)矢量动画图在坊间称之为一种被浏览器诅咒的技术,只因为糟糕的硬件支持(IE),和没完没了的兼容性调优(Safari)。但是在2022年的今天,一切都不一样了,正所谓三十年河东,三十年河西,微软所研发的采用Chromium内核作为IE替代者的Edge浏览器已经有望超越Safari成为第二大桌面浏览器,而曾经因为不支持关键帧动画被人诟病的Safari也统一了标准,市面上除了老帮菜IE,几乎所有平台(包括移动端)都已经对SVG足够友好,这让我们可以放心大胆的在网站上应用SVG矢量动画图。目前国内外相对来说技术先行的平台都已经采用SVG矢量... 霜皮剥落紫龙鳞,下里巴人再谈数据库SQL优化,索引(一级/二级/聚簇/非聚簇)原理 https://v3u.cn/a_id_206 Mon, 14 Feb 2022 00:00:00 +0000 https://v3u.cn/a_id_206 举凡后端面试,面试官不言数据库则已,言则必称SQL优化,说起SQL优化,网络上各种“指南”和“圣经”难以枚举,不一而足,仿佛SQL优化已然是妇孺皆知的理论常识,然后根据多数无知(Pluralisticignorance)理论,人们印象里觉得多数人会怎么想怎么做,但这种印象往往是不准确的。那SQL优化到底应该怎么做?本次让我们褪去SQL华丽的躯壳,以最浅显,最粗俗,最下里巴人的方式讲解一下SQL优化的前因后果,前世今生。SQL优化背景首先要明确一点,SQL优化不是为了优化而优化,就像冬天要穿羽绒服,不是因为有羽绒服或者羽绒服本身而穿,是因为天儿太冷了!那SQL优化的原因是什么?是因为SQL语句太... B站员工猝死,审核员之殇,谁该反省?谁该惭愧?技术层面解构内容安全审核系统(python3) https://v3u.cn/a_id_205 Thu, 10 Feb 2022 00:00:00 +0000 https://v3u.cn/a_id_205 猝死,又见猝死,可怜无定河边骨,犹是春闺梦里人!每当有年轻的生命逝去,我们就会感到心中某种撕裂的感觉,惆怅万千,疼痛不已。审核专员,一个我们既熟悉又陌生的岗位,他们的疲惫,不仅仅体现在肉体上重复工作的折磨,而更多的,是精神上处于一种无知无觉的疲惫,想象一下,作为审核员,千帆阅尽之后,感动过你的一切不再感动你,吸引过你的一切不再吸引你,甚至激怒过你的一切都不再激怒你,麻木和怅惘充斥着你的工作和生活,只剩下疲于奔命,惨淡经营。而造成审核员审核过劳的因素之一,就是海量内容审核系统的设计问题。谁也不能否认,对于UGC(UserGeneratedContent,即用户产出内容)内容类产品来说,内容审核是... 增效降本开源节流,2022年技术趋势前瞻(异步编程/容器技术) https://v3u.cn/a_id_204 Fri, 14 Jan 2022 00:00:00 +0000 https://v3u.cn/a_id_204 2022初始,凛冬已至,疫情横跳,环境繁复,君不见互联网大厂纷纷裁员,银根紧缩。这一切归结为两个字:成本。对于互联网企业来讲,除了最基本的工商财税,办公室、办公设备、人力、产品和公关等等,这一切都是成本。而在疫情因素侵入导致经济下滑的情况下,降本增效就已经成为2022开年很多企业管理者非常重视的KPI指标,而降本也一定会成为2022年技术发展的一个必然趋势。降本增效,到底降什么本,增什么效,有何妙计?异步编程一直以来,异步编程都是最有经验的开发者的专长,他们孜孜不倦地研究着非线性执行流中的回调方法,念兹在兹的,不过就是有限资源下每秒处理请求数的提升。异步编程方式也许是开发者对自己的严格要求,但... 四位一体水溶交融,Docker一拖三Tornado6.2 + Nginx + Supervisord非阻塞负载均衡容器式部署实践 https://v3u.cn/a_id_203 Fri, 07 Jan 2022 00:00:00 +0000 https://v3u.cn/a_id_203 容器,又见容器。Docker容器的最主要优点就在于它们是可移植的。一套服务,其所有的依赖关系可以捆绑到一个独立于Linux内核、平台分布或部署模型的主机版本的单个容器中。此容器可以传输到另一台运行Docker的主机上,并且在没有兼容性问题的情况下执行。而传统的微服务架构会将各个服务单独封装为容器,虽然微服务容器化环境能够在给定数量的基础架构内实现更高的工作负载密度,但是,在整个生产环境中创建、监视和销毁的容器需求总量呈指数级增长,从而显著增加了基于容器管理环境的复杂性。藉此,本次我们将服务化零为整,将Tornado服务和Nginx服务器以及配套的监控管理程序Supervisor集成到一个单独的... 把酒言欢话聊天,基于Vue3.0+Tornado6.1+Redis发布订阅(pubsub)模式打造异步非阻塞(aioredis)实时(websocket)通信聊天系统 https://v3u.cn/a_id_202 Tue, 21 Dec 2021 00:00:00 +0000 https://v3u.cn/a_id_202 “表达欲”是人类成长史上的强大“源动力”,恩格斯早就直截了当地指出,处在蒙昧时代即低级阶段的人类,“以果实、坚果、根作为食物;音节清晰的语言的产生是这一时期的主要成就”。而在网络时代人们的表达欲往往更容易被满足,因为有聊天软件的存在。通常意义上,聊天大抵都基于两种形式:群聊和单聊。群聊或者群组聊天我们可以理解为聊天室,可以有人数上限,而单聊则可以认为是上限为2个人的特殊聊天室。为了开发高质量的聊天系统,开发者应该具备客户机和服务器如何通信的基本知识。在聊天系统中,客户端可以是移动应用程序(C端)或web应用程序(B端)。客户端之间不直接通信。相反,每个客户端都连接到一个聊天服务,该服务支撑双方... 神工鬼斧惟肖惟妙,M1 mac系统深度学习框架Pytorch的二次元动漫动画风格迁移滤镜AnimeGANv2+Ffmpeg(图片+视频)快速实践 https://v3u.cn/a_id_201 Wed, 15 Dec 2021 00:00:00 +0000 https://v3u.cn/a_id_201 前段时间,业界鼎鼎有名的动漫风格转化滤镜库AnimeGAN发布了最新的v2版本,一时间街谈巷议,风头无两。提起二次元,目前国内用户基数最大的无疑是抖音客户端,其内置的一款动画转换滤镜“变身漫画”,能够让用户在直播中,把自己的实际外貌转换为二次元“画风”。对于二次元粉丝来说,“打破次元壁,变身纸片人”这种自娱自乐方式可谓屡试不爽:但是看多了就难免有些审美疲劳,千人一面的“锥子脸”,一成不变的“卡姿兰”式大眼睛,让人多少有点味同嚼蜡的感觉,未免过犹不及,失之现实。而基于CartoonGan的AnimeGAN动漫风格滤镜则能够在保留原图特点的同时,兼具二次元的炫酷和三次元的写实,颇有些刚柔并济、举重... 一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境 https://v3u.cn/a_id_200 Tue, 30 Nov 2021 00:00:00 +0000 https://v3u.cn/a_id_200 时光荏苒,过隙白驹,即将进入2022年,著名敏捷开发语言Python也放出了3.10最终版,本次我们来展示一下在不同的系统和平台中,高效部署Python3.10开发环境,这里我们并不依赖其他的三方软件,只通过Python官方的安装包进行配置,编辑器我们依然使用微软开源的Vscode,争取在一分钟以内就可以在一台干净的开发机上部署好环境,省去一些不必要的步骤。首先我们以市场占有率最高的微软Intel芯片x86架构的64位win10系统为例子。第一步,打开python官网,python.org选择python3.10.064位windows系统安装包。下载成功后,双击安装,这里不要选择默认第一个立... 十万高层齐卸甲,竟无一人有慈心。前阿里员工看阿里高管不法侵害女员工事件 https://v3u.cn/a_id_198 Mon, 09 Aug 2021 00:00:00 +0000 https://v3u.cn/a_id_198 最近的事情大家都晓得了,公元2021年7月27日,阿里P7高管涉嫌勾结客户对其女性下属进行不法人身侵害,28日受害人报警,随后8月2日受害人向其上级各个主管依次反馈,均无结果。公元2021年8月8日凌晨,阿里首席执行官逍遥子(张勇)在阿里内网发帖进行回应,六字以敝之:震惊、气愤、羞愧。十天,整整十天之后,阿里高层才对此事予以重视,请诸位想象一下,一个弱女子,在遭受上级领导不法侵害之后,在上级主管的沆瀣一气,官官相护,不作为之后。整整十天,她经历了怎样的绝望和痛苦?实在是伤心惨目,尤非生人所忍闻也,阿里诸位高管既要做官,又要讨钱,而特别又要以“阿里巴巴”之身份标榜其清廉不苟之态度。令人作呕!作为... 举重若轻流水行云,前端纯CSS3实现质感非凡的图片Logo鼠标悬停(hover)光泽一闪而过的光影特效 https://v3u.cn/a_id_197 Sat, 04 Dec 2021 00:00:00 +0000 https://v3u.cn/a_id_197 喜欢看电影的朋友肯定会注意到一个有趣的细节,就是电影出品方一定会在片头的Logo环节做一个小特效:暗影流动之间光泽一闪而过,这样做不仅可以提高Logo的辨识度,还可以提升质感,一举两得。参照华纳兄弟影业(WarnerBros.Pictures)的例子:那么,在前端领域,如果使用纯CSS技术,能不能实现类似的特效呢?答案当然是可以的,这次我们以本站的Logo为例子,以一持万、提纲挈领地讲解一下如何使用纯CSS技术实现图片Logo鼠标悬停光泽一闪而过的光影特效。一般情况下,大多数前端开发会选择linear-gradient(),这个方法创建一个表示两种或多种颜色线性渐变的图片。其结果属于&... Win10系统下基于Docker构建Appium容器连接Android模拟器Genymotion完成移动端Python自动化测试 https://v3u.cn/a_id_196 Tue, 27 Jul 2021 00:00:00 +0000 https://v3u.cn/a_id_196 Python自动化,大概也许或者是今年最具热度的话题之一了。七月流火,招聘市场上对于Python自动化的追捧热度仍未消减,那么Python自动化到底能帮我们做些什么呢?第一,Python自动化可以避免熟练工种的重复工作,对于功能相对完整和成熟的软件,每发布一个新的版本,无论是大版本还是小版本,其中大部分功能和界面都几乎和上一个版本相似或完全相同,但所谓向上兼容,你不能因为新功能的产生而不对老版本功能进行测试工作,而这些老功能又在上一个版本上线时测过,所以这部分功能特别适合于自动化测试,从而可以让测试达到测试每个特征的目的。第二,Python自动化可以帮助我们提高测试效率:比如一个项目要的开发周... 浩若烟海事半功倍|利用Docker容器技术构建自动化分布式web测试集群Selenium Grid https://v3u.cn/a_id_195 Sun, 27 Jun 2021 00:00:00 +0000 https://v3u.cn/a_id_195 “世界上有那么多城市,城市里有那么多的酒馆,可她,却偏偏走进了我的.....”,这是电影《卡萨布拉卡》中的一句著名独白,投射到现实生活中,与之类似的情况不胜枚举,这世界上有那么多的系统,系统中有那么多的浏览器,在只有一台测试机的前提下,难道我们只能排队一个一个地做兼容性测试吗?有没有效率更高的方法呢?为此我们提出一个更高效的解决方案:使用Docker+SeleniumGrid。SeleniumGrid是一个分布式WebUI测试工具,可以将测试流程分发到多台服务器上,并行地执行。SeleniumGrid架构中包含两个主要角色:Hub是中心点控制节点,而Node是Selenium的工作节点,它们注... 珠联壁合地设天造|M1 Mac os(Apple Silicon)基于vscode(arm64)配置搭建Java开发环境(集成web框架Springboot) https://v3u.cn/a_id_194 Thu, 20 May 2021 00:00:00 +0000 https://v3u.cn/a_id_194 也许有人从未听说过Python,但是不会有人没听说过Java,它作为一个拥有悠久历史的老牌编程语言,常年雄踞TIOBE编程语言榜首,其顶尖的霸主地位不可撼动,而M1mac业已发布了一段时间,作为跨时代的顶级芯片系统,这两大巨头能否珠联璧合,让开发者们猛虎添翼、更上层楼?本次我们尝试在M1mac系统中搭建Java开发环境,并且集成目前Web开发领域红的发紫的Springboot框架,另外,谁说玩儿Java就必须得用Eclipse或者IntelliJIDEA?我们就骄傲地使用Vscode。首先需要应对的是OpenJDK的选择,这里推荐使用Azul公司提供的zulu版本,Zulu又是什么?它是Azu... 王霸雄图荣华敝屣,谈笑间尽归尘土|基于Python3双队列数据结构搭建股票/外汇交易匹配撮合系统 https://v3u.cn/a_id_192 Thu, 22 Apr 2021 00:00:00 +0000 https://v3u.cn/a_id_192 如果你爱他,那么送他去股市,因为那里是天堂;如果你恨他,送他去股市,因为那里是地狱。在过去的一年里,新冠疫情持续冲击世界经济,全球主要股票市场的波动都相对频繁,尤其是A股,正所谓:曾经跌停难为鬼,除非解套才做人;抄底时难抛亦难,反弹无力百花残。对于波谲云诡的股票市场,新投资人还是需要谨慎入场,本次我们来利用双队列的数据结构实现实时在线交易匹配引擎,探索股票交易的奥秘。首先需要明确一点,证券交易和传统的B2C电商系统交易完全不同,证券交易系统提供的买卖标的物是标准的数字化资产,如美元、股票、比特币等等,它们的特点是数字计价,可分割买卖,也就是说,当我们发起买盘申请的时候,需要有价格对应的卖盘响应... 奇技淫巧玄妙无穷| M1 mac os(苹果/AppleSilicon)系统的基本操作和设置 https://v3u.cn/a_id_191 Tue, 06 Apr 2021 00:00:00 +0000 https://v3u.cn/a_id_191 最近有个朋友跟我说,说他新入职了一家公司,公司还不错,给他配了一台Mac,但是呢他以前一直在Windows环境下开发,对Macos并不了解,他感到很彷徨,所以本次呢,我们来分享一下,当手头儿有一部崭新的Mac,我们应该怎么上手操作和配置,让它成为我们开发的好帮手。首先我们来看一下键位上的差异,传统Windows系统的键盘以control键为主,以左小指为基准,食指为辐射范围,组合快捷键,比如说我们非常熟悉control+c和control+v:Mac系统的键位是以command键为主,以左拇指为基准,食指为辐射范围,组合快捷键,用习惯了windows朋友只要脑子想着原本的control键改为c... 石火电光追风逐日|前端优化之次时代图片压缩格式WebP的项目级躬身实践(Python3 PIL+Nginx) https://v3u.cn/a_id_190 Wed, 10 Mar 2021 00:00:00 +0000 https://v3u.cn/a_id_190 我们知道,在前端界有一个共识:速度就是生命,带宽就是金钱。怎样将页面加载速度有效提升是无数前端工程师无时不刻在思考的课题,目前的网络环境中,除了视频,图片仍旧是占用流量较大的一部分,对于app端尤其如此,因此,如何在保证图片视觉不失真的前提下缩小图片体积,对于节省带宽和电池电量都十分重要,因此Google在十年前提出了一种新的图片压缩格式:WebP,给图片的优化提供了新的方向。WebP的优势在于它具有更优的图像数据压缩算法,在拥有肉眼几乎无法识别差异的图像质量前提下,带来更小的图片体积,同时具备了无损和有损的压缩模式、Alpha透明以及动画的特性,从JPEG和PNG上的转化效果都非常突出、稳定... 金玉良缘易配而木石前盟难得|M1 Mac os(Apple Silicon)天生一对Python3开发环境搭建(集成深度学习框架Tensorflow/Pytorch) https://v3u.cn/a_id_189 Thu, 04 Mar 2021 00:00:00 +0000 https://v3u.cn/a_id_189 笔者投入M1的怀抱已经有一段时间了,俗话说得好,但闻新人笑,不见旧人哭,Intelmac早已被束之高阁,而M1mac已经不能用真香来形容了,简直就是“香透满堂金玉彩,扇遮半面桃花开!”,轻抚M1mac那滑若柔荑的秒控键盘,别说996了,就是007,我们也能安之若素,也可以笑慰平生。好了,日常吹M1的环节结束,正所谓剑虽利,不厉不断,材虽美,不学不高。本次我们尝试在M1Macos中搭建Python3的开发环境。一般情况下,直接Python官网(python.org)下载最新的基于arm架构的python3.9即可,但是由于向下兼容等问题,我们尝试使用Python多版本管理软件conda,cond... 别梦依稀咒逝川,Ruby二十八年前|M1芯片Mac os系统配置Ruby(3.0.0) on Rails(6.1.1)开发环境(2021最新攻略) https://v3u.cn/a_id_188 Mon, 01 Mar 2021 00:00:00 +0000 https://v3u.cn/a_id_188 在每个开发者心里,都会有一门“最好”的语言,在这个世界的某个深处,在一些矫矫不群的人们心中,这门语言的名字叫做Ruby,它今年二十八岁了,历史和Java一样的悠久,但是它没有大厂背书、它的性能被开发者诟病、时至今日依然无法高效利用多核资源,甚至于它每年都要被“死亡”一次,相比于有太阳计算机系统、甲骨文、IBM这些大公司支持的Java,它是那么的一无所有,但是,它又拥有全世界最虔诚的“信徒”,拥有最活跃的开发者社区,这一切,又让它是那么的应有尽有。是的,这就是Rubyist的理念:有的时候,你想证明给一万个人看,到后来,你发现只得到了一个明白的人,那就够了。本次我们尝试在最新的M1芯片Macos... 无意苦争春,一任群芳妒!M1 Mac book(Apple Silicon)能否支撑全栈工程师的日常?(Python3/Ruby/PHP/Mysql/Redis/NPM/虚拟机/Docker) https://v3u.cn/a_id_187 Wed, 24 Feb 2021 00:00:00 +0000 https://v3u.cn/a_id_187 就像大航海时代里突然诞生的航空母舰一样,苹果把玩着手心里远超时代的M1芯片,微笑着对Intel说:“不好意思,虽然你也玩桌面芯片,但是,从今天开始,游戏就已经结束了,X86?还是省省吧。”十五年前,iPhone横空出世,乔布斯告诉世人什么才叫做真正的智能手机,十年前,A4处理器粉墨出场,iPhone瞬间猛虎添翼,性能这两个字从此没有友商敢在苹果面前提及,iPad更是在业界呼风唤雨,几乎把整个平板市场都收入囊中,在人们的脑海中,Pad就是iPad的代名词,安卓平板?不存在的。今时今日,AppleSilicon华丽登台,不必说M1堪称恐怖到爆炸的性能,也不必说十个小时以上的超长续航以及丝滑无迟滞的... 人理解迭代,神则体会递归,从电影艺术到Python代码实现神的逆向思维模式 https://v3u.cn/a_id_186 Sun, 21 Feb 2021 00:00:00 +0000 https://v3u.cn/a_id_186 “从来如此,便对么?”,鲁迅先生在《狂人日记》中借狂人之口在月光下发出的质疑与呐喊,是的,从来如此,一般人的思维模式就是从来如此,以高数为例子,我们大抵都是先从数分、线代、解几去学泛函、抽代、拓扑等,其实就是按照标准路子来,这样做理论上可以增加对已学知识的理解程度,并对某些数分、线代中的问题看清其本质有所帮助。数学归纳法其实就是一种迭代(iteration),从一个简单的起点,推广到一般情况。而递归(recursion),则是一种反人类的逆向思维模式,作为研发人员,掌握这种反常识的思维逻辑是非常必要的,这里我们以一个推理故事为开端:在一个秋意绵绵的雨夜,日本警视厅搜查课警司古畑任三郎和其助手今... 一寸宕机一寸血,十万容器十万兵|Win10/Mac系统下基于Kubernetes(k8s)搭建Gunicorn+Flask高可用Web集群 https://v3u.cn/a_id_185 Thu, 04 Feb 2021 00:00:00 +0000 https://v3u.cn/a_id_185 2021年,君不言容器技术则已,欲言容器则必称Docker,毫无疑问,它是当今最流行的容器技术之一,但是当我们面对海量的镜像与容器时,怎样快速精准的对海量容器进行管理和编排就又成了新的课题,此时,由Google开源的Kubernetes(读音[kubə'netis],业界也有称其k8s的,但k8s其实就是文盲版的Kubernetes,只是因为k和s之间有8个字母)就应时而生了,它是一个开源的用于多个主机虚拟成一个云平台后进行容器资源管理和应用编排引擎,致力于让部署容器化应用简单并且高效,提供了应用的全生命周期管理,如应用部署,规划,更新,维护等机制。本次我们尝试在Win10/Mac系统下,利用... 别无分号只此一家,Python3接入支付宝身份认证接口( alipay.user.certify)体系(2021年最新攻略) https://v3u.cn/a_id_184 Wed, 06 Jan 2021 00:00:00 +0000 https://v3u.cn/a_id_184 目前国内身份认证体系做的比较不错的大抵就是支付宝和微信两家了,支付宝的身份验证基于支付宝app的实人认证能力,采用多因子认证技术快速得出认证结果,对于多因子认证技术不太了解的朋友可移步:别让你的服务器(vps)沦为肉鸡(ssh暴力破解),密钥验证、双向因子登录值得拥有进行了解。其作用主要是为了解决线上实人开户、账号实名认证、账号实人登录等场景中个人身份的识别问题,比如你某一天突然心血来潮想当一把韭菜炒炒股,又不想去人多眼杂的营业厅,所以利用app远程开户,开户的过程中,你怎么证明“你是你本人”的问题。首先,老规矩,做一下前置任务,注册蚂蚁金服开放平台:https://open.alipay.c... 虚言妙诀终虚见,面试躬行是致知,Python技术面试策略与技巧实战记录 https://v3u.cn/a_id_183 Thu, 21 Jan 2021 00:00:00 +0000 https://v3u.cn/a_id_183 2021年,对于正在找工作的朋友来说,笼罩在新冠肺炎疫情之下,今年的就业季显得更加具有挑战性,更有意思的是,每当这个时候,各种面试经验分享就如同过江之鲫一般,俯拾皆是,因为例子过多,兹不细举。然而这些面试经验大部分都停留在理论阶段,这就造成了一个问题:理论和实际,到底有多大出入?我国古代大名仕曾文正公曾经说:“天下事,在局外呐喊议论,总是无益,必须躬身入局,挺膺负责,方有成事之可冀。”革命先烈李大钊先生也曾感叹:“凡事都要脚踏实地去作,不驰于空想,不骛于虚声,而惟以求真的态度作踏实的工夫。以此态度求学,则真理可明,以此态度做事,则功业可就。”所以本次我们来进行一次真实的线上面试,正所谓空谈误国... Win10环境前后端分离项目基于Vue.js+Django+Python3实现微信(wechat)扫码支付流程(2021年最新攻略) https://v3u.cn/a_id_182 Fri, 18 Dec 2020 00:00:00 +0000 https://v3u.cn/a_id_182 之前的一篇文章:mpvue1.0+python3.7+Django2.0.4实现微信小程序的支付功能,主要介绍了微信小程序内部支付的流程,然而实际上微信小程序有一定的局限性,也就是用户范围仅限于小程序内部生态圈,在生活中真正具有广泛性、高效性、使用方便性的支付方式还得是扫码支付,扫码的优点在于推广成本低,上至钓鱼台国宾馆,下至发廊地摊都能用,打印出来就完事了,而相比其他支付方式,现金的找零及假钞问题,信用卡的办理门槛、pos机的沉没成本,就算微信可集成的h5支付和小程序支付,奈何很多老年人根本不会用小程序和手机浏览器,更别说再进行支付操作了,所以基于二维码的扫码支付的确是非常符合国情的。本次我... 远见而明察近观若明火|Centos7.6环境基于Prometheus和Grafana结合钉钉机器人打造全时监控(预警)Docker容器服务系统 https://v3u.cn/a_id_181 Sun, 06 Dec 2020 00:00:00 +0000 https://v3u.cn/a_id_181 我们知道,奉行长期主义的网络公司,势必应在软件开发流程管理体系上具备规范意识,即代码提交有CR(CodeReview),功能测试上自动化,而功能发布讲究三板斧:灰度、监控、止血。灰度属于测试范畴,止血则是亡羊补牢,今天我们来聊聊监控,提起监控,就不得不提在DepOps(自动化运维)领域鼎鼎有名的Prometheus(普罗米修斯),有人说这个开源系统的名字怎么有点如雷贯耳啊,没错,它的名字就是取自从宙斯手中为人类夺回圣火的古希腊神明普罗米修斯,而Prometheus的Logo恰恰就是奥林匹克圣火。Prometheus主要的功能就是可以无时不刻的监控所有部署在生产环境中的服务,如果服务出现问题则会... 金瓯无缺江河一统|Win10系统基于Docker和Python3搭建并维护统一认证系统OpenLdap https://v3u.cn/a_id_180 Tue, 24 Nov 2020 00:00:00 +0000 https://v3u.cn/a_id_180 OpenLdap(LightweightDirectoryAccessProtocol)是什么?它其实是一个开源的、具备工业标准特性的应用协议,可以使用TCP协议提供访问控制和维护分布式信息的目录信息。这是一个传统意义上的书面解释,是的,毫无疑问,你会一脸懵逼。好吧,让我们变得感性一点,假如我每天早上使用Twitter想听听懂王又吹了什么牛,登录Twitter账号密码,紧接着又想上Instagram看看女神又post了什么新靓照,好的,登录Instagram账号密码,摸了一上午的鱼之后,突然想起来要登录公司的邮箱,看看有没有新需求,是的,又需要那该死的账号和密码,甚至于查询社保、公积金提取、交... 海纳百川无所不容,Win10环境下使用Docker容器式部署前后端分离项目Django+Vue.js https://v3u.cn/a_id_179 Tue, 17 Nov 2020 00:00:00 +0000 https://v3u.cn/a_id_179 随着现代化产品研发的不断推进,我们会发现,几乎每个产品线都会包含功能各异的服务,而且服务与服务之间存在也会存在着错综复杂的依赖和被依赖关系,这就会带来一个世界性难题,项目部署的时候需要运维来手动配制服务之间通信的协议和地址,稍有不慎就会导致服务异常,同时如果服务器因为坏道或者其他原因导致更换物理机,重新部署新环境的成本也会非常之高。因此,我们就会寄希望于Docker这种的容器技术可以让我们构建产品所需要的所有的服务能够迅速快捷的重新部署,并且可以根据需求做横向扩展,且能够保证稳定的容灾性,在出现问题的时候可以利用守护进程自动重启或者启动容灾备份。本次我们将在Win10环境下利用Docker容器... 人工智能不过尔尔,基于Python3深度学习库Keras/TensorFlow打造属于自己的聊天机器人(ChatRobot) https://v3u.cn/a_id_178 Wed, 11 Nov 2020 00:00:00 +0000 https://v3u.cn/a_id_178 聊天机器人(ChatRobot)的概念我们并不陌生,也许你曾经在百无聊赖之下和Siri打情骂俏过,亦或是闲暇之余与小爱同学谈笑风生,无论如何,我们都得承认,人工智能已经深入了我们的生活。目前市面上提供三方api的机器人不胜枚举:微软小冰、图灵机器人、腾讯闲聊、青云客机器人等等,只要我们想,就随时可以在app端或者web应用上进行接入。但是,这些应用的底层到底如何实现的?在没有网络接入的情况下,我们能不能像美剧《西部世界》(Westworld)里面描绘的那样,机器人只需要存储在本地的“心智球”就可以和人类沟通交流,如果你不仅仅满足于当一个“调包侠”,请跟随我们的旅程,本次我们将首度使用深度学习库... 一代版本一代神:利用Docker在Win10系统极速体验Django3.1真实异步(Async)任务 https://v3u.cn/a_id_177 Wed, 30 Sep 2020 00:00:00 +0000 https://v3u.cn/a_id_177 就在去年(2019年),Django官方发布3.0版本,内核升级宣布支持Asgi,这一重磅消息让无数后台研发人员欢呼雀跃,弹冠相庆。大喜过望之下,小伙伴们兴奋的开箱试用,结果却让人大跌眼镜:非但说好的内部集成Websocket没有出现,就连原生的异步通信功能也只是个壳子,内部并未实现,很明显的换汤不换药,这让不少人转身投入了FastAPI的怀抱。不过一年之后,今天8月,Django3.1版本姗姗来迟,这个新版本终于一代封神,不仅支持原生的异步视图,同时也支持异步中间件,明显整了个大活。本次我们利用Docker制作一款基于Django3.1.1的项目镜像,实际体验一下Django原生异步的魅力。... 鸟枪换炮,利用python3对球员做大数据降维(因子分析得分),为C罗找到合格僚机 https://v3u.cn/a_id_176 Thu, 24 Sep 2020 00:00:00 +0000 https://v3u.cn/a_id_176 众所周知,尤文图斯需要一座欧冠奖杯,C罗也还想再拿一座欧冠奖杯,为自己的荣誉簙上锦上添花。意甲霸主在意甲虽然风生水起,予取予求,但是在今年欧冠1/8决赛赛场上,被法甲球队里昂所淘汰,痛定思痛,球队解雇了主教练萨里,签约名宿皮尔洛,但是要想在欧冠赛场上夺冠,这还不够,球队还需要什么?没错,需要一名强力中锋,在正印中锋伊瓜因难堪大用的情况下,尤文图斯必须引进一名强力中锋。现在的问题是,在新赛季即将开始、疫情下球队银根紧缩的背景下,到底谁才是合格的引援人选?本次我们使用基于Python3的factor_analyzer库来对球员进行分析,试图寻找尤文图斯最适合引援的球员。首先我们来划定范围,先排除掉... 聚是一团火散作满天星,前端Vue.js+elementUI结合后端FastAPI实现大文件分片上传 https://v3u.cn/a_id_175 Thu, 10 Sep 2020 00:00:00 +0000 https://v3u.cn/a_id_175 分片上传并不是什么新概念,尤其是大文件传输的处理中经常会被使用,在之前的一篇文章里:python花式读取大文件(10g/50g/1t)遇到的性能问题(面试向)我们讨论了如何读写超大型文件,本次再来探讨一下如何上传超大型文件,其实原理都是大同小异,原则就是化整为零,将大文件进行分片处理,切割成若干小文件,随后为每个分片创建一个新的临时文件来保存其内容,待全部分片上传完毕后,后端再按顺序读取所有临时文件的内容,将数据写入新文件中,最后将临时文件再删掉。大体流程请见下图:其实现在市面上有很多前端的三方库都集成了分片上传的功能,比如百度的WebUploader,遗憾的是它已经淡出历史舞台,无人维护了。... 利用本地HTTPS模拟环境为FastAPI框架集成FaceBook社交三方登录 https://v3u.cn/a_id_174 Sun, 06 Sep 2020 00:00:00 +0000 https://v3u.cn/a_id_174 提起社交,就不得不说马克·扎克伯格(MarkZuckerberg)一手创办的社交网络(FaceBook)。进入2020年,FaceBook的全球用户数已经突破了30亿,这是什么概念?全球人口大约70亿,除开中国14亿,还有56亿。国外市场是四倍于中国的潜在市场,扣除短期内有上网限制的人群,那也是两倍以上。站在全球视角看问题,说微信、支付宝偏安一隅,其实也并不为过。所以为你的平台集成全球最大用户基数的社交登录系统,显然可以为你带来更多的潜在用户,本次我们使用当红炸子鸡FastAPI框架来集成FaceBook的三方登录。首先在https://developers.facebook.com/上面注册... 还在用Alpine作为你Docker的Python开发基础镜像?其实Ubuntu更好一点 https://v3u.cn/a_id_173 Thu, 03 Sep 2020 00:00:00 +0000 https://v3u.cn/a_id_173 一般情况下,当你想为你的Python开发环境选择一个基础镜像时,大多数人都会选择Alpine,为什么?因为它太小了,仅仅只有5MB左右(对比Ubuntu系列镜像接近100MB),但事实的真相是,我们选择基础镜像并不是为了体验一下Python语法而已,在此基础上,我们需要调试和安装各种扩展,可能会安装很多三方依赖,甚至预设更多服务,在这种环境下,Alpine就并非是一个很好的选择了,本次我们就来分别在Alpine和Ubuntu上来体验一下安装和编译Python的区别。首先分别拉取Alpine和Ubuntu的镜像:dockerpullubuntu:18.04dockerpullalpine拉取完毕... 别让你的服务器(vps)沦为肉鸡(ssh暴力破解),密钥验证、双向因子登录值得拥有 https://v3u.cn/a_id_172 Wed, 19 Aug 2020 00:00:00 +0000 https://v3u.cn/a_id_172 如果你购买了阿里云、腾讯云或者华为云等国内云服务上的服务器,默认登录都是以密码的方式,这就给潜在的渗透带来了机会,因为当你的linux服务器暴露在外网当中时,服务器就极有可能会遭到互联网上的扫描软件进行扫描,然后试图连接ssh端口进行暴力破解(穷举扫描),如果你不采取相对应的措施,迟早有一天服务器会被渗透者攻陷,这也就解释了为什么googlecloud(谷歌云)和aws(亚马逊云)默认都是以秘钥的方式登录服务器。基于密钥的安全验证必须为用户自己创建一对密钥(公钥和私钥),并把公钥放在需要访问的服务器上。当需要连接到远程服务器上时,客户端软件就会向服务器发出请求,请求使用私钥进行安全验证。服务器... 心动不如行动,基于Docker安装关系型数据库PostgrelSQL替代Mysql https://v3u.cn/a_id_171 Wed, 12 Aug 2020 00:00:00 +0000 https://v3u.cn/a_id_171 最近“全栈数据库”的概念甚嚣尘上,主角就是PostgrelSQL,它最近这几年的技术发展不可谓不猛,覆盖OLTP、OLAP、NoSQL、搜索、图像等应用场景,实实在在的全栈性发展。帮助公司解决了数据孤岛、数据平台多、同步一致性、延迟,软硬件成本增加等业务痛点,在互联网、金融、物联网、传统企业等领域得到了广泛的应用。PostgreSQL的应用场景丰富,不亚于商用数据库Oracle,常被业界称为“开源界的Oracle”。至于Mysql大家都很熟悉,很多公司因为人才储备和数据量大的原因,一般是Hadoop+Mysql的模式,Hadoop计算大量原始数据,然后按维度汇总后的展示数据存储在Mysql上,... 基于Docker在Win10平台搭建Ruby on Rails 6.0框架开发环境 https://v3u.cn/a_id_170 Tue, 04 Aug 2020 00:00:00 +0000 https://v3u.cn/a_id_170 2020年,“非著名Web框架”--RubyonRails已经15岁了。在今年,Rails6.0趋于完善,除了拿掉讨厌的Jquery,Webpacker也成为默认前端打包方案,Sprockets开始软着陆,未来很可能会和Jquery一样被彻底废弃,这就是历史的进程。由于历史原因,本身就由Ruby撰写的HomeBrew在Macos系统上大行其道,所以大部分Rails程序员的主力电脑都是Macbookpro,而使用Windows系统的用户就没那么好运了,比如Rails6.0开始启用Webpacker,这就需要用户安装yarn,由此带来一系列的连锁反应,还有令人绝望的Win10系统下的CoffeeS... 基于Python3(Autosub)以及Ffmpeg配合GoogleTranslation(谷歌翻译)为你的影片实现双语版字幕(逐字稿) https://v3u.cn/a_id_169 Mon, 03 Aug 2020 00:00:00 +0000 https://v3u.cn/a_id_169 为影片加字幕其实是一件非常耗费时间的事情,尤其是对于打字慢的朋友来说。当然不光为影片加字幕,在其他领域,类似的逐字稿也是工作中避免不了的内容。比如写论文,如果内容中有访谈,就必须要附上逐字稿,又或者是会议的记录等等。本次使用基于Python3的AutoSub库对实时语音进行识别,然后再通过GoogleTranslation的在线API接口对语音识别后的内容进行翻译,这样就可以得到一份双语字幕(逐字稿),这里的双语不只针对国语+英语组合,也可以包含其他国家,包括小语种地区,非常方便。首先需要安装ffmpeg,这个软件在之前有过介绍:Python3利用ffmpeg针对视频进行一些操作,Win10用... Python算法之动态规划(Dynamic Programming)解析:二维矩阵中的醉汉(魔改版leetcode出界的路径数) https://v3u.cn/a_id_168 Sat, 25 Jul 2020 00:00:00 +0000 https://v3u.cn/a_id_168 现在很多互联网企业学聪明了,知道应聘者有目的性的刷Leetcode原题,用来应付算法题面试,所以开始对这些题进行“魔改”,比如北京某电商平台的这道题:有一个正方形的岛,使用二维方形矩阵表示,岛上有一个醉汉,每一步可以往上下左右四个方向之一移动一格,如果超出矩阵范围他就死了,假设每一步的方向都是随机的(因为他是醉的),请计算n步以后他还活着的概率。例如:输入矩阵大小2*2,起点(0,0),随机走出一步n=1输出0.5也就是有一半的几率还活着例如:输入矩阵大小3*3,起点(1,1),随机走出一步n=1输出1也就是百分之百还活着乍一看有点懵,但是提取关键字:二维矩阵、上下左右四个方向、矩阵范围、n步... 2020年是时候更新你的技术武器库了:Asgi vs Wsgi(FastAPI vs Flask) https://v3u.cn/a_id_167 Wed, 22 Jul 2020 00:00:00 +0000 https://v3u.cn/a_id_167 也许这一篇的标题有那么一点不厚道,因为Asgi(AsynchronousServerGatewayInterface)毕竟是Wsgi(WebServerGatewayInterface)的扩展,而FastAPI毕竟也是站在Flask的肩膀上才有了突飞猛进的发展,大多数人听说Asgi也许是因为Django的最新版(3.0)早已宣布支持Asgi网络规范,这显然是一个振奋人心的消息,2020年,如果你在Web开发面试中不扯一点Asgi,显然就有点落后于形势了。那么到底啥是Wsgi,什么又是Asgi,放心,不扯CGI,不扯各种抽象概念,简单粗暴理解:Wsgi是同步通信服务规范,客户端请求一项服务,并等... 上穷碧落下凡尘:Win10系统下基于Docker配置Elasticsearch7配合Python3进行全文检索交互 https://v3u.cn/a_id_166 Tue, 21 Jul 2020 00:00:00 +0000 https://v3u.cn/a_id_166 基于文档式的全文检索引擎大家都不陌生,之前一篇文章:使用Redisearch实现的全文检索功能服务,曾经使用Rediseach来小试牛刀了一把,文中戏谑的称Rediseach已经替代了Elasticsearch,其实不然,Elasticsearch作为老牌的全文检索引擎还并没有退出历史舞台,依旧占据主流市场,桃花依旧笑春风,阿里也在其ecs服务中推出了云端Elasticsearch引擎,所以本次我们在Win10系统中依托Docker来感受一下Elasticsearch的魅力。首先安装Docker,具体流程请参照:win10系统下把玩折腾DockerToolBox以及更换国内镜像源(各种神坑),... 利用DockerHub在Centos7.7环境下部署Nginx反向代理Gunicorn+Flask独立架构 https://v3u.cn/a_id_165 Fri, 17 Jul 2020 00:00:00 +0000 https://v3u.cn/a_id_165 上一篇文章:Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像,是在Win10简单玩了一下Docker的镜像打包,属实玩票,娱乐属性较高。要是想真刀真枪的在生产环境部署还得是Centos。本次使用Nginx反向代理Flask服务,为什么要加一层Nginx呢?因为Nginx可以直接处理静态文件请求而不用经过应用服务器,避免占用宝贵的运算资源,并且可以缓存静态资源,使访问静态资源的速度有效提高。同时它可以吸收一些瞬时的高并发请求,让Nginx先保持住连接(缓存http请求),然后后端慢慢消化掉这些并发。当然了,最重要的一点就是Nginx可以提... Docker在手,天下我有,在Win10系统下利用Docker部署Gunicorn+Flask打造独立镜像 https://v3u.cn/a_id_164 Thu, 16 Jul 2020 00:00:00 +0000 https://v3u.cn/a_id_164 书接上回,之前一篇:Win10环境下使用Flask配合Celery异步推送实时/定时消息(Socket.io)/2020年最新攻略,阐述了如何使用Celery异步推送Websocket消息,现在我们利用Docker将这个完整项目部署起来,为什么用Docker呢?原因很简单,这种容器技术可以将整个项目用单个容器装起来,仅仅只需要维护一个简单的配置文件就告诉电脑每次部署要把什么东西装进容器,甚至把这个过程自动化,部署流程就会变得简单、方便。简单理解就是Docker的镜像就类似《精灵宝可梦》中小智手里的精灵球,我们的项目就类似那些宠物小精灵,当我们开发完毕就可以利用DockerFile对项目进行打包... Win10环境下使用Flask配合Celery异步推送实时/定时消息(Socket.io)/2020年最新攻略 https://v3u.cn/a_id_163 Wed, 15 Jul 2020 00:00:00 +0000 https://v3u.cn/a_id_163 首先得明确一点,和Django一样,在2020年Flask1.1.1以后的版本都不需要所谓的三方库支持,即Flask-Celery或者Flask-Celery-Help这些库,直接使用Celery原生库即可。一般情况下,Celery被用来处理耗时任务,比如千篇一律的发邮件或者文件上传之类,本次使用Celery实时或者定时发送基于Websocket的消息队列,因为如果前端已经摒弃老旧的轮询策略,使用Websocket,后端则需要相应的配合Celery进行对持久化的Websocket链接主动推送消息,这种场景在生产环境中还是很常见的,但是网上却鲜有文章阐述,而Celery官方对此的说明是:Ifus... 让你的简历不落窠臼,精雕细镂写一份真正的技术简历(Python向) https://v3u.cn/a_id_162 Mon, 13 Jul 2020 00:00:00 +0000 https://v3u.cn/a_id_162 孔子云:食不厌精,脍不厌细。字面意思是:粮食越精致越好,肉类切得越细越好,而实际上强调的是做事情要细致、精益求精,孔夫子阐之未尽,写简历同样不厌精亦不厌细,在上一篇文章:秋季招聘季如何制作一款“秀色可餐”的简历?由ShareLatex和Python3打造中,阐述了如何制作一款漂亮的简历模板,但这只是“外在”,一份简历真正灵魂则在于“内涵”,如果内容与模板不匹配,那无异于金玉其外败絮其中,所以吸引招聘者的还得是内容。有道是:模板为王,内容为皇。所以本次我们来讨论一下到底怎么写一份技术简历。基本信息(Profile)求职者的基本信息是首先映入招聘者眼帘的,除了姓名、性别、手机、学历、邮箱这些最“基... 秋季招聘季如何制作一款“秀色可餐”的简历?由ShareLatex和Python3打造 https://v3u.cn/a_id_161 Wed, 08 Jul 2020 00:00:00 +0000 https://v3u.cn/a_id_161 秋招季还有两个月就到了,即所谓的“金九银十”。疫情因素导致市场环境不太理想,所以我们更应该未焚而徙薪,未雨而绸缪,提前做好准备,否则到了时候才临渴掘井、江心补漏那就真的来不及了,而找工作的第一步就是写简历,写简历的第一步就是选择一块好的简历模板。说起简历模板,大家一定不会陌生,随便在百度搜关键词“简历模板”,林林总总的会出现一大片,但是这些简历模板往往都会有一个共同点,就是太Low、“土味”重、没有时代感、味同嚼蜡,蜡都要顺着嘴角流下来了,以一个求职者的视角来看待这些简历都会无奈心烦,更别说招聘者了。所以新时代的简历应该具备独特性、新颖、与众不同并且不落窠臼。这里推荐使用ShareLatex,... Win10系统下安装编辑器之神(The God of Editor)Vim并且构建Python生态开发环境(2020年最新攻略) https://v3u.cn/a_id_160 Sat, 04 Jul 2020 00:00:00 +0000 https://v3u.cn/a_id_160 众神殿内,依次坐着Editplus、Atom、Sublime、Vscode、JetBrains家族、Comodo等等一众编辑器界的大佬们,偌大的殿堂内几无立锥之地,然而在殿内的金漆雕龙宝座上,端坐着一位睥睨众生的王者,那就是被称之为编辑器之神的Vim,作为一个有着30余年历史的老牌神器,没有任何编辑器可以和它媲美,其时江湖有云:神编Vim不会玩,纵称大神也枉然。Vim在1976年发布,奉行Unix传统的“Doonethinganddoitwell”哲学,每个程序只做一件事但求做到最好,通过程序之间的配合得到强大的功能,其两种模式(Normal/Insert)的玄妙变换,幻化出各种组合的炫酷用法... 当我们谈论算法我们在谈论什么:由疫情核酸检测想到的分治算法(Divide-and-Conquer) https://v3u.cn/a_id_159 Mon, 29 Jun 2020 00:00:00 +0000 https://v3u.cn/a_id_159 北京的疫情一波未平一波又起,由此看来,战“疫”将是一场旷日持久的战争,绝不能掉以轻心、轻易言胜。病毒随时都会死灰复燃,以生命为代价换来的经验教训值得我们每一个人久久深思。笔者所在的小区也开始组织居民批量进行核酸检测,本以为会是一幅摩肩接踵,水泄不通的场景,却出人意料的井然有序、有层有次,效率非常高。原来检疫部门采取了一种特别的策略:每五个人用一组试剂盒,进行快筛,分分钟搞定了几百人的社区检测。这里解释一下病毒核酸检测的原理,检测人员提取小区居民的鼻腔拭子或者咽拭子(就是用一根棉签在咽喉处或者鼻腔深处刮取一些分泌物),然后将该棉签放入试剂盒,以病毒独特的基因序列检测靶标,通过PCR扩增,使我们选... 后端Python3+Flask结合Socket.io配合前端Vue2.0实现简单全双工在线客服系统 https://v3u.cn/a_id_158 Wed, 24 Jun 2020 00:00:00 +0000 https://v3u.cn/a_id_158 在之前的一篇文章中:为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统,详细介绍了websocket协议以及结合Django如何实现各种功能,本次我们尝试采用Socket.io这个库和Flask来配合使用,完成一个简易的在线客服聊天系统,看看二者有什么区别。Socket.IO就是一个封装了Websocket、基于Node的JavaScript框架,包含client的JavaScript和server的Node(现在也支持python,golang等语言)。其屏蔽了所有底层细节,让顶层调用非常简单,另外,Socket.IO还有一个非常重要的好处。... Python3+Django2集成PayPal(贝宝)跨境支付三方接口以及订单查询和退款业务 https://v3u.cn/a_id_157 Sun, 14 Jun 2020 00:00:00 +0000 https://v3u.cn/a_id_157 如果您所在的公司涉及外贸或者跨境支付业务,那一定听说过大名鼎鼎的PayPal,总的来说,PayPal在跨国贸易里的优势还是比较大的,作为一种外贸支付方式,目前在国际贸易支付服务中倍受亿万用户追捧,是全球商户和消费者最受欢迎的电子支付方式之一,在跨境交易中有着超过90%的卖家和超过85%的买家认可并正在使用PayPal电子支付业务。当然,PayPal国际业务体量如此惊人,肯定不是毫无原因的。PayPal支付的优势就是其业务网络遍布全球。目前PayPal的庞大网络覆盖了全球200多个国家,可提供20多种语言服务,并接受100多种货币付款和56种货币提现。同时,还允许在账户中持有25种货币余额。换句... Win10系统下搭建Go lang开发环境更换国内源并且体验宇宙最快框架Iris https://v3u.cn/a_id_156 Fri, 12 Jun 2020 00:00:00 +0000 https://v3u.cn/a_id_156 最近有同学开始尝试接触Golang,拥抱新技术永远都会是一个好习惯,之前的一篇文章介绍了如何在Macos系统下配置Golang开发环境,这次我们在Win10系统下进行配置,并且更换国内的安装源,最后再和“全宇宙最快的web框架”--Iris亲密接触一下,对于Iris可能很多朋友并不熟悉,一般Golang在web开发领域相对著名的框架比如Beego或者Gin都名声在外,这里推荐Iris的原因也并不是因为它源于古希腊女神(彩虹女神)的炫酷名字,而是因为它在goroutine的加持下强大的Gohttpserver的性能。首先进入网站下载win10安装包:https://studygolang.com... 说起分布式自增ID只知道UUID?SnowFlake(雪花)算法了解一下(Python3.0实现) https://v3u.cn/a_id_155 Thu, 11 Jun 2020 00:00:00 +0000 https://v3u.cn/a_id_155 但凡说起分布式系统,我们肯定会对一些海量级的业务进行分拆,比如:用户表,订单表。因为数据量巨大一张表完全无法支撑,就会对其进行分库分表。但是一旦涉及到分库分表,就会引申出分布式系统中唯一主键ID的生成问题,当我们使用mysql的自增长主键(auto_increment)时,充分感受到了它的好处:整个系统ID唯一,ID是数字类型,而且是趋势递增的,ID简短,查询效率快,在分布式系统中显然由于单点问题无法使用mysql自增长了,此时需要别的解决方案来支撑分布式业务。首先映入脑海的一定是uuid>>>importuuid>>&am... Python3+Django2.0.4三方社交账号接入Gitee.com(码云) https://v3u.cn/a_id_154 Mon, 01 Jun 2020 00:00:00 +0000 https://v3u.cn/a_id_154 码云大家都耳熟能详了,国内版的github,其三方登录的接入方式也完全照搬github经典的OAuth2逻辑。首先注册码云的账号,随后在应用管理页面https://gitee.com/oauth/applications,新建三方应用:这里创建之后可以获取到clinet_id和client_screct图片logo可以不上传,但是应用域名和回调网址必须填写,需要注意的是必须要写完整网址也就是必须带上http或者https随后的流程可以参照官方文档:https://gitee.com/api/v5/oauth_doc#/第一步,通过浏览器或Webview将用户引导到码云三方认证页面上(GET请求... Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略) https://v3u.cn/a_id_153 Tue, 26 May 2020 00:00:00 +0000 https://v3u.cn/a_id_153 首先明确一点,celery4.1+的官方文档已经详细说明,该版本之后不需要引入依赖django-celery这个库了,直接用celery本身就可以了,就在去年年初的一篇文章python3.7.2+Django2.0.4使用django-celery遇到的那些坑,中提到的一些bug,在今年早已不复存在,所以技术更新频率越来越快,本文详细阐述用新版Celery(4.4.2)来实现。关于celery的底层原理这里就不赘述了,简单的流程图就可以一图以蔽之安装对应的库pip3installcelery==4.4.2pip3installeventlet==0.25.2pip3installDjango=... Python3利用Twilio(国际)以及腾讯云服务(国内)免费发送手机短信 https://v3u.cn/a_id_152 Mon, 25 May 2020 00:00:00 +0000 https://v3u.cn/a_id_152 短信服务验证服务已经不是什么新鲜事了,但是免费的手机短信服务却不多见,本次利用Python3.0基于Twilio和腾讯云服务分别来体验一下国际短信和国内短信接口。首先,注册Twilio:https://www.twilio.com/注册成功后,获取ACCOUNTSID和AUTHTOKEN,一会要用到安装依赖的库pip3installtwilio随后编写发送脚本#导包导入客户端fromtwilio.restimportClient#定义短信sidaccount_sid='你的sid'#定义秘钥auth_token='你的秘钥'#定义客户端对象client=Client(account_sid,a... 如何应对外包公司(文思海辉)的Python后端面试 https://v3u.cn/a_id_151 Wed, 06 May 2020 00:00:00 +0000 https://v3u.cn/a_id_151 最近春招如火如荼,我接触到的几位同学也纷纷去市场里试了试水,不得不说由于疫情的影响,导致目前中等水平的开发者择业有了些许困难,毕竟不是所有人都能去一二线的大厂,有的时候海浪过大,我们不得不收起风帆,卧薪尝胆,入港蛰伏,所以我们可以把目光投向一些相对要求不是特别高的岗位,比如外包岗,当然了业内其实对外包公司有一些偏见,评价不高。客观的说,外包公司确实有一些不尽如人意的地方,但是其实也有一些好处不能忽略:比如接触的项目多,接触的人多,积累的经验快,适合想积累经验的人,同时有进入甲方的机会,如果业务做得不错,有一定机会能进入甲方公司,一般甲方如果是大厂的话直接进不去但通过外包进去后有一定概率能转甲方... 流量如何才能变现?实际测试谷歌广告联盟(Google Adsense)的广告效果以及如何优化相关代码 https://v3u.cn/a_id_150 Mon, 04 May 2020 00:00:00 +0000 https://v3u.cn/a_id_150 2010年,谷歌正式退出中国市场,无数人扼腕叹息,如今十年过去了,谷歌还有两条重要的业务线并没有完全退出,一个是页面统计业务(GoogleAnalytics),另外一个则是谷歌广告联盟(GoogleAdsense),说起广告联盟,玩儿过网站的朋友应该并不陌生,对于中小型站长、博主来说,要想通过网站的流量取得一些收入,除了和一些线下线上厂商谈包月广告位,更多的可能就是投放广告联盟广告了。但随着网络广告的不断发展,广告形式有了很大的变化,出现了CPC、CPS、CPA、CPV等众多广告类型。CPC—英文全称CostPerClick;CostPerThousandClick-Through。CPC是一... win10系统下把玩折腾DockerToolBox以及更换国内镜像源(各种神坑) https://v3u.cn/a_id_149 Mon, 20 Apr 2020 00:00:00 +0000 https://v3u.cn/a_id_149 2020年,这年头如果出去面试和面试官不聊几句Docker,都不好意思说自己是搞开发的。之前玩儿Docker都是在Mac系统里,没碰到过什么大问题,不过Docker这种容器技术本身就对Unix内核的系统天生友好,毕竟人家身体里流淌着linux的纯血基因,但是Docker对于Windows系统就显得不那么平易近人了,对待win10用户就有点矫情了,除了要求必须是64位系统以外,还必须要求系统版本是专业版,而家庭版用户想要一亲芳泽,还得借助Dockertoolbox这样的工具,所以这里作为win10家庭版用户的我们就依托dockertoolbox来感受一下docker的魅力。首先要明确一点dock... Python3.7将普通图片(png)转换为SVG图片格式并且让你的网站Logo(图标)从此”动”起来 https://v3u.cn/a_id_148 Sat, 18 Apr 2020 00:00:00 +0000 https://v3u.cn/a_id_148 在之前的几篇文章中,介绍了业界中比较火爆的图片技术SVG(ScalableVectorGraphics),比如Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript来打造属于自己的个性化社交分享系统,我们可以使用svg来打造精美炫酷的分享小图标(icon),这一次我们使用python来将普通的静态的网站logo图片转换为带路径(path)的svg图片,这样就可以让网站logo能够变成动态的,作为一名不折腾不舒服斯基,一枚炫酷自带动画的网站logo自然能够满足我们的折腾欲,同时亦能击中我们的虚荣心。首先第一步,先要将静态图做一步转换,以本站的logo作为例子,原... Python3.7配合Django2.0来调用钉钉(dingding)在线api实时监测员工考勤打卡情况 https://v3u.cn/a_id_147 Sun, 12 Apr 2020 00:00:00 +0000 https://v3u.cn/a_id_147 新冠疫情期间,大多数公司为了避免交叉感染都或多或少的采用了远程办公的方式,这显然是一个明智的选择,基本上钉钉(dingding)作为一个远程办公平台来用的话,虽然差强人意,但是奈何市面上没有啥更好的选择,矬子里拔将军,也还是可以凑合用的,不过远程办公有个问题,就是每天需要检查员工的考勤,居家办公虽然灵活,但是大家究竟有没有办公,则是另外一回事,钉钉提供的解决方案就是考勤在线打卡功能,但是检查出勤钉钉在移动端就有点费劲,需要在钉钉app里点击至少5次,还不能实时刷新,pc端的钉钉oa系统做的更烂,还不如移动端来得方便,另外如果你在一家上千人的企业里,这家企业有大大小小几十个部门,你又非常倒霉的担... 基于阿里云直播实现视频推流(ffmpeg)/拉流(Django2.0)以及在线视频直播播放(支持http/https)功能 https://v3u.cn/a_id_146 Wed, 08 Apr 2020 00:00:00 +0000 https://v3u.cn/a_id_146 由于5g网络的光速推广,视频业务又被推上了风口浪尖,在2019年初我们还在谈论照片,短视频等关键字,而进入2020年,我们津津乐道的就只有视频,视频,还是视频,普通人拿起手机做直播早已不是奢望,去年我曾经写了一篇文章:利用Docker挂载Nginx-rtmp(服务器直播流分发)+FFmpeg(推流)+Vue.js结合Video.js(播放器流播放)来实现实时网络直播,这篇攻略依托docker的便捷性,自主搭建了一个网络直播平台,只不过受限于个人服务器的带宽和配置,如果真的做起万人直播业务还是力不从心,所以本次我们尝试使用套路云,不好意思说错了,是阿里云(阿里云的套路是真的顶),我们利用阿里云来... 一抹凝重的灰色(css3)滤镜(filter)彰显仪式感,整站去色(黑白色)以示哀悼 https://v3u.cn/a_id_145 Mon, 06 Apr 2020 00:00:00 +0000 https://v3u.cn/a_id_145 2020年4月4日,几乎所有主流媒体的线上网站网易、搜狐、百度等的配色方案统一切换为灰色,比以往多了一分肃穆,往日的清明节只是一个不痛不痒的三日假期而已,而今年的清明注定不同,原因有三:一是临近清明这一传统哀思、祭奠先辈的节日。二是为国家事业牺牲的先烈,包括近期西昌救火及因新冠病毒牺牲的英雄们表示致敬。三是灰色给人稳重安定感,灰色是我们因哀思的一种沉积,更是蕴意着我们沉积过后,秉承先烈意志的一种奋发有为。当然了,也有的人认为这不过是一种形式主义,形式大于内容,如果不切换为灰色滤镜配色,也并不代表内心没有寄托哀思,其实呢,人生是需要仪式感的,人之以所以能为人,就是人类是有情感,智力,会制造和使用... 回忆与前端大神司徒正美(钟钦成)的二三事与大龄程序员猝死问题 https://v3u.cn/a_id_144 Fri, 03 Apr 2020 00:00:00 +0000 https://v3u.cn/a_id_144 新冠病毒肆虐之际惊闻噩耗,前端大神司徒正美因病去世,这是前端界的损失,也是整个业界的损失,他在前端框架方面造诣颇深,涉猎多种语言与设计模式,如今突然撒手而去,令人唏嘘,我们只能期望他是遁入了二次元世界,算法泯灭,精神的归精神,能量的归能量。我与司徒正美相识大概是在8年前,其时我刚刚入职优酷移动端团队,除了接手后端接口业务还要负责部分后台大CMS系统的功能开发,没错,当时优酷后台大CMS系统是由RubyonRails来驱动的,我入职之后还一度非常纳闷,为啥接口用tornado而后台居然用Rails,在晨会的时候还差点当着当时优酷移动端老大陈翌的面质疑这个问题。而面试官在面试的时候也对Ruby只字... Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript来打造属于自己的个性化社交分享系统 https://v3u.cn/a_id_143 Thu, 02 Apr 2020 00:00:00 +0000 https://v3u.cn/a_id_143 每一个应用程序,其实都会有分享的需求,比如一键分享一篇文章或者一些活动到微博或者微信亦或者是twitter等社交平台,因为人类是社交动物,而社交分享能够满足马斯洛需求金字塔情感和归属的需求以及受尊重的需求。另外网页的社交分享功能不仅可以满足阅读者,同时,对于网络应用本身,也可以相应的增加该网站的外部链接,比如微博豆瓣等线上粘性用户非常多的社交平台,如果是twitter或者facebook则可以带来一部分来自于国外的流量,对于网络平台来说,这样做即可以分发流量又可以引流导流,一箭双雕,一举而多得。但是如果使用普通的按钮或者图片来制作分享按钮未免太过单调,这里推荐使用iconfront,那么ico... python3.7爬虫:使用Selenium带Cookie登录并且模拟进行表单上传文件 https://v3u.cn/a_id_142 Sat, 28 Mar 2020 00:00:00 +0000 https://v3u.cn/a_id_142 前文再续,书接上一回,之前一篇文章我们尝试用百度api智能识别在线验证码进行模拟登录:Python3.7爬虫:实时api(百度ai)检测验证码模拟登录(Selenium)页面,这回老板又发话了,编辑利用脚本虽然登录成功了,但是有一些表单还是得手动上传,希望能改造成自动化流程。说实话,没毛病,机器能干的事,就没必要麻烦人了,拿人钱财,替人办事,开干。首先理清思路,没必要每次登录都去实时监测识别登录页面的验证码,而是反过来想,当我们登录成功了,必然在cookie里留下标识符比如token之类的,那么我们直接带着这些cookie去请求页面,就可以在cookie有效期内随时登录这个系统了:https:... Python3.7+Django2.0.4配合Mongodb打造高性能高扩展标签云存储方案 https://v3u.cn/a_id_141 Mon, 23 Mar 2020 00:00:00 +0000 https://v3u.cn/a_id_141 书接上回,之前有一篇文章提到了标签云系统的构建:Python3.7+jieba(结巴分词)配合Wordcloud2.js来构造网站标签云(关键词集合),但是这篇只是浅显的说明了一下如何进行切词以及前端如何使用wordcloud2.js进行前端展示,本次主要讨论下标签分词切出来之后,如何进行存储。假设我们目前文章-标签体系的需求是这样:每篇文章都具有唯一的标题、描述以及URL。每篇文章都具有一个或多个标签。每篇文章都具有作者的名称,以及喜欢每篇文章都有用户的评论,用户名、消息、日期时间以及评论的喜欢度。每篇文章都可以有0个或多个评论。那么如果使用关系型数据库来设计,比较简单的设计方案可以是这样:... python3.7+Django2.0.4配合vue.js2.0实现又拍云(upyun.cm)存储的异步拖拽文件上传功能 https://v3u.cn/a_id_140 Sat, 21 Mar 2020 00:00:00 +0000 https://v3u.cn/a_id_140 在之前的几篇文章里阐述过关于七牛云云存储文件上传的一些操作:python3.7+Vue.js2.0+Django2.0.4异步前端通过api上传文件到七牛云云端存储;使用Tornado配合七牛云存储api来异步切分上传文件,得益于七牛云完备的文档体系,没遇到什么大坑,现在来介绍一下业内和七牛云齐名的云服务平台又拍云,本站的全球cdn服务就是使用又拍云:关于又拍云免费cdn全网加速服务的长期评测(各种踩坑),因为又拍云的免费流量比七牛云多出大概5g左右,当然了得加入一个所谓的又拍云联盟:https://www.upyun.com/league,本次文章记录一下使用python3.7+Django... 利用Css3样式属性Cursor来更换自定义个性化鼠标指针(光标) https://v3u.cn/a_id_139 Tue, 17 Mar 2020 00:00:00 +0000 https://v3u.cn/a_id_139 现而今,我们纵向的回顾整个大前端的历史,不难发现,人们对前端的审美要求越来越高,越来越严苛,与此同时,人们对追求美的体验是也极致的,从理性到感性,从平面到几何,从现实到虚拟,所以从某种角度来说,作为前端工程师,他们所追求的东西往往和人类软件核心理念南辕北辙,因为人类的终极追求是个性,绝不是共性,换句话说,大家都一样就不好玩儿了。那么作为web前端,追求个性的手段手段之一就是鼠标指针的更换,早在css2时代,Cursor属性就可以对象鼠标指针光标进行控制,可以根据自身需要选择设置鼠标指针样式,代码如下:<head><title>cursor... Python3.7+jieba(结巴分词)配合Wordcloud2.js来构造网站标签云(关键词集合) https://v3u.cn/a_id_138 Sat, 14 Mar 2020 00:00:00 +0000 https://v3u.cn/a_id_138 其实很早以前就想搞一套完备的标签云架构了,迫于没有时间(其实就是懒),一直就没有弄出来完整的代码,说到底标签对于网站来说还是很重要的,它能够对一件事物产生标志性描述,通常都会采用相关性很强的关键字,这样不仅便于检索和分类,同时对网站的内链体系也是有促进作用的。最近疫情的关系一直在家里呆着,闲暇时和一些学生聊天的时候,人家问:你说你一直在写博客,那你到底在写一些什么内容的文章呢?我竟然一时语塞,于是搞出来下面这种的标签云,下回被问同样的问题时,就可以展示一下了。和传统的在线博客标签云最大的区别在于,这些标签并不是我手动打上去的,因为时间有限,每写一篇文章就自己提取很多关键字出来,还得挨个入库,这... 使用Python3.7+Tornado5.1集成新浪微博三方登录(无需企业资质) https://v3u.cn/a_id_137 Wed, 11 Mar 2020 00:00:00 +0000 https://v3u.cn/a_id_137 新浪微博:山寨版的twitter,各种粉丝的集散地,天朝人民的最爱,基本上网民都人手一个微博账号,所以使用新浪微博账号进行三方登录来提高用户登录体验就显得尤为重要,本次使用Python3+Tornado5来集成微博登录,记录一下,坑还是不少的。首先注册微博开放平台:https://open.weibo.com/选择微链接-》网站接入=>立即接入新建一个应用应用创建成功后,会立即跳转审核页面,需要填写一些资质,用来进行审核,其实这些审核字段都不用搭理,应用压根就不需要通过审核只需要拿到appkey和appsecret即可,然后立即点击高级信息,填写回调网址需要注意一点,目前新浪对1... 使用Python3.7配合协同过滤算法(base on user,基于人)构建一套简单的精准推荐系统(个性化推荐) https://v3u.cn/a_id_136 Tue, 10 Mar 2020 00:00:00 +0000 https://v3u.cn/a_id_136 时至2020年,个性化推荐可谓风生水起,Youtube,Netflix,甚至于Pornhub,这些在互联网上叱咤风云的流媒体大鳄无一不靠推荐系统吸引流量变现,一些电商系统也纷纷利用精准推荐来获利,比如Amzon和Shopfiy等等,精准推荐用事实告诉我们,流媒体和商品不仅仅以内容的传播,它还能是一种交流沟通的方式。那么如何使用python语法构造一套属于我们自己的推荐系统呢,这里推荐协同过滤算法,它隶属于启发式推荐算法(Memory-basedalgorithms),这种推荐算法易于实现,并且推荐结果的可解释性强,其中我们使用基于用户的协同过滤(User-basedcollaborativef... Mac os:将Homebrew的下载源换成国内镜像增加下载速度(阿里云镜像) https://v3u.cn/a_id_135 Sun, 08 Mar 2020 00:00:00 +0000 https://v3u.cn/a_id_135 可能所有的mac用户都遇到过下面这种操蛋情况,在网络环境不太好的时候,你满怀期望的敲下brewinstall应用名称,静静的等待安装结果时,Homebrew在Updating的地方卡死了,真是令人沮丧,当然了,这不是Homebrew的错,Homebrew是一款MacOS平台下的软件包管理工具,拥有安装、卸载、更新、查看、搜索等很多实用的功能。简单的一条指令,就可以实现包管理,而不用你关心各种依赖和文件路径的情况,十分方便快捷。Homebrew主要分两部分:gitrepo(位于GitHub)和二进制bottles,这两个网站在国内访问起来都慢的可以。接下来操作一下如何使用阿里云来加速这两部分的下... Python3.7爬虫:实时api(百度ai)检测验证码模拟登录(Selenium)页面 https://v3u.cn/a_id_134 Thu, 05 Mar 2020 00:00:00 +0000 https://v3u.cn/a_id_134 今天有同学提出了一个需求,老板让自动登录这个页面:https://www.dianxiaomi.com/index.htm,毫无疑问登录页面基本都会有在线验证码,要破解这个验证码当然不是啥难事,诚然可以自己去训练模型,然而大量的训练集测试数据还得自己去打码,说白了,不值当,有现成的接口可以用,何乐而不为,于是我们向万恶的百度伸出了魔爪。首先申请百度api开发平台:https://cloud.baidu.com/随后在人工智能-》文字识别模块里建立一个应用建立成功后,会分配给你一个key和secret只不过这个接口免费版的每秒最多只能请求两次,一天有500次的请求机会这里推荐使用高精度的接口,普... 使用Python3.7+Django2.0.4配合vue.js2.0的组件递归来实现无限级分类(递归层级结构) https://v3u.cn/a_id_133 Tue, 03 Mar 2020 00:00:00 +0000 https://v3u.cn/a_id_133 所谓的无限极分类是啥?其实简单点说就是一个人类可以繁衍出多个后代,然后一个后代又可以分另外多个后代这样无限繁衍下去(可以想象神奇动物在哪里2里面莱斯特兰奇的家族族谱),就好象linux系统你可以新建一个文件夹,然后在这个文件夹里又可以建一些个文件夹,在文件夹底下还可以建一些文件夹一样,随后使用tree命令就可以查看文件夹目录层级。那么这种层级结构也成为树结构在日常的开发需求里也是很常见的,比如美多商城系统的商品分类,课程的目录章节,以及以及论坛里的帖子回复等等,本次我们后台利用Django来写一个能够返回层级结构数据的接口,接口将该数据以json的形式返回前端,前端使用vue的组件递归来展示数... 使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略) https://v3u.cn/a_id_132 Sat, 29 Feb 2020 00:00:00 +0000 https://v3u.cn/a_id_132 最近疫情比较严重,很多公司依靠阿里旗下的办公软件钉钉来进行远程办公,当然了,钉钉这个产品真的是让人一言难尽,要多难用有多难用,真的让人觉得阿里的pm都是脑残才会设计出这种脑残产品,不过吐槽归吐槽,该用还得用,虽然钉钉别的功能很鸡肋,但是机器人这个功能还是让人眼前一亮,属于比较极客的功能,它可以将第三方服务的信息聚合到钉钉群中,实现信息的自动化同步,例如:通过聚合Github、Gitlab等源码管理服务,实现源码更新同步;通过聚合Trello、JIRA等项目协调服务,实现项目信息同步;同事,支持Webhook协议的自定义接入,支持更多可能性,例如:将运维报警提醒、自动化测试的结果报告提醒、工作、... win10+sublime3配置python3.7和vue2.0前后端分离项目以及sublime3最新注册码破解 https://v3u.cn/a_id_131 Wed, 26 Feb 2020 00:00:00 +0000 https://v3u.cn/a_id_131 最近一直在用mac下的虚拟机运行win10系统,由于在线人数过多,直播授课的时候使用vscode的时候内存暴涨,于是考虑切换回sublime3,毕竟编辑器要比ide要轻量的多,在此记录一下整个流程。首先下载,sublime3软件安装包:https://www.sublimetext.com/安装好后,安装python3.7,下载地址:https://www.python.org/,由于我之前已经安装过所以不赘述了,没有安装过的同学别忘了安装好以后在win10下要配置环境变量编辑器和Python全都安装完成后,就是在sublime内配置python的开发环境1:配置编译环境打开sublime,依... 使用python3.7+Vue.js2.0+Django2.0.4异步前端通过api上传文件到七牛云云端存储 https://v3u.cn/a_id_130 Mon, 24 Feb 2020 00:00:00 +0000 https://v3u.cn/a_id_130 之前一篇文章是通过普通js+tornado来上传七牛云:使用Tornado配合七牛云存储api来异步切分上传文件,本次使用vue+django来进行异步上传,因为毕竟vue.js才是目前的前端的主流。首先注册七牛云:qiniu.com,进入你的七牛云账号,打开秘钥页,记录下你的ak和sk随后新建一个云存储空间,这里空间名字一定要记录一下:此时我们用django写一个获取uptoken的接口,使用drf框架来写,注意别忘了安装七牛云扩展pipinstallqiniu#七牛云tokenfromqiniuimportAuthclassQiNiu(APIView):defget(self,reques... 在Centos7上将Apache(httpd)切换为Nginx的过程记录 https://v3u.cn/a_id_129 Sun, 16 Feb 2020 00:00:00 +0000 https://v3u.cn/a_id_129 近期要上线几个基于tornado+motor的移动端接口服务,众所周知,Apache和tornado天生八字不合,尤其apache对python3尤为的不友好,tornado和nginx才是木石前盟,另外由于apache目前系统占用确实比较高,不光进程数多,httpd竟然占用了200多M,太庞大,决定换为较轻量级,高并发的nginx。如上图所示:系统也就2g,除了mysql占用的100M,httpd占了1/2还多首先由于apache和nginx默认都是监听80端口,所以首先要停止apache服务(为了保险起见,只是停止服务,不要卸载)systemctlstophttpd第二步,安装nginx#... 关于又拍云免费cdn全网加速服务的长期评测(各种踩坑) https://v3u.cn/a_id_128 Sun, 26 Jan 2020 00:00:00 +0000 https://v3u.cn/a_id_128 之前一篇文章阐述了如何在前端进行网站优化:具体谈谈如何优化前端性能的总结,其中一条重要的优化手段是cdn加速,所谓cdn加速就是采用更多的缓存服务器(CDN边缘节点),布放在用户访问相对集中的地区或网络中。当用户访问网站时,利用全局负载技术,将用户的访问指向距离最近的缓存服务器上,由缓存服务器响应用户请求在写那篇文章的时候,我本人还未实际使用过cdn加速,也就是说还停留在理论阶段,正所谓实践才是检验真理的唯一标准,本次我们就实际测试一下cdn加速,只不过这次我们使用又拍云的服务,又拍云每个月可以为用户免费提供15g的流量,比七牛云要多出5g,同时之前的一篇文章我们已经使用七牛云用来存储静态图片... 简短截说阐述redis中事务的使用 https://v3u.cn/a_id_127 Sun, 12 Jan 2020 00:00:00 +0000 https://v3u.cn/a_id_127 我们知道,在关系型数据库中,比如mysql,如果要使用事务,首先向数据库服务器发送BEGIN,然后执行各个相互一致的写操作和读操作,最后,用户可以选择发送COMMIT来确认之前所做的修改,或者发送ROLLBACK来放弃那些修改。同样,Redis中也有简单的方法处理一连串相互一致的读操作和写操作。首先是以MULTI命令开始事务,后续跟着一连串命令,最后以EXEC结束事务或者以DISCARD命令撤销所有命令并结束事务。但是redis事务和mysql事务最重要的一点区别是,redis事务不管指令正确或者错误,都会执行,中途遇见错误指令也会继续执行后面的指令,Redis并没有像mysql那样的事务回滚... 使用python3.7和opencv4.1来实现人脸识别和人脸特征比对以及模型训练 https://v3u.cn/a_id_126 Thu, 02 Jan 2020 00:00:00 +0000 https://v3u.cn/a_id_126 OpenCV4.1已经发布将近一年了,其人脸识别速度和性能有了一定的提高,这里我们使用opencv来做一个实时活体面部识别的demo首先安装一些依赖的库pipinstallopencv-pythonpipinstallopencv-contrib-pythonpipinstallnumpypipinstallpillow需要注意一点,最好将pip设置国内的阿里云的源,否则安装会很慢win10在用户目录下创建一个pip文件夹,然后在pip文件夹内创建一个pip.ini文件,文件内容如下[global]trusted-host=mirrors.aliyun.comindex-url=http://... 基于Vue.js2.6结合h5来实现视频播放画中画技术(Picture-in-Picture) https://v3u.cn/a_id_125 Wed, 25 Dec 2019 00:00:00 +0000 https://v3u.cn/a_id_125 在开发基于vue.js的在线视频教育平台的时候,我们会注意一个小问题,就是如果用户在观看播放视频的同时,也会往下拖动窗口浏览一些评论,这样视频就会被滚动条覆盖,导致用户无法在浏览评论的同时观看视频,同理,如果想边刷微博边追剧怎么办?想边聊微信边看球赛怎么办?目前我们可以用h5的技术来解决这个问题,支持HTML5<video>播放时候Picture-in-Picture,也就是俗称的画中画技术,也就是很多视频网站看评论时候,播放视频变小挂在右下角的这种交互技术。先看效果:可以看到,当触发了画中画特效,网站右下角就会出现一个小型的视频播放器,它能够浮动跟踪于窗口,这样就... 使用Django2.0.4集成钉钉第三方扫码登录 https://v3u.cn/a_id_124 Sat, 21 Dec 2019 00:00:00 +0000 https://v3u.cn/a_id_124 钉钉作为阿里旗下的一款免费移动通讯软件,受众群体越来越多,这里我们使用Django来集成一下钉钉的三方账号登录,首先注册钉钉开发平台:https://open-dev.dingtalk.com/在移动应用中选择登录创建一个网站应用,其中有用的信息是appid,appsecret,还有回调网址随后,查看官方文档,查看如何构造登录url:https://ding-doc.dingtalk.com/doc#/serverapi2/kymkv6这里我们用django的视图来操作#构造钉钉登录urldefding_url(request):appid='dingoaukgkwqknzjvamdqh're... 使用Tornado配合七牛云存储api来异步切分上传文件 https://v3u.cn/a_id_123 Sun, 15 Dec 2019 00:00:00 +0000 https://v3u.cn/a_id_123 之前写了几篇关于FastDfs分布式存储的文章:python3.7.3操作FastDfs来进行文件操作,其实市面上关于云存储的第三方服务比比皆是,最著名的无疑就是七牛云存储,本次我们将演示用tornado配合七牛云来进行文件的云存储操作。在做七牛云的文件上传时,很多人有一个误区,就是以为是前端先上传到后台服务器,然后后台服务器再将文件上传到七牛云,这个逻辑本身没有问题,但是会遇到一个问题,如果是后台对接七牛,出一个接口,前端调用接口,先将图片传到后台,然后后台再上传七牛云,用的过程中发现,文件小的情况下还好,文件一旦到了几十兆甚至几百兆的时候就很慢,前端上传图片到后台需要一定时间,后端上传到七... 为你的网站加上live2d的动态小挂件,博君一晒 https://v3u.cn/a_id_122 Thu, 12 Dec 2019 00:00:00 +0000 https://v3u.cn/a_id_122 喜欢二次元的朋友一定对大名鼎鼎的live2d技术并不陌生,live2D是一种应用于电子游戏的绘图渲染技术,技术由日本Cybernoids公司开发,通过一系列的连续图像和人物建模来生成一种类似三维模型的二维图像。可以看到本站右下角出现了一只可爱的小喵可以看到这只猫会跟着你的鼠标运动,有着伪3D的感觉,这种技术的核心就是明明是2D平面设计风格,却有3D行为交互的效果就是live2d值得一提的是Live2D游戏也风靡一时,比较著名的有《梦幻俱乐部》(DREAMCCLUB),其在android端首次使用live2d技术,可以说有着里程碑的意义,得到了业界的一致好评。live2d官方提供了很多平台的SD... 尝试开发微信公众号消息推送功能并且和小程序关联 https://v3u.cn/a_id_121 Sun, 10 Nov 2019 00:00:00 +0000 https://v3u.cn/a_id_121 之前写了几篇关于微信小程序的开发实践,总的来说没啥难度,感兴趣的请移步:使用Mpvue配合Weui开发面试题题库微信小程序,并且发布到正式环境,这一次我们来尝试开发一下微信公众号,那么公众号和小程序到底有什么区别呢?首先定位不同公众号服务于营销与信息传递,小程序面向产品与服务。公众号主要用于信息的传递实现人与信息的连接,借助H5能够实现简单的交互,主要以营销和信息传递为主简单的服务为辅,而小程序从功能上与公众号有严格区分(不支持关注、消息推送等营销手段),一方面使得产品与服务不至于淹没在公众号营销信息中,另一方支持公众号、朋友圈、群与小程序之间的互动与导流,使得开发者专心做产品与服务,从而为微... 在半小时内从无到有开发并调试一款Chrome扩展(Chrome插件/谷歌浏览器插件) https://v3u.cn/a_id_120 Tue, 05 Nov 2019 00:00:00 +0000 https://v3u.cn/a_id_120 就在不久之前,我们目前这个毕业班的班长那日同学和我说,他正在公司开发Chrome扩展,看起来很高大上的技术,实际开发却非常简单,这引起了我非常浓厚的兴趣,正所谓技不压身,检验自身技术的手段之一就是拥抱新事物,这一次我们尝试在半小时内开发一款Chrome扩展,因为之前我们做了一个微信小程序的在线面试题题库的项目,所以正好利用这个题库将面试题平移到Chrome扩展上面。Chrome插件其实和一个普通web应用一样都是由html+css+js经过zip打包组成的,插件可以使用Chrome提供的浏览器API,增强浏扩展览器的功能。Chrome插件通常是.crx后缀的文件,通过谷歌网上应用商店下载或者在... 关于微信小程序体验版获取不到openId的问题 https://v3u.cn/a_id_119 Fri, 01 Nov 2019 00:00:00 +0000 https://v3u.cn/a_id_119 我们知道openid是微信用户验证的重要标识,支付功能严重依赖这个东西,之前我们做微信支付的时候是通过在微信客户端直接调用官方接口,通过传code参数来调用,下面这样getOpenId(){//获取用户的openidlet_this=this;wx.login({success(res){if(res.code){//发起网络请求wx.request({url:'https://api.weixin.qq.com/sns/jscode2session',data:{appid:appId,//开发者appidsecret:secret,//开发者AppSecret(小程序密钥)grant_ty... 在Mac上用手机抓包软件Charles抓取微信小程序中的高清无水印视频 https://v3u.cn/a_id_118 Tue, 29 Oct 2019 00:00:00 +0000 https://v3u.cn/a_id_118 手机抓包是一名测试工程师常备的技能,比如我想查看一个接口请求的参数、返回值,还有移动设备上的http请求、https请求,这一次的背景是我们想要在app端和小程序端抓取一些视频,这里用腾讯视频作为例子,使用mac系统的Charles软件(有点类似win系统中的fiddler,使用方式上大同小异)来进行视频接口与地址的抓包和嗅探。同时抓包工具也有利于线上生产环境问题的分析,前几天有个做服务端的同学跟我说他不用抓包工具,遇到问题直接debug代码,那我问他,如果线上服务的话,你怎么调?在实际项目中,没有遇到跟客户端相互扯皮的事情吗?客户端说他没问题,服务端也说他没问题,到底谁有问题?这时候没必要相... 使用Docker-compose搭建nginx-keepalived双机热备来实现高可用nginx集群 https://v3u.cn/a_id_117 Fri, 18 Oct 2019 00:00:00 +0000 https://v3u.cn/a_id_117 最近同学出去面试经常会被问到一个问题。面试官:你说你们公司使用nginx反向代理tornado,部署了多少多少台机器,好像很牛逼的样子,但是我问你,如果主机也就是部署了nginx那台机器并发过大导致宕机了怎么办?答曰:不考虑带宽峰值的话,比较新的CPU跑nginx单核每秒能接近2万请求,而且nginx如果纯做HTTP转发的话,Nginx的性能高到恐怖,会挂掉很不科学。。。。面试官:好吧,算你会忽悠,那如果插头被扫地大妈踢掉了怎么办,因为没电导致服务器宕机答曰:阿里云机房会断电。。。你特么在逗我吧。。其实负责转发的主机宕机概率很小,但是绝对不是没有,任何事都不是绝对,所谓的高可用架构就是体现在容... 使用Mpvue配合Weui开发面试题题库微信小程序,并且发布到正式环境 https://v3u.cn/a_id_116 Mon, 14 Oct 2019 00:00:00 +0000 https://v3u.cn/a_id_116 之前的一篇文章详细阐述了微信小程序开发的准备和入门以及环境搭建,这一次我们介绍如何将微信小程序如何上线,同时配合weui美化界面。本次做的微信小程序项目是一个类似在线题库的功能,面试者可以通过小程序来检索笔试题,同时用户输入关键词时同步监听输入行为,不需要点击就可以获取知识要点,后台采用tornado+mongodb+mortor的组合实现异步非阻塞的接口。首先weui是腾讯团队为微信小程序设计的一款皮肤,可以提高用户视觉体验,可以在官网下载weui.css:https://github.com/Tencent/weui-wxss/,将下载的weui.css放在小程序项目的src目录下,然后打... 使用Docker-compose来封装celery4.1+rabbitmq3.7服务,实现微服务架构 https://v3u.cn/a_id_115 Sat, 28 Sep 2019 00:00:00 +0000 https://v3u.cn/a_id_115 大家都知道,Celery是一个简单、灵活且可靠的,处理大量消息的分布式系统,在之前的一篇文章中:python3.7+Tornado5.1.1+Celery3.1+Rabbitmq3.7.16实现异步队列任务详细阐述了如何进行安装部署和使用,但是过程太繁琐了,先得安装Erlang,再安装rabbitmq,然后各种配置,最后由于async关键字问题还得去修改三方库的源码,其实我们可以通过docker来将celery服务封装成镜像,如此一来,以后再使用celery或者别的系统依赖celery,我们只需要将该镜像以容器的形式跑服务即可,不需要繁琐的配置与安装。首先新建celery_with_docke... 利用CSS3自定义属性来为网站添加“暗黑模式”(暗色模式/DarkMode) https://v3u.cn/a_id_114 Sun, 22 Sep 2019 00:00:00 +0000 https://v3u.cn/a_id_114 究竟什么是暗黑模式?这个概念起初来源于macOS系统,该系统的mojave版本为用户提供两个主题皮肤,即浅色和深色的皮肤。自从有了这个概念之后,很多网站和系统都会用户提供了相应的两套肤色,便于用户根据自己的习惯或爱好进行切换从科学的角度讲,低对比度的暗色可以降低屏幕对视网膜的刺激,同时还可以让电子设备更加省电。在过往的印象之中,最早实现类似的效果,一般都是通过JavaScript来更换Web页面或Web应用程序主题皮肤的.css文件,但是对于维护多套样式是较为痛苦的,特别当你要为你的产品提供更多的皮肤的时候更为堪忧。这个时候你可以借助类似Sass这样的处理器来维护你的主题样式,声明好变量,然后... Python3的原生协程(Async/Await)和Tornado异步非阻塞 https://v3u.cn/a_id_113 Fri, 20 Sep 2019 00:00:00 +0000 https://v3u.cn/a_id_113 我们知道在程序在执行IO密集型任务的时候,程序会因为等待IO而阻塞,而协程作为一种用户态的轻量级线程,可以帮我们解决这个问题。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存,在调度回来的时候,恢复先前保存的寄存器上下文和栈。因此协程能保留上一次调用时的状态,即所有局部状态的一个特定组合说人话:说白了就是,当协程遇到io操作而阻塞时,立即切换到别的任务,如果操作完成则进行回调返回执行结果,提高了效率,同时这样也可以充分利用CPU和其他资源,这就是异步协程的优势,并且协程本质上是个单进程,相对于多进程来说,无需进程间上下文切换的开销,无需原子操作锁定及同步的开销,编程模型也... mpvue1.0+python3.7+Django2.0.4实现微信小程序的支付功能 https://v3u.cn/a_id_112 Sun, 15 Sep 2019 00:00:00 +0000 https://v3u.cn/a_id_112 其实微信支付有很多种形式,刷脸,扫码,APP支付,小程序支付等,这边只说明小程序支付的实现,不过原理上都大同小异。首先,需要注册微信公众号平台https://mp.weixin.qq.com,并且开通微信支付功能,随后将你的小程序关联一个微信商户:pay.weixin.qq.com,这一系列申请下来之后,你手中需要有微信小程序appid,微信小程序秘钥,商户号,以及商户秘钥,这四个关键的支付配置变量。然后大体流程分两步:1在自己的后台服务器上访问微信提供的接口,拿到预支付交易会话标识prepay_id、微信返回的随机字符串nonce_str,这两个参数是要返回给自己的小程序的,小程序在调起微信... 基于python3.7利用Motor来异步读写Mongodb提高效率 https://v3u.cn/a_id_111 Fri, 06 Sep 2019 00:00:00 +0000 https://v3u.cn/a_id_111 如果使用Python做大型海量数据批量任务时,并且backend用mongodb做数据储存时,常常面临大量读写数据库的情况。尤其是大量更新任务,由于不能批量操作,我们知道pymongo是同步任务机制,相当耗时。如果采用多线程、多进程的方案确实有效,但编写麻烦、消耗系统资源大(pymongo还不允许fork线程中共用连接)。这里主要瓶颈在于IO,使用单线程异步操作就会效果很好。Motor是一个异步mongodbdriver,支持异步读写mongodb。它通常用在基于Tornado的异步web服务器中。Motor同时支持使用asyncio(Python3.4以上标准库)作为异步模型,使用起来十分方... 基于Docker-compose搭建Redis高可用集群-哨兵模式(Redis-Sentinel) https://v3u.cn/a_id_110 Wed, 04 Sep 2019 00:00:00 +0000 https://v3u.cn/a_id_110 我们知道,Redis的集群方案大致有三种:1)rediscluster集群方案;2)master/slave主从方案;3)哨兵模式来进行主从替换以及故障恢复。sentinel系统可以监视一个或者多个redismaster服务,以及这些master服务的所有从服务;当某个master服务下线时,自动将该master下的某个从服务升级为master服务替代已下线的master服务继续处理请求。同样,我们使用docker进行搭建新建一个mkdirredis-sentinel文件夹进入项目文件夹cdredis-sentinel,再建立一个sentinel专门来存放哨兵脚本,然后cdsentinel建立... 使用flex弹性布局来为微信小程序写自适应页面 https://v3u.cn/a_id_109 Tue, 03 Sep 2019 00:00:00 +0000 https://v3u.cn/a_id_109 我们知道,写习惯了前端的人,一般切图后布局页面的话,上手最习惯的是基于盒子模型的浮动布局,依赖display属性+position属性+float属性,但是浮动布局有一些致命的小问题,比如垂直居中比较费劲,比如著名的float坍塌问题,另外有些极端情况下,还得使用模型+clear:both来手动清除浮动,比较麻烦。于是,W3C提出了一种新的方案----Flex布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能,本人在微信小程序页面中尝试了一下弹性布局,个人感觉是:简直太好用了。Flex是FlexibleBox的缩写,意为&... 在centos7.6上利用docker-compose统一管理容器和服务 https://v3u.cn/a_id_108 Mon, 02 Sep 2019 00:00:00 +0000 https://v3u.cn/a_id_108 众所周知,一个大型的Docker容器组成的微服务应用中,容器的数量是非常巨大的,如果依赖传统的人工配置方式进行维护,对于开发和运维来说简直就是噩梦。docker-compose的出现正是为了解决这个问题。docker-compose是一个用于定义和运行多容器Docker应用的工具,只需要一个Compose的配置文件和一个简单的命令就可以创建并运行应用所需的所有容器。在配置文件中,所有容器通过services来定义,并使用docker-compose命令启动或停止容器以及所有依赖容器。如何安装请参照这篇文章:在Centos7.6上部署Docker环境以及安装docker-compose我们的目标... 关于Tornado:真实的异步和虚假的异步 https://v3u.cn/a_id_107 Sun, 01 Sep 2019 00:00:00 +0000 https://v3u.cn/a_id_107 我们知道Tornado优秀的大并发处理能力得益于它的webserver从底层开始就自己实现了一整套基于epoll的单线程异步架构,其他web框架比如Django或者Flask的自带server基本是基于wsgi写的简单服务器,并没有自己实现底层结构。而tornado.ioloop就是tornadowebserver最底层的实现。ioloop的实现基于epoll,那么什么是epoll?epoll是Linux内核为处理大批量文件描述符而作了改进的poll/select。那么到底什么是poll/select?socket通信时的服务端,当它接受(accept)一个连接并建立通信后(connectio... 使用python3和高性能全文检索引擎Redisearch进行交互 https://v3u.cn/a_id_106 Fri, 30 Aug 2019 00:00:00 +0000 https://v3u.cn/a_id_106 上一篇介绍了一款高性能全文检索引擎Redisearch,它不仅性能强劲,部署也方便,这里介绍一下如何用python客户端和它进行交互。使用redisearch-python:https://github.com/RediSearch/redisearch-py首先,安装pip3installredisearch基本操作:fromredisearchimportClient,TextField#Creatingaclientwithagivenindexnameclient=Client('myIndex',host='localhost',port='6666')#Creatingtheind... 使用Redisearch实现的全文检索功能服务 https://v3u.cn/a_id_105 Thu, 29 Aug 2019 00:00:00 +0000 https://v3u.cn/a_id_105 “检索”是很多产品中无法绕开的一个功能模块,当数据量小的时候可以使用模糊查询等操作凑合一下,但是当面临海量数据和高并发的时候,业界常用elasticsearch和lucene等方案,但是elasticsearch对运行时内存有着最低限额,其运行时大小推荐2G以上的内存空间,并且需要额外的磁盘空间做持久化存储。其实mongoDB内置的正则匹配搜索文本以及自带的text索引和search关键字也是一套靠谱的解决方案,但是这一次我们带来一种更加高效经济的文本检索方案:Redisearch下图是elasticsearch和redisearch的性能对比RedisModules是redis4.0引入的一... 9012年,您真的需要Thrift这样一个RPC微服务框架来拯救一下传统HTTP接口(api)了 https://v3u.cn/a_id_104 Tue, 27 Aug 2019 00:00:00 +0000 https://v3u.cn/a_id_104 目前市面上类似Django的drf框架基于json的http接口解决方案大行其道,人们也热衷于在接口不多、系统与系统交互较少的情况下使用它,http接口的优点就是简单、直接、开发方便,门槛低,利用现成的http协议进行传输。但是事情往往有两面,如果是一个大型的网站,内部子系统较多、接口非常多的情况下,RPC框架的好处就显示出来了,首先就是长链接,不必每次通信都要像http一样去3次握手4次挥手,减少了网络开销;其次就是RPC框架一般都有注册中心,有丰富的监控管理;发布、下线接口、动态扩展等,对调用方来说是无感知、统一化的操作。第三个来说就是安全性。最后就是最近流行的服务化架构、服务化治理,RP... 使用基于mpvue的框架开发微信小程序(搭建环境) https://v3u.cn/a_id_103 Mon, 26 Aug 2019 00:00:00 +0000 https://v3u.cn/a_id_103 美团很早就开源了mpvue这个项目,如此看来,美团可不仅仅是一家团购网站,真正的技术驱动型企业,使得我们多了一种用来开发微信小程序的框架选项。由于mpvue框架是完全基于Vue框架的(重写了其runtime和compiler),因此在用法上面是高度和Vue一致的(某些功能由于受限于小程序环境本身的原因而不能使用,但是瑕不掩瑜),这给使用过Vue开发Web应用的前端开发者提供了极低的门槛来开发小程序。搭建所需的软件环境,首先mpvue是基于vue.js,同时也需要vue-cli脚手架,注意一点:你的node环境版本必须大于9.0,否则会出现和新版mpvue不兼容的情况,首先去微信公众号平台注册开... 在centos7.6上部署前后端分离项目Nginx反向代理vue.js2.6+Tornado5.1.1,使用supervisor统一管理服务 https://v3u.cn/a_id_102 Thu, 22 Aug 2019 00:00:00 +0000 https://v3u.cn/a_id_102 这一次使用vue.js+tornado的组合来部署前后端分离的web项目,vue.js不用说了,前端当红炸子鸡,泛用性非常广,无论是单页应用,还是混合式开发app,亦或是微信小程序开发,样样得心应手,tornado最近的风头有点被新锐框架sanic抢走了,但是作为老牌的异步非阻塞框架,其内置了支持epoll/kqueue等高效网络库,而具备了处理高并发的能力并且开发效率也不低,这一次tornado作为承载后端压力的角色。首先部署前端,将测试好的vue.js2.6项目打包,值得一提的是,在生产环境并不需要node.js服务,因为利用vue.js的特性可以对前端页面进行打包,使其成为一个纯静态页包... 在Centos7.6上部署Docker环境以及安装docker-compose https://v3u.cn/a_id_101 Wed, 21 Aug 2019 00:00:00 +0000 https://v3u.cn/a_id_101 毫无疑问,Docker目前是现阶段最为火爆的容器技术了,它在业务解耦和拆分业务层面有着不可忽视的作用,而使用DockerCompose可以轻松、高效的管理容器,它是一个用于定义和运行多容器Docker的应用程序工具,这里记录一下如何在centos7.6上部署Docker以及docker-compose。#升级yumsudoyumupdate#卸载旧版本dockersudoyumremovedockerdocker-commondocker-selinuxdocker-engine#安装依赖sudoyuminstall-yyum-utilsdevice-mapper-persistent-dat... 利用基于Python的Pelican打造一个自己的个人纯静态网站 https://v3u.cn/a_id_100 Thu, 08 Aug 2019 00:00:00 +0000 https://v3u.cn/a_id_100 其实呢这么多年以来我一直建议每个有技术追求的开发者都要有写技术博客记笔记的良好习惯,一来可以积累知识,二来可以帮助别人,三来可以把开发中遇到的问题记录用来自省,第四可以通过交换友链来结识更多的技术领域的同仁。之前我曾经写过两篇相似的文章用来快速搭建个人网站,一款基于golang:利用基于GoLang的Hugo配合nginx来打造属于自己的纯静态博客系统另外一款基于node.js:使用Hexo建立一个轻量、简易、高逼格的博客,这一次带来一款基于python的静态网页生成器Pelican,它是一位法国开发者开发的,非常好用,它的每一篇文章会事先渲染成HTML静态文件,访问速度非常快首先安装pelc... python3.7+Tornado5.1.1+Celery3.1+Rabbitmq3.7.16实现异步队列任务 https://v3u.cn/a_id_99 Wed, 31 Jul 2019 00:00:00 +0000 https://v3u.cn/a_id_99 在之前的一篇文章中提到了用Django+Celery+Redis实现了异步任务队列,只不过消息中间件使用了redis,redis作为消息中间件可谓是差强人意,功能和性能上都不如Rabbitmq,所以本次使用tornado框架结合celery,同时消息中间件使用Rabbitmq来实现异步发邮件,并且使用flower来监控任务队列。首先安装rabbitmqMacos直接运行brew命令安装#安装服务brewinstallrabbitmq#启动服务brewservicesstartrabbitmqWin10系统就要下载安装包进行安装了,由于rabbitmq是基于erlang的,所以要首先安装erla... 用户认证(Authentication)进化之路:由Basic Auth到Oauth2再到jwt https://v3u.cn/a_id_98 Tue, 16 Jul 2019 00:00:00 +0000 https://v3u.cn/a_id_98 用户认证是一个在web开发中亘古不变的话题,因为无论是什么系统,什么架构,什么平台,安全性是一个永远也绕不开的问题在HTTP中,基本认证(Basicaccessauthentication)是一种用来允许网页浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。虽然基本认证非常容易实现,但该方案创建在以下的假设的基础上,即:客户端和服务器主机之间的连接是安全可信的。特别是,如果没有使用SSL/TLS(https)这样的传输层安全的协议,那么以明文传输的密钥和口令很容易被拦截。该方案也同样没有对服务器返回的信息提供保护。  现存的浏览... python花式读取大文件(10g/50g/1t)遇到的性能问题(面试向) https://v3u.cn/a_id_97 Fri, 12 Jul 2019 00:00:00 +0000 https://v3u.cn/a_id_97 最近无论是面试还是笔试,有一个高频问题始终阴魂不散,那就是给一个大文件,至少超过10g,在内存有限的情况下(低于2g),该以什么姿势读它?所有人都知道,用python读文件有一套”标准流程“:defretrun_count(fname):"""计算文件有多少行"""count=0withopen(fname)asfile:forlineinfile:count+=1returncount为什么这种文件读取方式会成为标准?这是因为它有两个好处:with上下文管理器会自动关闭打开的文件描述符在迭代文件对象时,内容是一行一行返回的,不会占用... 使用python将word文档和pdf电子书进行格式互转(兼容Windows/Linux) https://v3u.cn/a_id_96 Wed, 10 Jul 2019 00:00:00 +0000 https://v3u.cn/a_id_96 一些重要文档格式之间的互转在目前显得尤为重要,pdf作为通用格式在现在各个平台上兼容性是最好的,所以写python脚本将这些word文档批量转换pdf是最好的解决方案。由于windows系统对于word文档有天然的兼容性优势,所以转换起来很简单,普遍上是通过comtypes模块。pip3installcomtypesfromcomtypes.clientimportCreateObjectimportosdefwd_to_pdf(folder):#获取指定目录下面的所有文件files=os.listdir(folder)#获取word类型的文件放到一个列表里面wdfiles=[fforfinf... 搞清楚系统到底怎样支撑高并发以及架构图的绘制(面试向) https://v3u.cn/a_id_95 Tue, 02 Jul 2019 00:00:00 +0000 https://v3u.cn/a_id_95 大多数人面试的时候经常会被问到:你简历上有高负载高并发的经验,那到底你的系统是怎样设计的?如果没有过相关的项目经验,大多数同学被问到这个问题压根儿没什么思路去回答,不知道从什么地方说起,其实,就算没有相关的经验,只要事先编好话术,搞清楚架构图,回答此类问题也还是可以滴水不漏的。首先,在脑子里虚拟一个大用户量背景下的场景,如果我们手头有几台4核8g的服务器,假设一个平台用户量是500万。此时日活用户是50万,日访问量在600-700万左右,高峰期对系统每秒请求是500/s。然后对数据库的每秒请求数量是1500/s,这个时候会怎么样呢?如果系统内处理的是较为复杂的一些业务逻辑,是那种重业务逻辑的系... 彻底弄清楚session,cookie,sessionStorage,localStorage的区别及应用场景(面试向) https://v3u.cn/a_id_94 Tue, 02 Jul 2019 00:00:00 +0000 https://v3u.cn/a_id_94 客户端状态保持是一个老生常谈的问题了,归根结底追踪浏览器的用户身份及其相关数据无非就是以下四种方式:session,cookie,sessionStorage,localStorage首先cookie和session:Cookie机制:如果不在浏览器中设置过期时间,cookie被保存在内存中,生命周期随浏览器的关闭而结束,这种cookie简称会话cookie。如果在浏览器中设置了cookie的过期时间,cookie被保存在硬盘中,关闭浏览器后,cookie数据仍然存在,直到过期时间结束才消失。Cookie是服务器发给客户端的特殊信息,cookie是以文本的方式保存在客户端,每次请求时都带上它S... 使用Hexo建立一个轻量、简易、高逼格的博客 https://v3u.cn/a_id_93 Tue, 25 Jun 2019 00:00:00 +0000 https://v3u.cn/a_id_93 在之前的一篇文章中,介绍了如何使用Hugo在三分钟之内建立一个简单的个人博客系统,它是基于golang的,其实,市面上还有一款类似的静态页生成器,就是Hexo读音/hækso/,它是基于node.js的,和Hugo一样,Hexo正常来说,不需要部署到我们的服务器上,我们的服务器上保存的,其实是基于在hexo通过markdown编写的文章,然后hexo帮我们生成静态的html页面,然后,将生成的html上传到我们的服务器。简而言之:hexo是个静态页面生成、上传的工具。首先安装Hexo,在此之前,请确保电脑里已经安装好新版的node.jsnpminstall-ghexo-cli如果感觉安装速度比... python3的单元测试模块mock与性能测试模块cProfile https://v3u.cn/a_id_92 Fri, 14 Jun 2019 00:00:00 +0000 https://v3u.cn/a_id_92 我们知道写完了代码需要自己跑一跑进行测试,一个写好的程序如果连测试都没有就上到生产环境是不敢想象的,这么做的人不是太自信就是太无知。传统测试无非就是自己运行一下程序查看结果,或者前后端服务进行联调,这里要说的是走正规流程的单元测试,那到底什么是单元测试呢?顾名思义,只测试当前单元的程序或者代码,也可以理解当前模块的代码块,单元测试假设所有的内部或外部的依赖应该是稳定的,已经在别处进行测试过的.使用mock就可以对外部依赖组件实现进行模拟并且替换掉,从而使得单元测试将焦点只放在当前的单元功能。简单地说,mock就是帮我们解决测试依赖的一个模块,在Python3中,mock已经被集成到了unitt... 关于mysql联合索引的最左前缀原则以及b+tree https://v3u.cn/a_id_91 Mon, 10 Jun 2019 00:00:00 +0000 https://v3u.cn/a_id_91 软件版本mysql5.7根据官网的文档https://dev.mysql.com/doc/refman/5.7/en/multiple-column-indexes.html查询条件要符合最左原则才能使用到索引首先说说联合索引的好处:覆盖索引,这一点是最重要的,众所周知非主键索引会先查到主键索引的值再从主键索引上拿到想要的值,这样多一次查询索引下推。但是覆盖索引可以直接在非主键索引上拿到相应的值,减少一次查询。在一张大表中如果有(a,b,c)联合索引就等于同时加上了(a)(ab)(abc)三个索引减少了存储上的一部分的开销和操作开销梯度漏斗,比如select*fromtwherea=1andb... 在Mac下使用MindMaster画思维导图(脑图) https://v3u.cn/a_id_90 Thu, 06 Jun 2019 00:00:00 +0000 https://v3u.cn/a_id_90 众所周知,老牌的脑图软件是xmind,这里我们使用MindMaster,二者有什么异同呢?相同点:都是国产软件,都分为国内版和国外版本,都有免费版和付费版。在功能方面相同点较多,比如插入节点、关系线、标注。拖拽操作、内置图标、备注、幻灯片演示、甘特图、自动排版、云存储等功能。并且同样支持Windows、mac和Linux系统。不同点:1、MindMaster偏office风格、界面极简、自由、清爽;XMind偏Eclipse风格,界面图标精美。2、MindMaster支持导入导出MindManager、XMind格式、亿图图示的格式;XMind没有这么多。3、MindMaster支持黑色皮肤(... 在Centos下对Tornado的性能进行测试 https://v3u.cn/a_id_89 Tue, 04 Jun 2019 00:00:00 +0000 https://v3u.cn/a_id_89 在之前的一篇文章中,我们在1g1核的惨淡硬件环境下,对uwsgi+django和gunicorn+django的后端服务进行性能测试,得出结论单台django在简单读库操作下只能抗住大约200左右的并发:在Centos下使用Siege对Django服务进行压力测试这一次,我们在相同的背景下,对三大框架中,以性能著称于世的Tornado进行并发测试,看看它的性能到底有多高。Tornado是一个用Python编写的异步HTTP服务器,同时也是一个web开发框架。Tornado优秀的大并发处理能力得益于它的webserver从底层开始就自己实现了一整套基于epoll的单线程异步架构。那么,到底啥是特... 在Mac os 下配置Go lang 开发环境 https://v3u.cn/a_id_88 Sun, 02 Jun 2019 00:00:00 +0000 https://v3u.cn/a_id_88 首先,下载安装包,国内可以在这上面下载https://studygolang.com/dl目前的稳定版是go1.12.5.darwin-amd64.pkg下载安装后,配置环境变量vim~/.bash_profile在文件内最后加入#EnablethegomodulesfeatureexportGO111MODULE="on"#SettheGOPROXYenvironmentvariableexportGOPROXY="https://mirrors.aliyun.com/goproxy/"GOROOT=/usr/local/goexportGOROOTe... 在Centos下使用Siege对Django服务进行压力测试 https://v3u.cn/a_id_87 Fri, 31 May 2019 00:00:00 +0000 https://v3u.cn/a_id_87 Siege是linux下的一个web系统的压力测试工具,支持多链接,支持get和post请求,可以对web系统进行多并发下持续请求的压力测试。今天我们就使用Siege来对Django进行一次压力测试,看看单台Django服务到底能抗住多少的并发数。首先安装Siegewgethttp://download.joedog.org/siege/siege-3.0.8.tar.gztarzxvfsiege-3.0.8.tar.gzcdsiege-3.0.8./configuremakemakeinstall验证安装结果:输入siege-V如果输出了版本号就代表安装没问题Siege命令常用参数-c200... 具体谈谈如何优化前端性能的总结 https://v3u.cn/a_id_86 Thu, 30 May 2019 00:00:00 +0000 https://v3u.cn/a_id_86 前端是庞杂的,包括HTML、CSS、Javascript、Image、Video等等各种各样的资源。前端优化是复杂的,针对方方面面的资源都有不同的方式。那么,前端优化的目的是什么?从用户角度而言,优化能够让页面加载得更快、对用户的操作响应得更及时,能够给用户提供更为友好的体验。  从服务商角度而言,优化能够减少页面请求数、或者减小请求所占带宽,能够节省可观的资源。  总之,说白了,恰当的优化不仅能够改善站点的用户体验并且能够节省相当的资源利用,就是又让用户用的爽,又省了钱。1.使用cdn加速,网站上静态资源即css、js全... 在阿里云Centos7.6上面配置Mysql主从数据库(master/slave),实现读写分离 https://v3u.cn/a_id_85 Wed, 29 May 2019 00:00:00 +0000 https://v3u.cn/a_id_85 在之前的一篇文章中,阐述了如何在高并发高负载的场景下使用nginx做后台服务的负载均衡:在阿里云Centos上配置nginx+uwsgi+负载均衡配置,但是不要以为这样做了就是一劳永逸的,到了数据业务层、数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器负载,如此多的数据库连接操作,数据库必然会崩溃,数据库如果宕机的话,后果更是不堪设想。这时候,我们会考虑如何减少数据库的连接,一方面采用优秀的代码框架,进行代码的优化,采用优秀的数据缓存技术如:redis,如果资金丰厚的话,必然会想到架设mysql服务集群,来分担主数据库的压力。今天总结一下利用MySQL主从配置,实现读写分离,减轻数... 在阿里云Centos7.6上利用docker搭建Jenkins来自动化部署Django项目 https://v3u.cn/a_id_84 Tue, 28 May 2019 00:00:00 +0000 https://v3u.cn/a_id_84 一般情况下,将一个项目部署到生产环境的流程如下:需求分析—原型设计—开发代码—内网部署-提交测试—确认上线—备份数据—外网更新-最终测试,如果发现外网部署的代码有异常,需要及时回滚。整个过程相当复杂而漫长,其中还需要输入不少的命令,比如上传代码,git的拉取或者合并分支等等。Jenkins是目前非常流行的一款持续集成工具,可以帮助大家把更新后的代码自动部署到服务器上运行,整个流程非常自动化,你可以理解为部署命令操作的可视化界面。Jenkins主要有三种安装方式下载官方war包,放到tomcat中直接运行。yum安装。使用官方docker镜像。毫无疑问,既然有docker这么简单方便的工具,就没... 在阿里云Centos7.6上面部署基于redis的分布式爬虫scrapy-redis https://v3u.cn/a_id_83 Mon, 27 May 2019 00:00:00 +0000 https://v3u.cn/a_id_83 Scrapy是一个比较好用的Python爬虫框架,你只需要编写几个组件就可以实现网页数据的爬取。但是当我们要爬取的页面非常多的时候,单个服务器的处理能力就不能满足我们的需求了(无论是处理速度还是网络请求的并发数),这时候分布式爬虫的优势就显现出来。而Scrapy-Redis则是一个基于Redis的Scrapy分布式组件。它利用Redis对用于爬取的请求(Requests)进行存储和调度(Schedule),并对爬取产生的项目(items)存储以供后续处理使用。scrapy-redi重写了scrapy一些比较关键的代码,将scrapy变成一个可以在多个主机上同时运行的分布式爬虫。说白了,就是使用... 使用基于Vue.js和Hbuilder的混合模式移动开发打造属于自己的移动app https://v3u.cn/a_id_82 Sun, 26 May 2019 00:00:00 +0000 https://v3u.cn/a_id_82 近几年,混合模式移动应用的概念甚嚣尘上,受到了一些中小型企业的青睐,究其原因,混合模式开发可以比传统移动开发节约大量的开发成本和人力成本。HybridApp(混合模式移动应用)是指介于web-app、native-app这两者之间的app,兼具“NativeApp良好用户交互体验的优势”和“WebApp跨平台开发的优势”。说白了,如果走传统移动开发路线,公司业务覆盖多端,那么每个平台势必要请一个专属开发人员,安卓要请一个前端开发,ios同理,那么人力成本则进行了翻倍,同时,如果多端使用不同的代码,当有功能上的修改或者维护时,成本也是不可想象的。试想如果开发者编写一套代码,可编译到iOS、And... 利用基于Go Lang的Hugo配合nginx来打造属于自己的纯静态博客系统 https://v3u.cn/a_id_81 Thu, 23 May 2019 00:00:00 +0000 https://v3u.cn/a_id_81 Golang无疑是目前的当红炸子鸡,极大地提高了后端编程的效率,同时有着极高的性能。借助Go语言我们可以用同步的方式写出高并发的服务端软件,同时,Go语言也是云原生第一语言,Docker,Kubernetes等等著名的项目都是使用Go语言实现的。Hugo是基于Go语言的静态网站生成器。什么是静态网站生成器?顾名思义,就是以最快的速度生成一个高可用的web页面,我们知道Django作为一款非常流行的框架被广泛应用,但是部署起来实在是太麻烦了,各种命令各种配置,动态页面必然要涉及数据库的配置和操作,另外只要涉及数据库操作,你就不得不考虑sql注入等一系列的安全因素。而纯静态页面则没有这个烦恼,如果... 在阿里云服务器上使用Nginx部署https协议的网站 https://v3u.cn/a_id_80 Tue, 21 May 2019 00:00:00 +0000 https://v3u.cn/a_id_80 之前写过一篇文章是在阿里云服务器上用Apache切换https协议:将博客迁移阿里云并且切换成https解析的过程这一次,换成使用Nginx来部署,相比之下,比Apache的配置要简单一些如何申请SSL证书就按下不表了,非常简单,目前阿里云和腾讯云都免费提供一年的证书服务,区别就是腾讯云不需要域名在腾讯,而阿里云只有域名在阿里旗下才提供。申请域名证书成功后,下载压缩包,一定要选择Nginx的证书类型,解压后得到一个key文件一个pem文件,将这两个文件上传到服务器的root目录然后打开nginx配置文件vim/etc/nginx/conf.d/default.conf同时添加http和http... python3.7.3操作FastDfs来进行文件操作 https://v3u.cn/a_id_79 Mon, 20 May 2019 00:00:00 +0000 https://v3u.cn/a_id_79 在之前的一篇文章中:利用Docker来搭建分布式文件系统FastDfs,我们已经搭建好了FastDfs分布式文件系统,并且已经可以通过命令进行上传操作,那么如何使用python来上传文件呢?很简单,还是利用docker的特性,我们知道docker的-v参数,可以自动挂载宿主机的文件件到容器中去,这样宿主和容器就可以进行无障碍的文件共享,我们通过-v参数,把宿主机的root目录自动挂载到docker容器中的/var/root目录中去。dockerrun-d--network=host--nametracker-v/root:/var/rootdelron/fastdfstrackerdocker... 利用Docker来搭建分布式文件系统FastDfs https://v3u.cn/a_id_78 Sun, 19 May 2019 00:00:00 +0000 https://v3u.cn/a_id_78 对于文件存储来说,一般情况下简单的处理就是在Django配置文件中配置存储目录,按照规则对文件进行上传或者下载。实际上,当文件较少的时候,Django是可以应付的过来的。但当文件以海量形式出现的时候,Django就并不是那么好用了,于是FastDFS应运而出。FastDFS是一个开源的分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。可以说它就是为互联网而生,为大数据而生的。FastDFS服务端有两个角色:跟踪器(tracker)和存储节点(storage... 在阿里云Centos上配置nginx+uwsgi+负载均衡配置 https://v3u.cn/a_id_77 Fri, 17 May 2019 00:00:00 +0000 https://v3u.cn/a_id_77 负载均衡在服务端开发中算是一个比较重要的特性。因为Nginx除了作为常规的Web服务器外,还会被大规模的用于反向代理后端,Nginx的异步框架可以处理很大的并发请求,把这些并发请求hold住之后就可以分发给后台服务端(backendservers,后面简称backend)来做复杂的计算、处理和响应,并且在业务量增加的时候可以方便地扩容后台服务器。说白了就是,随着业务和用户规模的增长,仅仅一台服务器无法肩负起高并发的响应,所以需要两台以上的服务器共同分担压力,而分担压力的媒介就是万能的Nginx。首先,利用wsgi在不同的端口上起两个Django服务,比如8002和8003然后修改nginx网站... 在阿里云Centos7.6上部署Supervisor来监控和操作各类服务 https://v3u.cn/a_id_76 Fri, 17 May 2019 00:00:00 +0000 https://v3u.cn/a_id_76 Supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。说白了,它真正有用的功能是俩个将非daemon(守护进程)程序变成deamon方式运行对程序进行监控,当程序退出时,可以自动拉起程序。但是它无法控制本身就是daemon的服务。安装Supervisoryuminst... 利用Docker挂载Nginx-rtmp(服务器直播流分发)+FFmpeg(推流)+Vue.js结合Video.js(播放器流播放)来实现实时网络直播 https://v3u.cn/a_id_75 Thu, 16 May 2019 00:00:00 +0000 https://v3u.cn/a_id_75 众所周知,在视频直播领域,有不同的商家提供各种的商业解决方案,其中比较靠谱的服务商有阿里云直播,腾讯云直播,以及又拍云和网易云的有偿直播服务,服务包括软硬件设备,摄像机,编码器,流媒体服务器等。但是其高昂的费用以及较高的准入门槛让许多个人和小型企业望而却步,本文要讲解的是如何使用nginx-rtmp搭建直播服务器,配合FFmpeg推流,在网页端vue.js作为载体利用video.js作为流播放器,打造一套可用的在线视频直播方案。视频直播的流程可以分为如下几步:采集—>处理—>编码和封装—>推流到服务器—>服务器流分发—>播放... Python3利用ffmpeg针对视频进行一些操作 https://v3u.cn/a_id_74 Wed, 15 May 2019 00:00:00 +0000 https://v3u.cn/a_id_74 FFmpeg是个啥?FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。首先去官网https://www.ffmpeg.org/download.html下载windows下的压缩包解压缩后,配置一下环境变量输入命令查看版本ffmpeg-version安装ffmpeg的python扩展,该扩展可以让你直接在python脚本中直接调用,而不需要单独运行命令pipinstallffmpeg-python需要注意一点的是,有的情况调用该库会报错,这时需要将python安装目录下Lib文件夹的... 在阿里云centos7.6上部署vue.js2.6前端应用 https://v3u.cn/a_id_73 Tue, 07 May 2019 00:00:00 +0000 https://v3u.cn/a_id_73 在之前的一篇文章中详细阐述了如何部署Nginx代理uwsgi+django后台服务,现在轮到部署前端应用vue.js了,vue.js的好处就不多说了,其作为一个轻巧、高性能、可组件化的MVVM库,学习成本要比React要低,性能比脏检查的AngularJS不知道高到哪里去了。本文介绍如何在centos上部署vue.js应用。建立一个简单的vue.js脚手架项目的完整命令//安装cnpmnpminstall-gcnpm--registry=https://registry.npm.taobao.orgcnpminstallwebpack-gcnpminstallvue-cli-g//打开要创建的... 在阿里云Centos7.6中部署nginx1.16+uwsgi2.0.18+Django2.0.4 https://v3u.cn/a_id_72 Sun, 05 May 2019 00:00:00 +0000 https://v3u.cn/a_id_72 一直以来想写一篇完整的在阿里云服务器上部署Django服务结合uwsgi,并且通过nginx做反向代理。因为网上的攻略鱼龙混杂,加上技术不断更新,一些年代久远的文章很容易让人在部署的过程中掉坑里,无法自拔,所以本篇文章以最新的阿里云服务器centos7.6为背景,完全阐述如何部署,亲测可用,其实要说难点完全没有,只要按部就班,就不会有问题。当你购买了阿里云的ecs,涉及ecs的有两个密码,一定要搞清楚,一个密码是远程链接密码,也就是通过浏览器连接服务器的密码,另外一个是实例密码,这个密码就是ecs的root密码,一般情况下,我们经常用到的是实例密码。与此同时,需要设置一下安全组策略,将一些必要... Python版(3.7.2)支付宝(Alipay)退款(refund)接口的开发 https://v3u.cn/a_id_71 Fri, 03 May 2019 00:00:00 +0000 https://v3u.cn/a_id_71 在之前的文章中介绍了如何编写支付宝支付接口Python3.7.2+Django2.0.4美多商城集成最新版支付宝支付接口(2019.04)匆忙之中只考虑了支付,其实当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,卖家可以通过退款接口将支付款退还给买家,支付宝将在收到退款请求并且验证成功之后,按照退款规则将支付款按原路退到买家帐号上。交易超过约定时间(签约时设置的可退款时间)的订单无法进行退款支付宝退款支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。一笔退款失败后重新提交,要采用原来的退款单号。总退款金额不能超过用户实际支付金额。那么根据支付宝的官... 在Mac和Linux以及Windows下删除pip安装包缓存用以节约空间 https://v3u.cn/a_id_70 Fri, 03 May 2019 00:00:00 +0000 https://v3u.cn/a_id_70 首先,如果你的pip版本在6.0以上的话,可以在安装软件的时候加上–-no-cache-dir来选择不缓存,所以建议将pip升级到最新版本pip3install--upgradepip如果你已经用pip安装过不少软件,并且没有选择不缓存的话,可以用下面的命令来删除缓存#LinuxandUnixrm-rf~/.cache/pip#MacOsrm-rf~/Library/Caches/pip#Windowsrd/s/q%LocalAppData%/pipCache一定要注意文件目录不要打错了,因为删除命令是危险而不可逆的。... 利用vue.js双向绑定机制和vue-resource在前端异步上传文件 https://v3u.cn/a_id_69 Tue, 30 Apr 2019 00:00:00 +0000 https://v3u.cn/a_id_69 之前介绍了一个基于jquery的uploadify插件,可以用来上传文件:Django2.0.4+Uploadify3.0(h5版)实现多文件异步上传和删除但毕竟这是面向过程基于节点的插件,如果前端使用vue.js的脚手架,就要入乡随俗,利用vue.js自带的vue-resource来实现异步上传视频文件首先安装vue-resource没必要全局安装,所以只在需要用到的项目中安装即可cnpminstallvue-resource--save然后在入口文件main.js中引入并且声明使用//引入resourceimportVueResourcefrom'vue-resource'//声明使用Vu... 解决Django2.0.4+kindeditor4.11 跨域上传文件的问题 https://v3u.cn/a_id_68 Thu, 18 Apr 2019 00:00:00 +0000 https://v3u.cn/a_id_68 在之前的一篇文章中介绍了如何将富文本kindeditor结合到django中:Django2.0.4结合KindEditor4.1.11富文本编辑器在同域环境中是没有问题的,换句话说,也就是上传接口如果部署在前端页面同一个域名下是没有问题的,然而美多商城的系统架构是前后端分离,前端页面是vue.js服务,后端接口是django服务,分别部署在不同的服务器上,如果在vue.sj页面中想要使用kindeditor中的上传文件功能,跨域请求django的接口就会报错。本文解决在跨域情况下使用kindeditor的上传文件功能,解决思路就是用重定向方法来伪造成同域环境在前端项目中,建立一个redire... 为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统 https://v3u.cn/a_id_67 Wed, 17 Apr 2019 00:00:00 +0000 https://v3u.cn/a_id_67 websocket是个啥?webSocket是一种在单个TCP连接上进行全双工通信的协议webSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocketAPI中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是... 在vscode中为Django配置专属的语法检测提醒,防止误报语法错误 https://v3u.cn/a_id_66 Tue, 16 Apr 2019 00:00:00 +0000 https://v3u.cn/a_id_66 Python插件中默认使用pylint用来检测python代码的书写是否有错误和是否符合良好的编码习惯。Python官网(https://www.python.org/dev/peps/pep-0008/)专门有版块介绍推荐的python代码习惯,比如类,函数等的命名规则,遵守这些规则可以使自己的代码更加简明和易读。然而pylint在面对django框架时表现的有些不足,因为django使用了大量的元编程(metaprograming)思想以及鸭子模型,以至于在程序运行时会修改不少对象的属性和行为,但是这样给pylint这样的语法检测程序带来了比较大的困难。典型的就是集成了django.db.... 使用ApacheBench来对美多商城的秒杀功能进行高并发压力测试 https://v3u.cn/a_id_65 Fri, 12 Apr 2019 00:00:00 +0000 https://v3u.cn/a_id_65 秒杀功能众所周知,低廉的价格会引来很多用户趋之若鹜的争抢点击,导致一系列的服务器负载问题,服务器负载太大而影响程序效率也是很常见的,Apache服务器自带有一个叫AB(ApacheBench)的工具,可以对服务器进行负载测试同时美多商城的秒杀功能也会被高负载影响,从而导致超卖现象安装xampp软件进入c:/xampp/apache/bin基本用法:ab-n全部请求数-c并发数测试url可以将ab.exe加入系统环境变量;或直接切换置ab目录执行。如:C:WindowsSystem32>cdC:xamppapachebin关于秒杀很好理解,就是每一个用户抢到商品之后,库存进行递减操... Python3.7.2+Django2.0.4 美多商城集成最新版支付宝支付接口(2019.04) https://v3u.cn/a_id_64 Wed, 10 Apr 2019 00:00:00 +0000 https://v3u.cn/a_id_64   最新版支付宝算法的改变就是RSA升级了RSA2,长度推荐2048,其他的逻辑变化不大,关于秘钥的生成在之前的一篇文章已经有所介绍  在Mac系统下生成新版支付宝(2019年4月)支付接口私钥和公钥  在Django中集成支付接口的前置操作就是需要安装pycryptodome  pip3install-ihttps://pypi.douban.com/simplepycryptodome  然后将之前生成好的私钥和公钥(注意这里的公钥是指支付宝公钥),放入到项目目录中去        文档地址:https://docs.open.alipay.com/api  然后根据支付宝官网文档写一个支... 处理Centos6和Centos7下,python3处理中文的神坑 https://v3u.cn/a_id_63 Wed, 10 Apr 2019 00:00:00 +0000 https://v3u.cn/a_id_63 在一个阿里云的ecs服务器上,安装了centos6.5,然后部署Django2.0.4+python3.7.2,处理编码格式为UTF-8的HTTP请求,但奇怪的发现,将bytes类型的请求内容decode的时候会报解码错误UnicodeDecodeError:'ascii'codeccan'tdecodebyte0xe4inposition0:ordinalnotinrange(128)同样的程序,在windowsMacoscentos5.5都没问题网上一般的解决方案无非就是load(sys)或者代码加上#--coding:utf-8--这种,但这是python2时代的解决方案,完全不起作用还... 在Mac系统下生成新版支付宝(2019年4月)支付接口私钥和公钥 https://v3u.cn/a_id_61 Tue, 09 Apr 2019 00:00:00 +0000 https://v3u.cn/a_id_61 在做美多商城三方支付业务时,需要连入支付宝支付接口,众所周知,支付宝支付采用了RSA加密签名的安全通信机制,开发者可以通过支付宝的公钥验证消息的来源,同时使用自己的私钥进行信息加密。RSA算法及数字签名机制是服务窗平台与开发者网关安全通信的基础。关于数字签名机制无非就是下面这四步,归根结底就是为了提高安全性,毕竟涉及钱了,马虎不得:第一、发方首先有一个公钥/私钥对,它将要签名的报文作为一个单向散列函数的输入,产生一个定长的散列码,一般称为消息摘要。第二、使用发放的私钥对散列码进行加密生成签名。将报文和签名一同发出去。第三、收方用和发放一样的散列函数对报文运算生成一个散列码,同时用发放的公钥对签... Mac系统下,让Iterm 4 来记住常用的登录账号和密码 https://v3u.cn/a_id_60 Wed, 03 Apr 2019 00:00:00 +0000 https://v3u.cn/a_id_60   经常在Mac下使用Iterm4的朋友肯定遇见过这种情况,每次连接某个远程服务器总是要一遍遍的敲用户名、密码。那么能不能像Windows的软件一样,可以直接让软件记住。每次只要点击一下,就直接ssh到远程服务器上面去了,答案当然是可以了,这里推荐使用expect脚本来实现。  #!/usr/bin/expect  settimeout30  spawnssh-p[lindex$argv0][lindex$argv1]@[lindex$argv2]&a... Django2.0.4 结合 KindEditor 4.1.11 富文本编辑器 https://v3u.cn/a_id_59 Tue, 02 Apr 2019 00:00:00 +0000 https://v3u.cn/a_id_59   KindEditor是一款还不错的开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE、Firefox、Chrome、Safari、Opera等主流浏览器。之所以推荐这一款编辑器,是因为它非常的轻量化,也不需要安装,从而耦合度非常低,无论是使用表单提交内容还是异步提交,都非常方便,这里简单介绍一下如何在Django2.0.4中使用这款富文本编辑器。  首先在官网下载文件http://kindeditor.net/down.php  解压后,删除掉一些没有... 关于win下面Celery服务报 Process 'Worker' exited with 'exitcode 1' [duplicate] https://v3u.cn/a_id_57 Tue, 26 Mar 2019 00:00:00 +0000 https://v3u.cn/a_id_57 使用Celery服务运行异步任务或者定时任务的时候,服务虽然起了,但是会报错:CeleryProcess'Worker'exitedwith'exitcode1'[duplicate]导致任务并未运行。经过搜索可以定位到问题所在,是因为celery依赖库billiard版本过低,导致任务发生了阻塞,所以最好的解决方案就是升级billiard执行pipinstall--upgradebilliard官方的解释是,billiard最好>=3.5,所以如果不放心的话,还是指定版本号安装比较好... Django2.0.4+Uploadify3.0(h5版) 实现多文件异步上传和删除 https://v3u.cn/a_id_56 Mon, 25 Mar 2019 00:00:00 +0000 https://v3u.cn/a_id_56   已经9012年了,如果你的网站还通过传统表单上传文件的话,那你简直low到爆了,也别干什么web开发了,直接面壁去吧。  本文基于Uploadify异步上传控件来实现多文件异步上传的无刷新机制,用来提高效率和用户体验,由于uploadify基于jquery,所以确保已经引入了稳定版的Jquery,另外需要说明的是,uploadify分为flash版和h5版,鉴于flash早就已经被淘汰了,所以h5才是我们的选择,但是h5版居然需要收费,下一个要五美刀,我们当然不能当冤大头,可以考虑去下载一个免费的山寨开源版:https... 使用python3.7.2 实现大名鼎鼎的Elo Score等级分制度 https://v3u.cn/a_id_55 Mon, 25 Mar 2019 00:00:00 +0000 https://v3u.cn/a_id_55   在年度影片《社交网络》中,影片开场,马克扎克伯克和他的女朋友在酒馆里因为琐事分手,气急败坏的他回到了宿舍,在舍友的鼓励和帮助下,充分发挥了作为技术天才的动手能力,做出了Facemash网站,对大学女生的相貌进行分级打分,结果网站访问流量过大,直接把大学网络都搞宕机了。而Facemask就是著名的FaceBook的前身,Facemask大受欢迎的关键就在于扎克伯格的同学爱德华多(他也是facebook的联合创始人之一)写在窗户上的排名公式    这个公式就是鼎鼎有名的ELO等级分制度&... python3.7.2+Django2.0.4 使用django-celery遇到的那些坑 https://v3u.cn/a_id_54 Wed, 20 Mar 2019 00:00:00 +0000 https://v3u.cn/a_id_54   1首先为啥要用celery    因为在DjangoWeb平台开发中,碰到一些请求执行的任务时间较长(几分钟),为了加快用户的响应时间,因此决定采用异步任务的方式在后台执行这些任务。与此同时,celery除了异步任务,还可以开启定时任务,方便调度。  2安装需要的软件包    pipinstallcelerypipinstallcelery-with-redispipinsta... Home Brew 常用命令总结 https://v3u.cn/a_id_52 Sat, 16 Mar 2019 00:00:00 +0000 https://v3u.cn/a_id_52 HomeBrew是基于Ruby的一款软件管理器,非常好用,有点类似python的pip,这里总结一下常用的命令,以备不时之需。安装软件:brewinstall软件名,例:brewinstallwget搜索软件:brewsearch软件名,例:brewsearchwget卸载软件:brewuninstall软件名,例:brewuninstallwget更新所有软件:brewupdate更新具体软件:brewupgrade软件名,例:brewupgradegit显示已安装软件:brewlist查看软件信息:brewinfo/home软件名,例:brewinfogit/brewhomegit显示包依... Mac 安装和配置Mongodb https://v3u.cn/a_id_51 Sun, 17 Mar 2019 00:00:00 +0000 https://v3u.cn/a_id_51 在mac下安装Mongodb同样不推荐编译安装,推荐使用Homebrew1升级brewbrewupdate2安装mongo这里需要注意一点,brew的mongo安装依赖python2.7,所以默认的python环境变量最好不要动,如果想用python3.7.2最好使用python3的软连接brewinstallmongodb3安装成功后,可以使用两种方式启动mongo服务brewservicesstartmongodbmongod--config/usr/local/etc/mongod.conf4使用brew默认下载地址为/usr/local/Cellar/下的mongodb文件夹至此,安装... Mac使用Home Brew来安装redis,并设置守护进程 https://v3u.cn/a_id_50 Sun, 17 Mar 2019 00:00:00 +0000 https://v3u.cn/a_id_50 1首先,先升级你本机的Homebrewbrewupdate2安装redisbrewinstallredis3安装成功后,redis配置路径是/usr/local/etc/redis.conf4启动redis服务redis-server5可以设置守护进程将daemonize配置改成yes,默认值是no6将redis服务设置系统开机自启ln-f/usr/local/Cellar/redis/2.8.13/homebrew.mxcl.redis.plist~/Library/LaunchAgents/launchctlload~/Library/LaunchAgents/homebrew.mxcl.... 关于Django2.0跨域问题 https://v3u.cn/a_id_49 Tue, 05 Mar 2019 00:00:00 +0000 https://v3u.cn/a_id_49 首先,明确一个问题,就是跨域需要服务端支持才行,而不是靠前端修改代码可以解决的,无论你用jqueryaxiosfetch都是如此。这里介绍一下,如果使用的是Django2.0本身作为web服务端,该如何处理跨域请求问题。1安装插件pipinstalldjango-cors-headers2编辑配置文件(settings.py)INSTALLED_APPS=['''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''corsheaders',]MIDDLEWARE=['django.middleware.security.Secur... 关于mac系统中进入mysql遇到 Access denied for user 'root'@'localhost' (using password: YES)解决方案 https://v3u.cn/a_id_48 Fri, 15 Feb 2019 00:00:00 +0000 https://v3u.cn/a_id_48 Accessdeniedforuser'root'@'localhost'(usingpassword:YES)useringpassword:YES其实不用怀疑,密码输入正确,既然不是密码的问题那就是mysql服务出问题了,具体解决流程如下:1)Stopmysql(Killmysqlprocessorrunfollowingcommand)停止mysql服务sudo/usr/local/mysql/support-files/mysql.serverstop2)Startitinsafemode用安全模式进入mysql这一步可以看成是不输入密码就进入mysql命令行sudomysqld_sa... 我在优酷这几年(大误) https://v3u.cn/a_id_47 Tue, 15 Aug 2017 00:00:00 +0000 https://v3u.cn/a_id_47 我在优酷这几年2012年初,春寒料峭,我刚从中进名车离职,无意中看到了优酷在豆瓣上发布的招聘信息,python后台开发,当时使用python的公司还很少,但是我知道这是我的机会必须抓住。第一次走进中关村的中钢大厦,面试出人意料的顺利,虽然薪资并不算太高,但是对于当时我这样一个python初学者来说,也算是一份满意的工作了,当二面结束我走出大楼的时候,我绝对不会想到我将在这座大楼度过将近六年的时光。一开始的一两年说实话工作相当轻松,在优酷的移动后台负责cms和接口的开发,印象中很少加班,团队氛围也不错,每周都有技术分享,这是非常充实的两年,技术上得到了提升,眼界也开阔了起来,太多的第一次,第一次... flask SQLAlchemy 的安装和基础应用 https://v3u.cn/a_id_46 Sun, 23 Dec 2018 00:00:00 +0000 https://v3u.cn/a_id_46 SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在DBAPI之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。安装命令pipinstallflask-sqlalchemy注意sqlalchemy依赖于pymysql模块,确保pymysql被正确安装pipinstallpymysql#导入第三方连接库sql点金术fromflask_sqlalchemyimportSQLAlchemy#建立对象app=Flask(__name__)#载入配置文件app.config.from_pyfile('config.i... Flask 在虚拟环境之中做开发 https://v3u.cn/a_id_45 Mon, 17 Dec 2018 00:00:00 +0000 https://v3u.cn/a_id_45 虚拟环境可以搭建独立的python运行环境,使得单个项目的运行环境与其它项目互不影响比如一些项目基于python2.0,而另外一些项目却基于python3.0,同时这些项目必须在同一台服务器上部署,使用virtualenv就可以完美解决这个问题虚拟环境安装命令pipinstallvirtualenv进入项目安装虚拟目录的命令virtualenvvenv激活虚拟环境activate离开虚拟环境deactivate... Flask最新版本的中文翻译手册 https://v3u.cn/a_id_44 Tue, 11 Dec 2018 00:00:00 +0000 https://v3u.cn/a_id_44 一个最小的应用一个最小的Flask应用如下:fromflaskimportFlaskapp=Flask(__name__)@app.route('/')defhello_world():return'Hello,World!'Flask作为一个经典的轻量级框架无论在国外还是国内都十分流行,这里记录一下新版的中文翻译手册,留作备用https://dormousehole.readthedocs.io/en/latest/quickstart.html... 六年弹指一挥间,没有不散的宴席,感恩 https://v3u.cn/a_id_43 Fri, 29 Sep 2017 00:00:00 +0000 https://v3u.cn/a_id_43 在这里奋斗了快六年,憧憬过也迷茫过,学习了很多也经历了很多,感谢同事们忍受我的臭脾气,是时候重新出发了,青山不改,绿水长流,人生何处不相逢,有缘江湖再见。... Mysql 对于出现保留关键字的情况要使用双撇号 https://v3u.cn/a_id_42 Sat, 15 Oct 2016 00:00:00 +0000 https://v3u.cn/a_id_42 今天在操作数据库往表中插入数据时,表中有个key字段,怎么添加都不行,总是报错。key是mysql关键字insertintotb_config(key,val)values('vm.0.8','192.168.137.188:9080');一直报错。修改为key二端加撇号(`)insertintotb_config(`key`,val)values('vm.0.8','192.168.137.188:9080');... git版本控制图形化界面推荐 https://v3u.cn/a_id_41 Tue, 13 Sep 2016 00:00:00 +0000 https://v3u.cn/a_id_41 其实呢,有点不太理解为什么有很多人喜欢在命令行下敲命令,尤其是日常工作中使用频率蛮高的git,拉取,合并,切换分支什么的要打很多命令,手速很快的情况下还容易敲错命令导致误操作,推荐一个我日常使用的git图形化界面工具:SourceTree,非常的轻量化,有非常简单,合并拉取提交什么的只要轻触两下触摸板就搞定了,效率上比敲命令行不知道高到哪里去了,自动化流程就是好啊。... 在mac上配置rails开发环境 https://v3u.cn/a_id_40 Fri, 19 Jun 2015 00:00:00 +0000 https://v3u.cn/a_id_40 首先,安装home-brew,并且升级到最新的版本,值得一提的是home-brew个人感觉比port要好用,安装软件也方便一点。ruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"随后brewupdate升级到最新做完上面这一步之后,开始设置gem源,需要说明一下的是,淘宝的gem源早在好几年前就没人维护了,但是网上一大堆的攻略都还在推荐淘宝的源,目前唯一靠谱的gem源就是rubychina提供的,推荐使用:gems.ruby-china.org2020年最... Django通过xlwt用文件流的方式下载excel文档 https://v3u.cn/a_id_39 Mon, 24 Apr 2017 00:00:00 +0000 https://v3u.cn/a_id_39 通过文件流的方式直接在浏览器下载可以节省服务器的硬盘空间,也比较方便快捷importxlwtimportStringIOimportweburls=('/rim_request','rim_request','/rim_export','rim_export','/(.*)','index')classrim_export:#render=web.template.render('adsl')defGET(self):web.header('Content-type','application/vnd.ms-excel')#指定返回的类型web.header('Transfer-Encodin... 利用grunt插件来压缩js和css文件用来减少http请求,提高页面效率 https://v3u.cn/a_id_38 Tue, 20 Feb 2018 00:00:00 +0000 https://v3u.cn/a_id_38 1.安装nodejshttp://nodejs.org/2.安装各自的nodepackagejs我用的是UglifyJSgithub地址:https://github.com/mishoo/UglifyJScss我用的是clean-cssgithub地址:https://github.com/GoalSmashers/clean-css图片用的是node-smushitgithub地址:https://github.com/colorhook/node-smushit3.编写代码varfs=require('fs');varjsp=require("uglify-js").... 将博客迁移阿里云并且切换成https解析的过程 https://v3u.cn/a_id_37 Sat, 20 Jan 2018 00:00:00 +0000 https://v3u.cn/a_id_37   过年了,既然https是大势所趋,所以我也要将技术博客切换成https,同时迁移到国内的阿里云服务器上,这样网站会更加的稳定并且速度更快,怎么买服务器和备案就按下不表了,网上有一大堆的教程,最关键其实是阿里云并没有免费的ssl证书,去各大网站上查了一圈,只有腾讯云有免费的一年期ssl的证书,去腾讯云申请一下就可以了,然后将证书下载下来,并且解压后有三个文件,将这三个文件上传到服务器上。  修改apache服务器的httpd.conf配置文件添加  <IfModuless... python的dict中key为变量的使用技巧 https://v3u.cn/a_id_36 Sun, 22 Mar 2015 00:00:00 +0000 https://v3u.cn/a_id_36 有的时候,一些代码中需要用到的变量并不是写在代码里或者配置文件中,而是直接写在文件里,比如.thrift文件配置之类的,这时候当我们定义字典时,key有时候就不是定义好的值,而是文件中的变量,使用下面的技巧就可以反向直接使用变量而调用valueval='aaa'_tc={val:'身份证'}print_tc['aaa']... 千万不要把涉及公司业务的代码上传github https://v3u.cn/a_id_35 Thu, 19 Feb 2015 00:00:00 +0000 https://v3u.cn/a_id_35 千万不要把涉及公司业务的代码上传github,得了不说了,面壁去了... 嘿,五年了 https://v3u.cn/a_id_34 Thu, 28 Jul 2016 00:00:00 +0000 https://v3u.cn/a_id_34 嘿,五年了,不知不觉... Mac快捷键记录 https://v3u.cn/a_id_33 Mon, 04 Mar 2013 00:00:00 +0000 https://v3u.cn/a_id_33 效率利器:常用的快捷键符号说明:⌘-command,⌃-control,⇧-shift,⌥-option,⌫-delete常用的快捷键列举如下:代码相关:⌘+c,v,x,z,a:复制、粘贴、剪切、撤销、全选⌘+←,→:跳转至行首部、跳转至行尾⌘+⌫:删除至行首⌥+←,→:左跳一个单词、右跳一个单词⌥+⌫:删除一个单词日常操作:⌘+n,t,tab:新建窗口、新建Tab,切换Tab⌘+w,h,q:关闭窗口、隐藏程序、退出程序⌃⌘+f:进入全屏模式⌘+option+esc:强制退出程序(第一次打开webstorm会需要的)⌘+space:打开spotlight搜索触摸板:默认鼠标左击:单指单击滚动:... Mac上,python多版本共存(非切换) https://v3u.cn/a_id_32 Sat, 08 Apr 2017 00:00:00 +0000 https://v3u.cn/a_id_32 最近需求是要抓取线上视频,要用到you-get,一看wiki,干,要用到3.0,一直是2.7的忠实拥趸,又不想来回切换版本太麻烦,能不能共存呢?答案当然是可以啦,命令如下,以后想用3.0,直接在命令行下打/python3就可以啦,美滋滋#wgethttps://www.python.org/ftp/python/3.7.3/Python-3.7.3.tgz#mkdir/usr/local/python3#tar-zxvfPython-3.7.3.tgz#cdPython-3.7.3#./configure--prefix=/usr/local/python3#sudomakeinstall#l... shell脚本知识记录 https://v3u.cn/a_id_31 Fri, 08 Jun 2012 00:00:00 +0000 https://v3u.cn/a_id_31 先来简单的看一下变量定义的规则在Shell中,使用变量之前不需要事先声明,只是通过使用它们来创建它们;在默认情况下,所有变量都被看做是字符串,并以字符串来存储;Shell变量是区分大小写的;在赋值变量的时候等号两端不能有空格-_-定义了变量之后,一定要加上$符号才能使用#!/bin/bashVAR1=HELLOVAR2=MYNAMEVAR3="MYAGE"VAR4=ISechoVAR1#error能输出但不是输出该变量echo$VAR1#ok正常读取变量并打印echo$VAR2#error定义变量的值用空格隔开了echo$VAR3#ok作为一整个字符串echo$VAR4#e... Mac 上安装 Scrapy 报错,Operation not permitted https://v3u.cn/a_id_30 Sun, 23 Oct 2016 00:00:00 +0000 https://v3u.cn/a_id_30 这个问题在OSXElCapitan普遍存在,后面会说明原因。前几天在Mac上安装Scrapy,按照官方文档的步骤使用pip安装scrapy后报一个权限错误OSError:[Errno1]Operationnotpermitted:'/var/folders/6t/h404bjcd5tb_4q86tpv_251rv_0h0j/T/pip-sYsqDS-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/six-1.4.1-py2.7.egg-info'看起来像是一个普通的权限问题,... Mac上配置 Selenium Webdriver https://v3u.cn/a_id_29 Sun, 13 Nov 2016 00:00:00 +0000 https://v3u.cn/a_id_29 确认Chrome的安装路径Terminal执行命令/Applications/GoogleChrome.app/Contents/MacOS/GoogleChrome应当能够正常启动Chrome浏览器。如果没有,需要ln-s创建GoogleChrome二进制命令的软连接,或者reinstall将chromedriver放在/usr/bin目录官网下载地址,下载后执行sudocp~/Downloads/chromedriver/usr/bin/或者直接执行brewinstallchromedriver记得加上依赖<dependency><groupId&... 如何在Mac OS上安装pytest、setuptools、wget https://v3u.cn/a_id_28 Fri, 01 May 2015 00:00:00 +0000 https://v3u.cn/a_id_28 本文主要介绍如何在MacOS上安装pytest,以自己实际安装为例。同时补充介绍了MacOS上安装setuptools和MacOS上安装wget的方法MacOS上安装pytest由于MacOS上自带python2.7,已是目标版本,不需要更新了,在此基础上介绍安装pytest的主要步骤:安装pip,在终端中输入:sudoeasy_installpip接着安装pytest:sudopipinstall-Upytest测试是否安装成功:py.test--version在安装过程中遇到了一些问题,主要问题有wget方法不能用MacOS上安装setuptools可以参考https://pypi.pyt... OS X 10.11 El Capitan 如何升级系统预装python https://v3u.cn/a_id_27 Sat, 17 Oct 2015 00:00:00 +0000 https://v3u.cn/a_id_27 最近升级OSX到ElCapitan。发现mvn、Python的配置几乎全部失效了。直接上解决方案安装homebrewruby-e"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)"安装Python3使用homebrew进行下载:brewinstallpython3建立新的命令符号链接#进入/usr/local/bincd/usr/local/bin#创建新的命令符号链接ln-s/usr/local/Cellar/python3/3.4.3_2/bin/python3/u... vim中实现python代码自动完成功能 https://v3u.cn/a_id_26 Thu, 02 Aug 2012 00:00:00 +0000 https://v3u.cn/a_id_26 在/usr/share/vim/vim73/autoload目录中检查是否存在python3complete.vim或pythoncomplete.vim文件,如果存在,则直接在用户目录中.vimrc进行配置例如root用户,在/root/.vimrc中添加:filetypepluginonautocmdFileTypepythonsetomnifunc=pythoncomplete#Complete现在你可以试试啦importsysprintsys.此时,按下Ctrl+x,Ctrl+o,就能看到提示列表框,以及对应的docstring.Ctrl+n,Ctrl+p来上下选择ESC来取消提示框。... 倒霉,最好不要使用Mac系统默认下的python https://v3u.cn/a_id_25 Thu, 15 Mar 2012 00:00:00 +0000 https://v3u.cn/a_id_25 最近,用Mac系统开发了一阵以后,一些软件开始崩溃,找了一下原因,原来是我乱升级系统包导致的,我们都知道,OSX系统默认是开发者友好的,python当然必须系统自带的。但是网上又有很多教程,如何在mac系统中安另一个python,原因就是系统自带的python运行运行普通脚本没问题,但是真的开发python项目是有点问题的。系统自带的python可能会版本偏低,这个如果大家都是用最新系统应该都没啥问题了。系统升级的时候,可能会导致已经安装的python包消失。最后也是最重要一点,系统python默认安装了一些pythonpackages,导致我们自己安装升级这些库的时候很困难。系统python... 发现一个好东西: Anaconda https://v3u.cn/a_id_24 Sun, 11 Mar 2012 00:00:00 +0000 https://v3u.cn/a_id_24 linux和mac都自带python,所以配置起来相对简单,但是windows就不行了,配置起来麻烦的紧,所以我就像win下面有没有想php集成环境xampp这种非常简单直接安装就能使用的软件呢?答案就是Anaconda,虽然它也支持mac和linux,但是我个人建议还是只在win下面使用就好了,确实非常方便,点赞... centos安装python2.7 https://v3u.cn/a_id_23 Wed, 01 Feb 2012 00:00:00 +0000 https://v3u.cn/a_id_23 一般centos系统自带的Python是2.6.6版本,由于版本太老有些好用的模块及功能需要Python2.7才支持。简单写一下如何升级Python2.6到Python2.7并能同步使用pip,以及通过pip安装Django。踩过不少坑,总结了下,按下面步骤逐步安装不然会有报错。1、安装opensslopenssl-devel如果没安装后面用pip安装软件包的时候可能会提示错误“pipisconfiguredwithlocationsthatrequireTLS/SSL,howeverthesslmoduleinPythonisnotavail”yum-yopensslopenssl-deve... 一个sql查询排序小技巧 https://v3u.cn/a_id_22 Mon, 24 Jul 2017 00:00:00 +0000 https://v3u.cn/a_id_22 如果你想做分段统计比如SELECTCASEWHEN(num=0)THEN'0'WHEN(age>0ANDage<=10)THEN'10'WHEN(age>100ANDage<=200)THEN'100'ELSE'>200'ENDasnum这样的情况,如果用别名排序的话,数据库字符串排序会变成乱序,导致难以浏览,所以可以在别名上加前缀,这样就可以通过首字母排序了,比如SELECTCASEWHEN(num=0)THEN'a.0'WHEN(age>0ANDage<=10)THEN'b.10'WHEN(a... 关于mysql表引擎的问题 https://v3u.cn/a_id_21 Sat, 10 Sep 2016 00:00:00 +0000 https://v3u.cn/a_id_21 如果是查询比较多尽量用MyISAM速度要快一点想要读写分离的话,还是做主从表比较靠谱一点,因为innodb同时读写的话也会锁表... mysql终端查看中文乱码问题 https://v3u.cn/a_id_20 Fri, 20 Feb 2015 00:00:00 +0000 https://v3u.cn/a_id_20 p.p1{margin:0.0px0.0px0.0px0.0px;font:12.0pxCourier;color:#000000}在终端里要先执行setnamesutf8;记录一下... 说说各种居中 https://v3u.cn/a_id_19 Fri, 23 Jun 2017 00:00:00 +0000 https://v3u.cn/a_id_19 单行居中div{height:26px;line-height:26px;overflow:hidden;text-align:center;}1.同时支持块级和内联极元素2.只能支持单行垂直居中,并且不支持标签多行居中div{padding:10px0;text-align:center;}1.同时支持块级和内联极元素2.支持非文本标签,但不能设定容器的高度绝对定位居中div{margin:auto;position:absolute;left:0;top:0;right:0;bottom:0;/**可以设定高度、宽度**/}1.毫无疑问,绝对定位居中是本人最喜欢、使用次数最多的居中方式。通... FLOAT坍塌原理及解决方案 https://v3u.cn/a_id_18 Tue, 15 Aug 2017 00:00:00 +0000 https://v3u.cn/a_id_18 什么叫float坍塌?先看一段简单的代码<divclass="parent-container"><divclass="left-container"></div><divclass="right-container"></div></div>.parent-container{width:400px;border:5pxsolid#FF6B5B;}.left-cont... rem在响应式布局中的应用 https://v3u.cn/a_id_17 Sun, 09 Jul 2017 00:00:00 +0000 https://v3u.cn/a_id_17 rem在响应式布局中的应用最近做了一些响应式的页面,遇到了一些问题,想了些解决方法,在这里总结一下。目前响应式的主流实现方式是百分比布局,加上媒体查询@mediascreen。关于媒体查询还有媒体查询的一些兼容性问题,网上介绍的很多其实响应式布局中主要困扰我们的问题还是元素的等比缩放。目前的元素的等比缩放主要有以下两种解决方案。实现等比缩放的一些方案1.利用img元素的等比缩放特点这种情况最为常见,只需要百分比设置img元素的宽度,img元素的高度就会随着宽度等比缩放。这也是我们在响应式界面中遇到的最主要的场景。基本上如果是图片都会下意识的用img来引入,即使是背景图片也常用这种方式来撑开父元... 自适应与响应式的异同 https://v3u.cn/a_id_16 Fri, 27 Jan 2017 00:00:00 +0000 https://v3u.cn/a_id_16 目前非常流行自适应设计与响应式设计,而且经常让人混淆,自适应设计不应与自适应布局混为一谈,它们是完全不一样的概念。在这先说明下这两者的异同:自从移动终端飞速发展以来,各种各样的机型突飞猛进,很多网站的解决方法,是为不同的设备提供不同的网页,比如专门提供一个mobile版本,或者iPhone/iPad版本。这样做固然保证了效果,但是比较麻烦,同时要维护好几个版本,而且如果一个网站有多个portal(入口),会大大增加架构设计的复杂度。于是,很早就有人设想,能不能"一次设计,普遍适用",让同一张网页自动适应不同大小的屏幕,根据屏幕宽度,自动调整布局(layout)?2010年,... 移动布局方案(转载) https://v3u.cn/a_id_15 Wed, 22 Mar 2017 00:00:00 +0000 https://v3u.cn/a_id_15 layoutviewport和visualviewport移动端浏览器和PC最大的不同在于大小(废话==),那么怎样让网页友好的展示在移动端呢。很显然的,如果不做任何处理,很多页面的展示必然会乱掉。Apple也发现了这个问题,并定义了一个viewportmeta标签,用来创建一个虚拟的**layoutviewport**(布局视图),这个视图的分辨率接近pc,Apple将其定义为**980px**,其他厂商可能不同,感兴趣的可以自己写页面测试下。这就很好的解决了早期的页面在手机上显示的问题,由于两者之间的宽度趋近,只需要像在PC上那样渲染页面就行,原有的页面布局不会错乱。layoutviewp... 关于响应式设计最新的适配方案 https://v3u.cn/a_id_14 Wed, 12 Jul 2017 00:00:00 +0000 https://v3u.cn/a_id_14 截至目前最靠谱的响应式设计讨论https://www.w3cplus.com/css/vw-for-layout.html记录一下... 响应式设计笔记 https://v3u.cn/a_id_13 Tue, 21 Feb 2017 00:00:00 +0000 https://v3u.cn/a_id_13 HTML4和CSS2目前支持为不同的媒体类型设定专有的样式表。比如,一个页面在屏幕上显示时使用无衬线字体,而在打印时则使用衬线字体。screen和print是两种已定义的媒体类型。媒体查询让样式表有更强的针对性,扩展了媒体类型的功能。下面的css是应用在宽度小于等于960px的屏幕上:@mediascreenand(max-width:960px){body{background-color:red;}}此外,可以通过标签的media属性为样式表指定设备类型(如显示屏或打印机)。具体说来,就是在HTML页面的标签中插入一个如下面代码片段所示的link标签:<linkrel=&qu... 响应式设计之子元素的数目检测 https://v3u.cn/a_id_12 Sun, 09 Oct 2016 00:00:00 +0000 https://v3u.cn/a_id_12 在响应式设计中,通用做法是根据屏幕尺寸,显示不用的样式。如果碰到需求,希望根据子节点的个数,显示不同的样式呢?<ul><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li></ul>js判断js判断,比较简单,使用场景... 关于控件checkbox选择器的问题 https://v3u.cn/a_id_11 Mon, 27 Apr 2015 00:00:00 +0000 https://v3u.cn/a_id_11 对控件操作一般人喜欢用jquery,但是如果项目里面集成了过多的js库,容易产生各种莫名其妙科学无法解释的玄幻事件(懂的自然懂),所以基础操作我个人还是建议用原声js,比如操作checkbox<inputtype="checkbox"onclick="checkAll(this,'NewMainVideoCheckbox1')">functioncheckAll(e,name){varitems=document.getElementsByName(name);for(vari=0;i<items.length;... 禁止爬虫爬你的页面 https://v3u.cn/a_id_10 Sun, 21 Apr 2013 00:00:00 +0000 https://v3u.cn/a_id_10 众所周知,使用robots.txt文件可以对爬虫能否爬页面进行声明,但是这只是一个“君子协定”,有人遵守也有人不遵守,所以还需要对页面进行一个声明,加入meta代码<metaname="robots"content="noindex">这样才能有效的对爬虫进行封禁,例如本站就是如此,但是这是一个双刃剑,禁止爬虫的同时,SEO就不那么友好了... Python 检测成员函数、成员变量是否存在的方法 https://v3u.cn/a_id_9 Thu, 18 Jul 2013 00:00:00 +0000 https://v3u.cn/a_id_9 如下为测试用例:#定义一个类>>>classA:...def__init__(self):...self.name='sunyi'...deffun1(self):...print"fun1"...#创建对象a>>>a=A()#检测是否存在属性name>>>hasattr(a,"name")True>>>hasattr(a,"age")False#检测是否存在函数fun... python绘图显示中文字体的解决方案 https://v3u.cn/a_id_8 Tue, 27 Dec 2016 00:00:00 +0000 https://v3u.cn/a_id_8 importmatplotlib.pyplotaspltimportmatplotlibasmpl'''mpl.rcParams['font.sans-serif']=['FangSong']设置中文字体的方法mac不适用,windows应该可以'''font=mpl.font_manager.FontProperties(fname='/System/Library/Fonts/STHeitiLight.ttc')#不设置中文字体会显示成方块,图表显示的中文必须为unicode格式,将字体文件重命名为font,STHeitiLight为mac的黑体mpl.rcParams['axes.uni... python操作excel https://v3u.cn/a_id_7 Sat, 13 Apr 2013 00:00:00 +0000 https://v3u.cn/a_id_7 日常工作中,我们一般会将数据导入到csv文件,方便传来传去互相使用,而csv文件有很多致命缺点,比如乱码问题,比如分隔符问题,win下面是逗号而mac下面则是分号,令人很恼火,所以我个人推荐还是导出excel比较好一点,跨平台跨系统都不会出问题,也不会出现乱码问题,使用的模块是openpyxl,记录一下... 15个在github上最受欢迎的py框架,记录一下 https://v3u.cn/a_id_6 Sat, 13 Sep 2014 00:00:00 +0000 https://v3u.cn/a_id_6 1.Django:PythonWeb应用开发框架Django应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。2.Diesel:基于Greenlet的事件I/O框架Diesel提供一个整洁的API来编写网络客户端和服务器。支持TCP和UDP。3.Flask:一个用Python编写的轻量级Web应用框架Flask是一个使用Python编写的轻量级Web应用框架。基于WerkzeugWSGI工具箱和Jinja2模板引擎。Flas... Python 的 MySQLdb 模块的 autocommit https://v3u.cn/a_id_5 Sun, 20 May 2012 00:00:00 +0000 https://v3u.cn/a_id_5 最初在使用python读写数据库的时候,发现select语句可以读取到数据,insert语句执行后,数据库中却没有数据。将sql语句在mysql命令行直接执行是完全没有问题的,为什么使用MySQLdb执行insert语句会没有数据呢?看起来像是没有提交,立刻想到了mysql的autocommit,是不是没有提交事务?想到后立刻进行了验证,在执行insert语句后,又加了一行程序提交事务:connection.commit()。果然,insert语句生效了,数据库中有了数据。为了进一步证实MySQLdb模块会将autocommit功能关闭,看了mysql的日志,发现有setautocommit=... 代码检查工具 https://v3u.cn/a_id_4 Tue, 20 Mar 2012 00:00:00 +0000 https://v3u.cn/a_id_4 python哪儿都好,但是缩进太多,嵌套过多容易产生难以检查的语法错误,所以我们需要一款静态检查软件这里引入一个静态检查利器:flake8.flake8介绍它是以下三工具的包装:PyFlakes:python源码检查:多余import;重复定义函数;变量名冲突...Pep8:代码风格检查NedBatchelder’sMcCabescript:代码复杂度检查三大功能:python代码风格检查,使工程项目满足良好的代码风格,容易发现问题。一些基本的代码检查。git集成flake8使用安装:pipinstallflake8检查:flake8[python源码目录或文件]忽略规则接触,主要有两种方式:... 一个用来装逼的利器 https://v3u.cn/a_id_3 Thu, 01 Mar 2012 00:00:00 +0000 https://v3u.cn/a_id_3 termcolor是一个python包,可以改变控制台输出的颜色,支持各种terminal(WINDOWS的cmd.exe除外)。它支持下列的文字颜色:grey,red,green,yellow,blue,magenta,cyan,white支持下列的背景高亮:on_grey,on_red,on_green,on_yellow,on_blue,on_magenta,on_cyan,on_white支持下列属性:bold,dark,underline,blink,reverse,concealed主流terminal对属性的支持如下:Terminalbolddarkunderlineblinkr... python 字典遍历方法性能对比 https://v3u.cn/a_id_2 Thu, 23 Feb 2012 00:00:00 +0000 https://v3u.cn/a_id_2 最近项目中使用到了dict的遍历,笔者写了几年的python,大多数都是使用dict.keys()的遍历方式。无奈项目执行过程中当dict中的元素上千万的时候,两层for循环性能实在是扛不住,于是测试了一下几种遍历方法的性能importtimeitDICT_SIZE=5000testDict=dict()foriinrange(DICT_SIZE):testDict[i]=iassertlen(testDict)==DICT_SIZEdeftest1():forkintestDict.keys():key=kvalue=testDict[k]deftest2():forkintestDict:... Python在import时遇到的惨案 https://v3u.cn/a_id_1 Mon, 20 Feb 2012 00:00:00 +0000 https://v3u.cn/a_id_1 最近使用基于python语言的django框架开发web相关的应用,但是在访问页面的时候会不定时的报错,import导入报错经过近1个月的观察发现有这么几个特性:不知道什么时候会触发,但是一旦触发,就一直存在这个问题只要重启web服务或者调试问题马上就能解决。咋一看:难道是django框架不稳定?不要轻易怀疑框架的问题,绝大多数情况下是自己的问题。查看一下__import__的描述:__import__(name[,globals[,locals[,fromlist[,level]]]])NoteThisisanadvancedfunctionthatisnotneededineveryday...