前言 虚拟语法树(Abstract Syntax Tree, AST)是解释器/编译器进行语法分析的基础, 也是众多前端编译工具的基础工具, 比如webpack, postcss, less等. 对于ECMAScript, 由于前端轮子众多, 人力过于充足, 早已经被人们玩腻了. 光是语法分析器就有uglify, acorn, bablyon, typescript, esprima等等若干种. 并且也有了AST的社区标准: ESTree. 这篇文章主要介绍如何去写一个AST解析器, 但是并不是…
动手造轮子:实现一个简单的 EventBus Intro EventBus 是一种事件发布订阅模式,通过 EventBus 我们可以很方便的实现解耦,将事件的发起和事件的处理的很好的分隔开来,很好的实现解耦. 微软官方的示例项目 EShopOnContainers 也有在使用 EventBus . 这里的 EventBus 实现也是参考借鉴了微软 eShopOnContainers 项目. EventBus 处理流程: 微服务间使用 EventBus 实现系统间解耦: 借助 EventBus 我…
动手造轮子:实现一个简单的 AOP 框架 Intro 最近实现了一个 AOP 框架 -- FluentAspects,API 基本稳定了,写篇文章分享一下这个 AOP 框架的设计. 整体设计 概览 IProxyTypeFactory 用来生成代理类型,默认提供了基于 Emit 动态代理的实现,基于接口设计,可以扩展为其他实现方式 接口定义如下: public interface IProxyTypeFactory { Type CreateProxyType(Type serviceType);…
大家工作或者平时是不是经常遇到要读写一些简单格式的Excel? shit!~很蛋疼,因为之前吹牛,就搞了个这东西,还算是挺实用,和大家分享下. 厌烦了每次搞简单类型的Excel读写?不怕~来,喜欢流式操作?来~,喜欢用lambda(虽然java的比较蛋疼~),来~看这个~ 哈哈,如果你用的不是java8~~没问题,那就默默地用老方式匿名类来实现这些功能吧,但是这并不妨碍您的使用哈哈~~~ 更新多次~希望大家也能够集思广益~ github地址:https://github.com/MatrixSe…
本文是一起学习造轮子系列的第三篇,本篇我们将从零开始写一个React-Redux,本系列文章将会选取一些前端比较经典的轮子进行源码分析,并且从零开始逐步实现,本系列将会学习Promises/A+,Redux,react-redux,vue,dom-diff,webpack,babel,kao,express,async/await,jquery,Lodash,requirejs,lib-flexible等前端经典轮子的实现方式,每一章源码都托管在github上,欢迎关注~ 相关系列文章: 一起学…
重复造轮子系列——基于Ocelot实现类似支付宝接口模式的网关 引言 重复造轮子系列是自己平时的一些总结.有的轮子依赖社区提供的轮子为基础,这里把使用过程的一些觉得有意思的做个分享.有些思路或者方法在大神看来可能会比较low.但是能解决实际问题,相信有需要的人也在寻找类似的解决方案.这里可以算作是提供了一种思路,类似问题如果有读者能有更好的解决方案,愿闻其详. 若有阅读后引起内心冲突或者愤怒等不适以及自觉被误导者,不需要切换到抖音等欢乐频道进行综合调理,直接就可以在评论区吐槽. 网关简介 什么是…
前言 RPC 框架是后端攻城狮永远都绕不开的知识点,目前业界比较知名有 Dubbo.Spring Cloud 等.很多人都停留在了只会用的阶段,作为程序猿,拥有好奇心深入学习,才能有效提高自己的竞争力.再进一层的同学,会去翻源码,看功能是如何实现的,这是很好的开始.看源码过一段时间容易忘记,我觉得看完源码之后,更好的做法是自己动手开发一个出来,这样你对框架的理解会更深.我认为,"会用"."会读源码"."会写出来"是完全不一样的水平. 本系列 &q…
重复造轮子系列——基于FastReport设计打印模板实现桌面端WPF套打和商超POS高度自适应小票打印 一.引言 桌面端系统经常需要对接各种硬件设备,比如扫描器.读卡器.打印机等. 这里介绍下桌面端系统打印经常使用的场景. 1.一种是类似票务方面的系统需要打印固定格式的票据.比如景点门票.车票.电影票. 这种基本是根据模板调整位置套打. 2.还有一种是交易小票,比如商超POS小票,打印长度会随着内容的大小自动伸缩. 这种就不仅仅是固定格式的套打了,还得计算数据行以适应不同的打印长度. 打印方式…
ROS与Matlab系列:一个简单的运动控制 转自:http://blog.exbot.net/archives/2594 Matlab拥有强大的数据处理.可视化绘图能力以及众多成熟的算法函数,非常适合算法开发:在控制系统设计中,Simulink也是普遍使用的设计和仿真工具.而ROS系统,则是一种新的标准化机器人系统软件框架.通过ROS,你可以使用大量的示例代码和开源程序轻松地完成机器人编程和控制任务. 如何利用matlat和ROS不同的优势,协同进行机器人设计与仿真? 如何用matlat程序通…
javascript编写一个简单的编译器(理解抽象语法树AST) 编译器 是一种接收一段代码,然后把它转成一些其他一种机制.我们现在来做一个在一张纸上画出一条线,那么我们画出一条线需要定义的条件如下:使用 Paper定义纸的颜色,Pen定义笔的颜色,Line指画出一条线,100指在颜色参数中代表100%的黑色 或 css中的rgb(0%,0%,0%). 那么生成的线使用灰色来表示,那么就是 50了,纸的面积是 100*100, 线条的宽度是1,线段的起点和终点是相对于左下角的x,y坐标来定义.…
[前言] OOM框架想必大家在Web开发中是使用频率非常之高的,如果还不甚了解OOM框架,那么我们对OOM框架稍作讲解. OOM顾名思义,Object-Object-Mapping实体间相互转换.常见的使用场景有两个实体要通过DTO对象进行页面的渲染,那么我们就需要通过对DTO对象的一个一个属性进行赋值,最终返回.整个过程是单调又繁琐的,甚至严重影响了代码的整洁性.更有强迫症高度患者可能看着这一坨shi一样的代码阵阵痉挛...因此,我们就想,能不能用一种简介的方法进行自动映射两个,三个甚至更多的…
一说到写日志,大家可能推荐一堆的开源日志框架,如:Log4Net.NLog,这些日志框架确实也不错,比较强大也比较灵活,但也正因为又强大又灵活,导致我们使用他们时需要引用一些DLL,同时还要学习各种用法及配置文件,这对于有些小工具.小程序.小网站来说,有点“杀鸡焉俺用牛刀”的感觉,而且如果对这些日志框架不了解,可能输出来的日志性能或效果未毕是与自己所想的,鉴于这几个原因,我自己重复造轮子,编写了一个轻量级的异步写日志的实用工具类(LogAsyncWriter),这个类还是比较简单的,实现思路也很…
ArrayList是Java集合框架中一个经典的实现类.他比起常用的数组而言,明显的优点在于,可以随意的添加和删除元素而不需考虑数组的大小.处于练手的目的,实现一个简单的ArrayList,并且把实现的过程在此记录. 实现的ArrayList主要的功能如下: 默认构造器和一个参数的有参构造器 add方法 get方法 indexOf方法 contains方法 size方法 isEmpty方法 remove方法 sort方法 这个简单的ArrayList类 取名为SimpleArrayList,全部…
本节使用一个简单的例子引出Python C/C++ API的详细使用方法.针对的是CPython的解释器. 目标:创建一个Python内建模块test,提供一个功能函数distance, 计算空间中两个点之间的距离. 可以在Python代码这样使用test模块: import test s = test.distance((0, 0, 0), (1, 1, 1)) 先上代码: [test.c] #include <Python.h> #include <math.h> static…
一.获取数据 想弄一个数据库,由于需要一些人名,所以就去百度一下,然后发现了360图书馆中有很多人名 然后就像去复制一下,发现复制不了,需要登陆 此时f12查看源码是可以复制的,不过就算可以复制想要插入数据也是很麻烦的.既然复制走不通,于是我抱着探索知识的精神,打开了Visual Studio 首先我们需要先拿到整个页面的数据,此时的话可以使用WebClient对象来获取数据(HttpWebRequest方式稍微有点麻烦),然后使用byte数组来接受一下返回值 public static voi…
1.该项目主要有下面的两个作用 (1)将xml文件解析成对象的List对象,xml文件可以来自手机本地,也可以来自服务器返回的xml数据 (2)强list对象保存成xml文件,xml保存到手机的内存卡上 Android项目也是采用mvc的框架 在手机的存储空间中保存wy目录下了存在person.xml文件 <?xml version='1.0' encoding='UTF-8' standalone='yes' ?> <Persons> <person id="23…
LinkedList与ArrayList都是List接口的具体实现类.LinkedList与ArrayList在功能上也是大体一致,但是因为两者具体的实现方式不一致,所以在进行一些相同操作的时候,其效率也是有差别的. 对于抽象的数据结构--线性表而言,线性表分为两种,一种是顺序存储结构的顺序表,另一种是通过指针来描述其逻辑位置的链表. 针对于具体的Java实现: 顺序存储的顺序表是用数组来实现的,以数组为基础进行封装各种操作而形成的List为ArrayList 链表是用指针来描述其逻辑位置,在J…
学习目标 创建一个Scrapy项目 定义提取的结构化数据(Item) 编写爬取网站的 Spider 并提取出结构化数据(Item) 编写 Item Pipelines 来存储提取到的Item(即结构化数据) 一. 新建项目(scrapy startproject) 在开始爬取之前,必须创建一个新的Scrapy项目.进入自定义的项目目录中,运行下列命令: scrapy startproject mySpider 其中, mySpider 为项目名称,可以看到将会创建一个 mySpider 文件夹,…
近期开源了一个面向协议设计的网络请求库 MBNetwork,基于 Alamofire 和 ObjectMapper 实现,目的是简化业务层的网络请求操作. 须要干些啥 对于大部分 App 而言,业务层做一次网络请求通常关心的问题有例如以下几个: 怎样在任何位置发起网络请求. 表单创建. 包括请求地址.请求方式(GET/POST/--).请求头等-- 载入遮罩. 目的是堵塞 UI 交互,同一时候告知用户操作正在进行. 比方提交表单时在提交按钮上显示 "菊花",同一时候使其失效. 载入进度…
作者:DeppWang.原文地址 我通过实现一个简易的 Spring IoC 容器,算是入门了 Spring 框架.本文是对实现过程的一个总结提炼,需要配合源码阅读,源码地址. 结合本文和源码,你应该可以学到:Spring 的原理和 Spring Boot 的原理. Spring 框架是 Java 开发的,Java 是面向对象的语言,所以 Spring 框架本身有大量的抽象.继承.多态.对于初学者来说,光是理清他们的逻辑就很麻烦,我摒弃了那些包装,只实现了最本质的功能.代码不是很严谨,但只为了理…
之前在 "for与while的洪荒之力" 中介绍到计时器,不过那样弄感觉好麻烦啊, 碰巧昨天学Java的时候,讲到求余可以用来求时间 ! for与while链接: http://www.cnblogs.com/Ruby517/p/5738344.html 所以今天我们来用一种更简单的方法求出时间: 首先,先来个简单的,看看求 余符号 "%" 究竟有什么用? 通常,一周的第0天是周日,第一天是周一 ...... # coding: utf-8 print u"…
这个代码是我上个公司工作项目的里面内存管理(基于伙伴算法)的一个简化又简化的版本. 因为没有内存边界检查: 因为没有内存使用统计: 因为没有考虑线程安全: 因为没有内存分配操作的具体文件位置信息: 因为没有考虑内存的浪费: 因为特别简单...所以也有一些用处,我定义了最小的内存为8字节,因此可以将任意内存大小散列到8的倍数之内,对于64位的通信系统来说,字节对齐是非常重要的: mem_pool.h #ifndef MEM_POOL_H_ #define MEM_POOL_H_ typedef s…
这些字符代码是以前写的,源于很久很久以前的一个VC++项目,在当时的部门编程比赛里因为用了项目代码的xsplit函数,万万没想到,那个做了几年的项目里面居然有坑..xsplit函数居然不能split连续2个空格,囧,领导说,你要是用ruby你就满分了,让我与满分失之交臂,当时没有人得满分,因此记忆深刻: 后来又是boost C++库流行,这个我就不说了,用过的都说好,但是也有些小麻烦,就是用的多了,编译就特别慢,那个时候还不知道用incredbuild,于是乎就在代码上下功夫了. 做了一些常用的…
在ASP.NET世界中摸爬滚打好几年,用过了各种框架,在最初的ASP.NET web from 到现在的MVC 在起初的经典三层,到现在的MVC  IOC  注入 . 突然发现,有些时候真不是跟风用一些框架就好,   那到底用什么框架呢,我个人认为,只要自己用起来哦哦顺手就是最好的框架. 下面就分享下我自己写的框架, 实际上也是经典的三层模式+工厂模式 后期会增加支持Mssql,mysql ORM我用的是EF+Dapper    EF更多的做修改,删除,添加操作    Dapper更多做的是查询…
前年一时脑热(理想很丰满,现实很骨感),写了这个最短路径优先的低效版本,且留着回忆吧. spf.h #ifndef SPF_H_ #define SPF_H_ typedef struct { int length; char src; char dst; char prev_hop; } dijkstra; #define MAX 1024 #define NODE_NUM 5 #define TRUE 1 #define FALSE 0 #endif spf.c #include <stdi…
作为一名新时代的90后猿 在swift大势所趋的时候  怎能不会Carthage 配置它其实很简单  下面我们一步一步来 (1)打开你的终端 输入 brew update brew install carthage 这两个命令就不用多解释了吧 (2)等待它安装完成 然后cd到你的项目 创建一个Carthage文件 这个文件就和pods里那个文件差不多的作用 在这个文件中写下你要的第三库 例如(3)然后终端执行 carthage update 执行过程如下图 执行的过程可能会有点稍长 等待一会就好…
题目地址:https://www.acwing.com/problem/content/244/ 题目描述: 给定一个长度为N的数列A,以及M条指令,每条指令可能是以下两种之一: 1.“C l r d”,表示把 A[l],A[l+1],…,A[r] 都加上 d. 2.“Q l r”,表示询问 数列中第 l~r 个数的和. 对于每个询问,输出一个整数表示答案. 输入格式 第一行两个整数N,M. 第二行N个整数A[i]. 接下来M行表示M条指令,每条指令的格式如题目描述所示. 输出格式 对于每个询问…
大概就这个样子 用到JSON解析和Volly发送Get请求两个知识点 关于Volly的用法请看我的这篇: http://www.cnblogs.com/AceIsSunshineRain/p/5177713.html JSON解析请看 http://www.cnblogs.com/AceIsSunshineRain/p/5178305.html JSON数据是这样 { "resultcode":"200", "reason":"Retu…
题目:https://www.acwing.com/problem/content/244/ 题意:区间加,区间查询 思路:我们把原先那个差分数组分解一下 ∑i=1x∑j=1ib[j]=∑i=1x(x−i+1)×b[i]=(x+1)∑i=1xb[i]−∑i=1xi×b[i] #include <bits/stdc++.h> using namespace std; #define ll long long #define lowbit(x) x&(-x) const int N=2e5…
本文是一起学习造轮子系列的第二篇,本篇我们将从零开始写一个小巧完整的Redux,本系列文章将会选取一些前端比较经典的轮子进行源码分析,并且从零开始逐步实现,本系列将会学习Promises/A+,Redux,react-redux,vue,dom-diff,webpack,babel,kao,express,async/await,jquery,Lodash,requirejs,lib-flexible等前端经典轮子的实现方式,每一章源码都托管在github上,欢迎关注~ 相关系列文章: 一起学习…