mac下使用stunnel

今天老司机代理莫名其妙变的超级卡,不知道什么原因,想现在本机上测试一下,所以得在自己电脑上安装stunnel先。 1. 使用homebrew安装stunnel 2. 添加证书 在上面的安装结果中可以看到,stunnel的配置目录在/usr/local/etc/stunnel下面。 因为我要用本机做stunnel-client,所以在该目录下新建一个stunnel-server.pem文件。再把server端的证书拷贝过来,我是直接打开server端的stunnel.pem,然后将里面CERITIFICATE拷贝到stunnel-server.pem文件中。 3. 修改配置文件 编辑/usr/local/etc/stunnel/stunnel.conf文件 ; It is recommended to drop root privileges if stunnel […]

如何处理数据库并发操作

1. 基本问题 假设项目的用户信息包括用户积分,现在需求是给用户增加积分。在Service层有一个方法addCredits负责执行增加积分的操作。 @Override @Transactional("fproxy") public void addCredits(User user, int number) { // user对象为已从数据库读出的用户信息 // 先调用user.getCredits()获取当前的用户积分,增加number数量后写入user对象中 user.setCredits(user.getCredits() + number); //

基于Spring、Hibernate实现通用Dao层

这两天又捡起来老司机的web端代码,需要增加一些新的功能,比如说充值卡(PrepaidCard)模块。在写Dao层的时候发现好麻烦呀,每个实体类都要写一个对应的Dao(还包括接口跟实现),而大部分Dao方法都是基本的增删查改操作(CRUD)。比如getById,save,update,count,query,delete。而这些基本操作的代码其实都是相差无几的,既然这样那我们是不是可以写一个BaseDao来实现基本操作,然后让其他Dao来继承他。 以我现在要写的PrepaidCard实体类为例: /** * 省略各种import **/ @Entity @Table(name = "fp_prepaid_card") public class PrepaidCard implements Serializable { private static final long

iptables基本用法

参考官方文档:https://wiki.centos.org/zh/HowTos/Network/IPTables。 注意 iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT 这句很重要!网上好多其他教程都漏了这句,这样会导致只能建立连接但无法通过该连接接收数据。   example: #!/bin/bash # # iptables 设置脚本 #

坑爹的ipv6 =。=#

因为老司机的墙外服务器快到期了(用的亚马逊首年免费的云服务器,真心感谢),所以找小布要了一台国外的vps,打算用来做老司机代理的墙外服务器。 昨晚把新服务器的环境都配好了,今天上线的时候发现翻墙速度超慢,但并不是所有网站都慢,比如用代理访问baidu这些倒没事,但一访问google、youtube这些墙外大厂就比蜗牛还慢。一开始我还以为是不是新服务器上stunnel或者squid的配置问题,但后来在新服务器上直接使用curl命令获取www.google.com也是超慢而curl www.hawu.me就没问题,这样推断一定是服务器本身问题。然后无意中使用wget www.google.com时,发现打印出来的输出有ipv6信息,心里打个激灵,卧槽难道是因为ipv6搞得鬼?使用curl -4 www.google.com发现果然网速正常了。然后检查ifconfig发现果然开启了ipv6。 使用wget(以及curl、squid)获取一个url地址,首先会对目标url进行域名解析,对于google这种大厂来说,域名解析会返回ipv6与ipv4地址,baidu的话,只返回ipv4地址。而由于本机系统开启了ipv6,那么wget这些程序默认会优先使用ipv6来与目标地址进行连接。但不幸的是通常我们服务器所处的网络环境(服务器到目标地址之间的路由环境)不支持ipv6,所以就会卡在这个ipv6连接上,直到超时后才会重新使用ipv4去建立连接。 既然猜到了故障原因,解决起来就很快了,要禁用ipv6,在/etc/sysctl.conf中添加如下两行: net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 然后重启系统即可。

写在16年年中

1111,7月30日其实已经不算年中了,好快转16年过半了。今年还算好,起码4、5月份把老司机代理网站做出来了,虽然支付宝接口一直懒得去整。(麻痹阿里简直就是工信部的狗腿,各种审核麻烦的一逼。)6月的时候跟将军聊了一下,准备做套一元购的系统,网上找的代码挺懒,想用laravel重构,6月大半个月都算在学laravel吧,挺好用的,虽然复杂但功能强大插件也多,简直php届的spring。7月偷懒了。。。玩pokemon玩了一礼拜看电影看了一礼拜卧槽转眼就7月底了。自我反省一秒钟,另外除了懒散,我觉得我写代码还有一个很大的缺点,爱揪细节,6月的时候一直在纠结用laravel+entrust先把基础的用户角色权限(RBAC,Role-Based Access Control)模块设计好,但其实我的代码还只是搭好了框架,写完用户注册登录模块,其他都还没写,却在纠结这个纠结了好几天。后来想想真是没有这个必要,因为有了中间件(laravel中叫中间件,spring中是拦截器),可以很方便的在项目后期再对页面添加权限控制,所以根本没必要在开始的时候去纠结这事,so stupid。 另外,辛苦老婆大人,广州的房子算是装修好了,再通风两个月差不多就能搬进去入住了,嘿嘿,耗时大半年的“精装”哈哈,期待,不过这一两年不知道住的时间多不多。 下半年除了要接着赶紧搞那一元购代码。还想搞一套电影下载站让小布去推广,收点广告费也挺好的。还想写个撮合交易系统,可以用来做博彩,像betfair那样,或者用来预测电影票房也不错,看着挺有意思的。 还有今年算是实打实的投了一家网吧,准备做夫妻档了哈哈,希望能赚到钱。

坑,Laravel的cache系统与entrust与throttle

laravel默认是使用file做cache驱动的,但file与database驱动的cache无法支持tag,这就与我用到的entrust插件冲突了,所以改成了array作为cache系统的驱动。 后来想用throttle中间件的时候,发现throttle无效,一猜就是cache的问题,因为改用array做cache后,array其实相当于一次进程获得的内存空间开辟的一块数组,那么如果cache在这个数组里面,请求处理完后,这个数组已经没有啦!所以throttle根本不起作用。想了想最好的办法还是得换redis或者memcache做cache驱动,尤其在生产环境。  

【转】实用的javascript调试小技巧

首先得强调一下调试前端javascript的基本命令:console.log(obj),用来在浏览器控制台输出对象。其实除了console.log,还有各种console.error、console.warn、console.info、console.assert等命令。console代表的是浏览器控制台,firefox与chrome的console命令大部分是通用的,更详细的命令介绍可以参考:Chrome Console API Reference (ps:在旧版本的ie,比如ie9,如果在js代码中使用了console.log,那么只有在打开F12,即ie的开发者工具时候,才能识别console对象。如果没有打开ie的开发者工具,会导致脚本无法识别console,js代码无法执行😰   @20171029) 原文地址:10+ 实用的 JavaScript 调试小技巧   1. debugger 除了console.log,debugger就是另一个我很喜欢的快速调试的工具,将debugger加入代码之后,Chrome会自动在插入它的地方停止,很像C或者Java里面打断点。你也可以在一些条件控制中插入该调试语句,譬如: if (thisThing) { debugger; } 2.

Laravel框架 – 打印容器实例

初学laravel的时候,看到service provider这一块,一直纠结如何才能打印出容器内所有的service provider,因为光靠config/app.php文件,很难从alias看出其对应的service provider到底是哪个。后来才发现,其实在程序的任意地方(Application启动后),都可以通过 Container::getInstance()这个静态方法获取当前的Application实例。或者可以使用在全局helps.php中定义的的 app()方法来获取当前Application实例。 Route::get('/test', function () { dd(app()); // dd(Illuminate\Container\Container::getInstance()); }); 注意: 在laravel中打印变量尤其是“超大型”变量的时候,千万不要直接使用var_dump()。一来不直观,二来大型变量直接 var_dump可能会导致浏览器卡死(我猜应该是卡死在尝试将var_dump数据解析成dom上面)。=。=# 最好使用larave的全局函数dd()或者dump(),输出又美观,又不会卡死浏览器。 ps: 最好用dd吧,少用dump,今天发现一个bug,如果使用dump的话,会导致cookie操作失效=。=#

关于var_dump输出的#号

php中使用var_dump打印一个对象的时候,其输出包括对象名,对象包含的成员变量(成员变量个数),以及一个“#序号”。像这样: object(B)表示这个对象是一个类名为B的实例;(2)表示这个对象内部有2个成员变量,分别是’name’与’age’;但#2代表什么呢? 其实我个人感觉(我并没有找到确切的说明文档,这估计得去看看php内核了),php中新建一个对象(不包括int、string、array这些基本类型的实例)的时候,会将该对象放在某个内核数组中。而var_dump出来的这个#序号,就表示该对象在这个php内核数组中序号。不过这序号并不能代表该对象是第几个被创建的,举个例子: <?php class A { public $name; } class B { public $name; public $age; } // #1,此时内核中的对象数组长度为1

Scroll to Top