KevinHuang

KevinHuang的博客


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 一些书

  • 常用命令

  • python tips

  • 站点地图

  • rss

  • 公益404

  • 搜索

GraphQL入门指导

发表于 2018-10-19 | 分类于 graphql | 阅读次数:
什么是GRAPHQLGraphQL是API的查询语言和运行时,用于使用现有数据完成这些查询。 GraphQL提供了API中数据的完整且易于理解的描述,使客户能够准确地询问他们需要什么,仅此而已,使API随着时间的推移更容易发展,并支持强大的开发人员工具。 GraphQL 与 RESTful 有什么区别? 首先放上一张来自于 graphql.org 的图片。REST 与 GraphQL 都是服务端所承载的系统对外的服务接口,因此两者肯定是可以共存的,甚至可以共用一套 Authorization 等业务逻辑。RESTful的一些不足: 扩展性,单个RESTful接口返回数据越来越臃肿比如获取用户信息/users/:id,最初可能只有id、昵称,但随着需求的变化,用户所包含的字段可能会越来越多,年龄、性别、头像、经验、等级,等等等等。 而具体到某个前端页面,可能只需要其中一小部分数据,这样就会增加网络传输量,前端获取了大量不必要的数据。 某个前端展现,实际需要调用多个独立的RESTful API才能获取到足够的数据比如一个文章详情页,最初可能只需要文章内容,那么前端就调用/articles/:aid获取到文章内容来展现就行了 但随着需求的演进,产品可能会希望加上作者信息(昵称、头像等),这时前端又需要在获取文章详情后,根据其中的作者id字段继续获取作者相关的信息,/user/:uid 然后,需求又变化了,产品希望在加上这篇文章的评论,这时前端需要继续调用/comment/:aid来拉取评论列表 对于Web前端而言,由于ajax技术的存在,这种的请求数据方式,也就开发上稍微麻烦些,并不会造成太大的问题;但对于App来说,渲染的方式不同,必须要拉取的全部的数据之后,才能绘制界面,就会导致这个界面必须要等到所有3个RESTful接口的返回数据都拿到,才能进行绘制。 GraphQL ...
阅读全文 »

Tesseract-training-recognize-lib

发表于 2018-09-10 | 分类于 验证码识别 | 阅读次数:
tesseract训练采集样本: 获取足够多的样本数据,必须是能够覆盖所有被识别的字符集,如果字体比较固定比如印刷体或者是网络的字体库,可以尝试采集到每一个字符然后合成字体库,用完整的一套字体库来训练 三种训练方法对比 找到需要识别的图片文本的字体,用字体库训练相应的库 (一般验证码很难找到字体库,找到字体的希望很渺茫); 采集到足够多的样本,然后切割响应字符串,最后组成一套非重复字符的字体集合,然后训练,亲测有效,特点:准确率高,切割和合并字符可能会麻烦一点; 采集到尽可能多的样本,用所有的样本来训练,特点:工作量大,效果不一定好 生成tif字体库原始需要识别图片转换成tif字体文件,linux有个convert命令可以转换: 1convert test.png num.font.exp0.tif 生成训练文件.tr1tesseract num.font.exp2.tif num.font.exp2 batch.nochop makebox -psm 7 digits 上面的命令可以更加需求添加相关参数来提高初次识别的准确率下载jTessBoxEditor,运行软件, 然后打开刚刚生成的tif文件来挑战识别有误的字符创建font_properties文件写入:1font 0 0 0 0 0 # 【语法】:<fontname> <italic> <bold> <fixed> <serif> <fraktur> tesseract.exe num.font.exp0.tif num.font.exp0 nobatch box.train 生成训练库并打包到语言包目录1234567891011unicharset_extractor *.boxshapeclustering -F font ...
阅读全文 »

图像识别验证码识别神器Tesseract

发表于 2018-09-07 | 分类于 图像识别 | 阅读次数:
Tesseract简介tesseract是一个图像识别库,底层是用C++写的,tesseract支持unicode编码,能够识别100多种语言;Tesseract支持各种输出格式:纯文本,特殊(html),pdf,tsv,仅隐形文本pdf tesseract历史:Tesseract最初是在1985年至1994年间在Hewlett-Packard Laboratories Bristol和Greeley Colorado的Hewlett-Packard Co开发的,1996年又进行了一些更改以移植到Windows,并在1998年开始使用一些C ++。2005年,Tesseract开放了 惠普采购。 自2006年以来,它由谷歌开发。 版本:最新的稳定版本是3.05.01,于2017年6月1日发布。最新的3.05源代码可从GitHub上的3.05分支获得。新的基于LSTM的4.0版本的源代码可从GitHub上的主分支获得。 请注意,该分支正在积极开发中。tesseract官网地址 tesseract可以用来识别图像和验证码,自带的命令可以识别数字字母等,准确率很高,需要中文和其他语言可以自行下载相关的语言库,如果想要再次提高准确率可以抽取足够多的样本,然后自己训练,本人做的电话号码和邮箱的识别库准确率可以接近99%; 安装123456789# mac brew installsudo brew install tesseract# ubuntu sudo apt update && sudo apt install tesseract-ocr# 安装语言包:sudo apt-get install tesseract-ocr-[lang] # lang是语言# 下载所有语言包:sudo apt-get install tesseract-ocr-all 当 ...
阅读全文 »

python爬虫利器requests_html

发表于 2018-08-06 | 分类于 python | 阅读次数:
requests_html: python大神kenneth reitz小哥哥的又一爬虫神器(上次是requests),官网给出的我这渣渣英语就不翻译了,内容如下: Full JavaScript support! CSS Selectors (a.k.a jQuery-style, thanks to PyQuery). XPath Selectors, for the faint at heart. Mocked user-agent (like a real web browser). Automatic following of redirects. Connection–pooling and cookie persistence. The Requests experience you know and love, with magical parsing abilities. 安装: 12pip3 install requests-html# requests-html必须3.6以上的python版本 使用: 12345678910111213141516171819202122232425262728from requests_html import HTMLSessionsession = HTMLSession()r = session.get('https://python.org/')# 获取页面所有链接r.html.links# 获取页面所有链接的绝对地址r.html.absolute_links# {'https://github.com/python/pythondotorg/issues', ...}# Select an Element with a CSS Selector about = r.html.fi ...
阅读全文 »

uwsgi和gunicorn

发表于 2018-07-26 | 分类于 python | 阅读次数:
WSGI 、uwsgi 与 uWSGI 的区别 WSGI:只是一种规范,描述web server如何与web application通信的规范,运行在WSGI协议之上的框架有Bottle, Flask, Django ; uwsgi:是uWSGI服务器的独有通信协议,据说该协议是fcgi协议的10倍快; uWSGI:是一个web服务器,实现了WSGI协议、uwsgi协议、http协议等; WSGI规范WSGI 其实是定义了一种server与application解耦的规范; WSGI server: uWSGI、gunicorn ; WSGI app:bottle、flask、django、tornado uWSGI支持的并发模型 Multiprocess Multithreaded gevent greenlet + uWSGI async uWSGI native async api Coro::AnyEvent Ruby fibers + uWSGI async Ruby threads uGreen + uWSGI asyncuWSGI常用参数配置socket : 地址和端口号;http:开启一个http服务和socket服务;processes : 开启的进程数量;workers : 开启的进程数量,等同于processes;chdir : 指定运行目录wsgi-file : 载入wsgi-file(load .wsgi file)threads : 运行线程数;http-websockets:websocket支持;master : 允许主进程存在;module: 指定需要加载的WSGI模块;callable: 指定哪个变量将被调用,默认是名字为“application”的变量;daemonize : 使进程在后台运行,并将日志打到指定的日志文件;pi ...
阅读全文 »

selenium python笔记

发表于 2018-06-13 | 分类于 爬虫 | 阅读次数:
selenium python 最新版selenium 3.x已经不支持phantomjs了,桑心;需要用phantomjs的可以用selenium2.x selenium调用webdriver可以是本地的浏览器也可以是远程的,本地的webdriver(chrome,firefox)都需要下载driver,远程的需要下载一个selenium-stand,然后java -jar selenium-server-standalone-3.12.0.jar 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748from PIL import Imagefrom selenium import webdriverfrom selenium.webdriver.common.desired_capabilities import DesiredCapabilitiesUSER_AGENT = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'chrome_options = Options()chrome_options.add_argument('user-agent={}'.format(USER_AGENT))chrome_options.add_argument('--headless')# local webdriverdriver = webdriver.Firefox(executable_path='./geckodriver', fi ...
阅读全文 »

获取http only数据

发表于 2018-03-28 | 分类于 爬虫 | 阅读次数:
###nightmare A ConservativePublishedNovember 19, 2016in JavaScript爬虫的终极形态:nightmarenightmare 是一个基于 electron 的自动化库(意思是说它自带浏览器),用于实现爬虫或自动化测试。相较于传统的爬虫框架(scrapy/pyspider),或者dom操作库(cheerio/jsdom),或者基于浏览器的自动化框架(selenium/phantomjs),他的优势在于提供了一个简洁有效 的编程模型。 ###安装 1234npm install init -y npm install --save-dev spectronnpm install --save nightmarenpm run dev ###获取cookie 123456789101112131415161718192021222324252627option = {openDevTools: { mode: 'bottom', // 开发者工具位置:right, bottom, undocked, detach}, show: true, // 要不要显示浏览器 dock: true, // 要不要在Dock上显示图标 waitTimeout: 6000000, // .wait() 方法超时时长,单位:ms executionTimeout: 86400000, // .evaluate() 方法超时时长,单位:ms}let Nightmare = require('nightmare');const nightmare = Nightmare(option);nig ...
阅读全文 »

python中使用grpc

发表于 2018-03-27 | 分类于 grpc | 阅读次数:
###简介gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持. gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。 ###gRPC 是什么?在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。 123pip install grpcpip install grpciopip install grpcio-tools ####编写数据data.proto 12345678syntax = "proto3";package example;message Data { string text = 1;}service FormatData { rpc DoFormat(Data) returns (Data){}} ####生成客户端和服务器端代码 1python -m grpc_tools.protoc -I. –python_out=. –grpc_python_out=. data.proto ## ...
阅读全文 »

改善程序员生活质量的 3+10 习惯

发表于 2017-11-21 | 分类于 生活 | 阅读次数:
段子背后的真相有一则段子是这么描述程序员的职业发展: 某编程语言入门 -> 某编程语言进阶 -> 某编程语言最佳实践 -> 架构的艺术 -> 颈椎病康复指南. 每次看到这个段子,我都只是一笑而过,还偶尔给别人讲起逗逗乐。可如今它不仅是一个段子,更像是一则不那么古老的寓言应验了!或许你会说:腰肌劳损、腰椎盘突出、颈椎弯曲这些在程序员圈子司空见惯了。 真相又是什么呢?因为我身边的例子为数不多,我仍然跟之前一样保持疑问的态度。 可不管真相如何,这封邮件却触动了我,让我想写点东西,来分享我平时在做且自认为很有意义的事情。 认知是一切的基础 古人所说知行合一,强调的是认知和行为一致,人们在做一件事情之前首先是要形成一定的认知。比如,我为什么要持续学习?我为什么要花时间去健身?而只有当我的认知中,认识到学习是具备价值,认识到健身是能给我带来益处的时候,我才会自我驱动地去做这些事情,在行动的过程中达到知行合一。 我曾经给一些朋友讲健康饮食、规律作息和运动健身的好处,讲它们对一个人工作生活有多么重要的影响,当他们若有所感地回应我的时候,我会接着告诉他们一些健康的食物、一些规律的作息时间、一些健身的软件和圈子。到最后,我才发现,他们几乎没有改变。一方面,因为他们没有切身体会到这些好处,另一方面,他们目前的生活并没有无法容忍的痛点,偶尔抱怨一下也只是过过嘴瘾。 根本原因在于认知! 最快改变一个人的认知的方式是残酷地摧毁这个人先前的认知。举个真实极端点的例子:某某因为工作长期无节制的饮食和无规律的作息查出胃癌晚期的时候,即便用所有的钱去换回健康也为时过晚,我相信此时ta比任何人都知道健康的重要性,如果可以再来,他一定会摒弃之前所有的不良习惯,好好生活。 另外一种改变认知的方式就是形成一定的基础认知,然后通过身体力行,循序渐进地付出努力去强化自己的 ...
阅读全文 »

PayPal和LinkedIn创始人Reid Hoffman的ABZ理论

发表于 2017-09-26 | 分类于 职业规划 | 阅读次数:
我们一向把创业视为一件非常有风险的事。说起来挺矛盾,创业者经常看不起那些职场金领,但是前者在后者眼中也只是一群吃了上顿没下顿的流浪汉而已。所以这里最大的挑战就是:一个人如何让自己勇于拓展机会,但同时又不要冒太大风险,乃至于丢掉饭碗血本无归?讲到成功的把这两点结合在一起的方法,Reid Hoffman应该是最有发言权的。 LinkedIn的经历让他了解了职场万象,按他的说法,渐进式的职业规划和冒险创业是可以两全的。他发明了一套独有的职业规划理论,叫做“A-B-Z 职业规划”法则。这虽然也是在做职业规划,但是却强调试验、鼓励不确定性。而且它也不仅仅适合年轻人,对于三四十岁的“职场老人”来说一样适用。所谓的A、B、和Z分别都是什么意思呢?原文:In Startups And Life, You Need Plan A, B, And Z A-B-Z 职业规划A指的是你现在正在做的事情,或者叫主业。比如说它可能是你的专业,是你优势比较集中的领域,你是喜欢它也好不喜欢它也好,现在都得靠它吃饭。用不断的、小小的进步把主业做好当然是属于“敬业”的范畴,不过,当你逐渐的发现你可能需要一个更大的改变的时候,那就是转变到B计划上的时候了。这种转变绝对不是随机的瞎选,而是根据你已经有的经验和知识去看一条新的路径,并且等待这条新的路径逐渐变得清晰。当然,一旦你变完之后,这个B计划就成为新的A计划了。 这个从A到B的过程是最微妙的地方。为了保持决策的合理性,让自己停留在一个安全的轨道上,但同时又不束缚手脚,值得鼓励的方法是去有选择的“赌”一些后果可以收回的小事。既然咱们已经决定要给自己做出些改变了,那走些小弯路是肯定的。不过最好别让他们带来比较永久的损伤。同时我们要想方设法让自己的A计划和B计划逐渐靠拢,让B计划可以帮助到主业上,别变成完全的“不务正业”。 A指的是主业,B自然就是一个潜在的可以去达 ...
阅读全文 »
123…20
Kevin Huang

Kevin Huang

197 日志
24 分类
84 标签
RSS
E-Mail
友情链接
  • 董伟明
  • FOOFISH
  • 酷壳
  • 知道创宇
  • 阮一峰
  • 求索
  • Sdandroid
  • 全栈实验室
© 2023 Kevin Huang 豫ICP备16018730号-1
本站访客数 人次 本站总访问量 次