sublime text 3 3143注册码

—– BEGIN LICENSE —–
TwitterInc
200 User License
EA7E-890007
1D77F72E 390CDD93 4DCBA022 FAF60790
61AA12C0 A37081C5 D0316412 4584D136
94D7F7D4 95BC8C1C 527DA828 560BB037
D1EDDD8C AE7B379F 50C9D69D B35179EF
2FE898C4 8E4277A8 555CE714 E1FB0E43
D5D52613 C3D12E98 BC49967F 7652EED2
9D2D2E61 67610860 6D338B72 5CF95C69
E36B85CC 84991F19 7575D828 470A92AB
—— END LICENSE ——

使用Python调用动态库

我个人在日常使用电脑时,经常需要使用Google,于是就要切换代理,基本上是一会儿切换为代理,一会儿切换成直连,老是打开internet 选项去设置,很不方便,于是我萌生了一个想法:

做一个开关,我想用代理的时候,就点一下打开。不想用时,就再点一下关闭。

简单的说,就是自动更改IE的代理设置。

实际上这个功能可以使用纯python实现,其核心的原理就是使用 Windows API InternetSetOption。但是python去调用这个api相当复杂,不过人家已经实现过了,参见stackoverflow的问题
继续阅读使用Python调用动态库

远程连接到Heroku的Postgres数据库

我在我自己的电脑上弄死都连接不上heroku的数据库,然后发现原来远程连接是需要SSL的,通过进一步的搜索,最后得出了结论:需要使用ssl和设置sslfactory。
我个人一直在使用Jetbrains DataGrip,要连接到heroku postgres,打开DataGrip,输入用户名、密码、主机地址和数据库名。
然后切换到advance的tab去,将ssl设置为true,讲sslfactory设置为org.postgresql.ssl.NonValidatingFactory
继续阅读远程连接到Heroku的Postgres数据库

使用 SignalR与SSE(Sever sent event)向客户端推送提示信息

最近有个项目想把c/s的代码转成mvc的,这听起来并不困难。
如果UI和业务逻辑良好分离了的话,不会花太多的功夫,应该多数的内容都能重复利用。

但在实际的操作过程中,发现业务逻辑代码和UI提示全是混在一起的,尤其里面有这样的代码很多:

public class MyLogic
{
    public int DoPress(string bin)
    {
        if (string.IsNullOrEmpty(bin))
        {
            System.Windows.Forms.MessageBox.Show("数据为空,请登录后使用");
            return -1;
        }

        return 0;
    }
}

继续阅读使用 SignalR与SSE(Sever sent event)向客户端推送提示信息

在IDEA下使用Spring Boot的热加载(Hotswap)

你是否遇到过这样的困扰:

当你写完一段代码后,要看到效果,必须点击IDEA的停止按钮,然后再次重启启动项目,你是否觉得这样很烦呢?

如果你觉得很烦,本文就是用来解决你的问题的。

所谓热加载,就是让我们在写完一段代码后,不必重启容器,刷新浏览器就能快速看到结果。

在IDEA中需要三个步骤来达到效果:
继续阅读在IDEA下使用Spring Boot的热加载(Hotswap)

使用Spring boot + jQuery上传文件(kotlin)

文件上传也是常见的功能,趁着周末,用Spring boot来实现一遍。

前端部分

前端使用jQuery,这部分并不复杂,jQuery可以读取表单内的文件,这里可以通过formdata对象来组装键值对,formdata这种方式发送表单数据更为灵活。你可以使用它来组织任意的内容,比如使用

formData.append("test1","hello world");

继续阅读使用Spring boot + jQuery上传文件(kotlin)

使用intelliJ创建 spring boot + gradle + mybatis站点

Spring boot作为快速入门是不错的选择,现在似乎没有看到大家写过spring boot + gradle + mybatis在intellij下的入门文章,碰巧被做.Net的同学问到,我想我也可以写这样一篇。
入门Java的人最大的问题是步骤繁琐,不知道如何开始,之前我也建议过我的一个小弟用BlueJ去学Java,可是这个东西学得他很迷茫,根本无法获得成就感,不知道能搞出什么有意思的东西,那我们就来点正式的吧,看看怎么从零开始建一个你自己的Java网站。

软件安装

作为入门版,当然我们要从软件安装开始咯。
要安装的软件有
– JDK: http://www.oracle.com/technetwork/java/javase/downloads/index.html
– IntelliJ IDEA:https://www.jetbrains.com/idea/
– Gradle:https://gradle.org/install/
– Tomcat: 可选,这部分网上到处都是文章,就不重复。
继续阅读使用intelliJ创建 spring boot + gradle + mybatis站点

架构漫谈系列(3)其他原则

在最开始,先重复一下第一篇的内容,这个系列是写我们如何来组织代码,如何提高可扩展性和维护性的,并不涉及到网络拓补结构或各类中间件的使用。

首先,提一提面向对象设计的五大原则:SOLID。

SOLID原则

SOLID都是些什么呢?
– SRP, Single responsibility principle,单一职责。一个类只能有一个职责,如果这个类需要被修改,那只能是某一个需求更改导致的(仅此一个,没有更多的)。例如,book类里面有一个print的函数,当我们修改book类的书名时,我们需要改book类,当我们把book的打印从打印到A4改成打印成6寸时,也需要修改此类,这就违背了SRP原则。
– OCP, Open/closed principle,开闭原则,Open for extension, but closed for modification
– LSP, Liskov substitution principle,父类能够被子类无忧的替代,不必担心产生副作用。
– ISP, Interface segregation principle,如果一个接口能够被拆分成多个接口,那就不该用这个通用的接口来呈现。
– DIP, Dependency Inversion principle,依赖于抽象,而不依赖与具体的实现。
继续阅读架构漫谈系列(3)其他原则

架构漫谈系列(2) 封装(Encapsulation)

这是这个系列的第二篇。在第二篇里,我决定讲一讲封装。
程序的不同部分应该用封装去互相隔离,模块之间应该不应该产生很随意的关联。

可能有的人觉得不解,又或觉得是有道理的废话,不急,先一步一步来。

我们先来看看面向对象的三个基本特征是什么?
– 继承
– 多态
– 封装

如果你是科班毕业,这6个字应该是你第一次学到类(class)的时候就听老师说了。 继续阅读架构漫谈系列(2) 封装(Encapsulation)

架构漫谈系列(1) 关注点分离

很想写相关的内容,一直以来这方面的东西很杂,自己各方面都多多少少有些总结,但是没有系统的成文,始终觉得是个遗憾。
这是这个系列的第一篇。
本文说的架构,还并不是说的Tier层的架构,这里面不会涉及到分布式、缓存、网络结构等等的布局,而是集中在软件的内部,是代码层级的,考虑这点架构的点,目的是在于帮助我们写出清晰、易维护的软件。

关注点分离(Separation of concerns, SoC)

这个准则应该作为我们开发和架构的指导性的原则。在该原则下,软件应该按照其业务来将软件本身划分成不同的部分,从而进一步降低耦合性,不过,这感觉是句废话,大家好像都懂。
继续阅读架构漫谈系列(1) 关注点分离

Caching漫谈–关于Cache的几个理论

如今缓存是随处可见了,如果你的程序还没有使用到缓存,那可能是你的程序并发量很低,或对实时性要求很低。我们公司的ERP在显示某些报表时,每次打开都需要花上几分钟的时间,假如搜索引擎也是这么慢,我想这家搜索引擎早就被淘汰了。
这些ERP报表是否该引入缓存加速一下呢……
使用缓存,就是在取出数据结果后,暂时将数据存储在某些可以快速存取的位置(例如各种NoSQL如Redis,HBase,又或MemoryCache等等),于是就可以让这些耗时的数据结果多次重复的利用,不必每次重复请求相同的数据,节省CPU和I/O,加速程序的响应。
使用缓存能让加载数据的延迟降低,I/O操作减少,从而性能得到提高。
缓存使用起来很容易,但是保持缓存的一致性却困难得多。有一些前人总结的经验和方法,我们可以借鉴一下。
缓存重点在于写入的时候,相关数据的更新问题,如果数据一直没有更新或删除操作,那缓存就不会存在脏数据一说了。
关于缓存写入,至少有4种写入的策略。

write-through

这个动作发生在Cache层。是指在写数据时,同时写入到缓存和DB中,这个写入操作认为是一个单一的事务,也就是说,在更新Cache时,我们先更新了Cache中的数据,然后接着更新Db中的数据。在DB的数据完成更新前,程序还不会返回,一直等到数据库存储的结果。可想而知,这种做法不会给写入数据带来更高的性能。
继续阅读Caching漫谈–关于Cache的几个理论

PyQt5环境搭建及cx_freeze打包exe

Python的图形库也有好几个,Qt文档和使用面还是要广一些。
打包成可执行文件的也有好几个,PyInstaller用的比较多,但是PyInstaller目前还不支持Python3.6(开发版支持3.6,但是我测试我的项目,打包出来的exe执行结果有问题)。
于是就选择了PyQt+cx_freeze。
安装PyQt5和cx_freeze用pip命令即可安装,非常方便。

pip install PyQt5
pip install cx_freeze

安装完毕后,测试一下:
继续阅读PyQt5环境搭建及cx_freeze打包exe

Python爬虫-爬小说

用途

用来爬小说网站的小说默认是这本御天邪神,虽然我并没有看小说,但是丝毫不妨碍我用爬虫来爬小说啊。
如果下载不到txt,那不如自己把txt爬下来好了。

功能

  • 将小说取回,去除HTML标签
  • 记录已爬过/未爬过的章节
  • 从最后爬过那一页开始继续爬,不会重复爬取爬过的目录
    因为爬过的章节是要有顺序的,目前版本还没有支持多线程。(线程混乱分不清章节先后)
    继续阅读Python爬虫-爬小说