Posted on

树莓派安装lede当无线路由器

下载
进入
http://downloads.lede-project.org/releases/17.01.4/targets/brcm2708/
bcm2708是给第一代的,bcm2709给第二代,bcm2710就是给RPi3的
http://downloads.lede-project.org/releases/17.01.4/targets/brcm2708/bcm2710/lede-17.01.4-brcm2708-bcm2710-rpi-3-ext4-sdcard.img.gz
写入sd卡
在win下使用win32diskimager把下载的img文件写入到sd卡中
配置网络
wan口使用pppoe拨号,wifi使用内置无线网卡
安装ss
进入system-software  搜索shadowsocks-libev-mbedtls

Posted on

laravel的虚拟机Homestead安装

1,安装virtualbox和vagrant
2.下载homestead的box.
官方的命令 vagrant box add laravel/homestead 不建议使用
因为直接使用vagrant下载太慢,所以建议用下载工具下载
3.下载homestead配置
git clone https://github.com/laravel/homestead.git Homestead
在cmd下运行init.bat
4.生成一对rsa密钥,在Homestead.yaml文件中指定公钥
5.安装homestead.box
新建一个homestead.json文件

{
"name": "laravel/homestead",
"versions": [{
"version": "2.1.0",
"providers": [{
"name": "virtualbox",
"url": "file://homestead.box"
}]
}]
}

接着运行命令:
vagrant box add homestead.json
启动虚拟机:
vagrant up

Posted on

virtualbox安装macOS Sierra开发环境

1.安装virtualbox
2.下载macOS 10.12 Sierra Final by TechReviews.vmdk
新建虚拟机,使用下载好的虚拟硬盘文件,内存选择4g以上,cpu选择2核,去掉软驱,显存设置为128mb。
使用管理员权限打开cmd,输入下面命令

cd “C:\Program Files\Oracle\VirtualBox\”
VBoxManage.exe modifyvm “MacOS” –cpuidset 00000001 000106e5 00100800 0098e3fd bfebfbff
VBoxManage setextradata “MacOS” “VBoxInternal/Devices/efi/0/Config/DmiSystemProduct” “iMac11,3”
VBoxManage setextradata “MacOS” “VBoxInternal/Devices/efi/0/Config/DmiSystemVersion” “1.0”
VBoxManage setextradata “MacOS” “VBoxInternal/Devices/efi/0/Config/DmiBoardProduct” “Iloveapple”
VBoxManage setextradata “MacOS” “VBoxInternal/Devices/smc/0/Config/DeviceKey” “ourhardworkbythesewordsguardedpleasedontsteal(c)AppleComputerInc”
VBoxManage setextradata “MacOS” “VBoxInternal/Devices/smc/0/Config/GetKeyFromRealSMC” 1

然后启动虚拟机,开始安装系统

Posted on

支付宝接口研究

我自己要做一个支付接口,于是看看业内的最佳实践支付宝是怎么做的。
1.商户系统用get或者post方式请求支付宝api
2.用户在支付宝系统上支付完成后,get请求商户url,同时post请求商户url,返回异步参数
3.商户系统还可以通过支付宝api查询支付情况
所以支付宝接口接受一次输入,有2次输出,还提供一个查询api。

Posted on

php中的pdo用法

1.设置DSN(数据源名称)

$host = '127.0.0.1';
$db   = 'test';
$user = 'root';
$pass = '';
$charset = 'utf8';
$dsn = "mysql:host=$host;dbname=$db;charset=$charset";
$opt = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];
$pdo = new PDO($dsn, $user, $pass, $opt);

2.执行queries

$stmt = $pdo->query('SELECT name FROM users');
while ($row = $stmt->fetch())
{
    echo $row['name'] . "\n";
}

3.预防sql注入

2种写法:

$stmt = $pdo->prepare('SELECT * FROM users WHERE email = ? AND status=?');
$stmt->execute([$email, $status]);
$user = $stmt->fetch();
// or
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email AND status=:status');
$stmt->execute(['email' => $email, 'status' => $status]);
$user = $stmt->fetch();

 

Posted on

mysql基础

1.关系数据库优点:

比普通文件的数据访问速度快。
更容易查询并提取满足特定条件的数据
有专门的内置机制处理并发访问。
可以提供对数据的随机访问。
具有内置的权限系统。
表格:关系数据库由关系组成,这些关系通常称为表格。
列:表中的每一列都有唯一的名称,包含不同的数据。每一列都有一个数据类型。
行:每一行代表一条记录。
键:标识每一个特定记录的方法。
模式:数据库整套表格的完整设计称为数据库的模式。它是数据库的设计蓝图。
关系:外键表示两个表格数据的关系。
三种基本关系:一对一、一对多、多对多。

2.设计数据库

考虑建模的实际对象:当创建一个数据库时,我们经常为现实世界的实体和关系建立模型,并且存储这些实体对象与关系的信息。
避免保存冗余信息:1.空间浪费。2.导致数据更新不一致
使用原子列值:每一行的每个属性只存储一个数据。
选择有意义的键。
考虑要询问数据库的问题。
避免多个空属性的设计。
表格类型的总结:
1.描述现实世界的简单表。这些表也可能包含其他简单对象的键,他们之间有一对一或一对多的关系。
2.描述两个现实世界对象的多对多关系的关联表。

Posted on

安装laravel

1,安装composer

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '669656bab3166a7aff8a7506b8cb2d1c292f042046c5a994c43155c0be6190fa0355160742ab2e1c88d40d5be660b410') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

移动到PATH目录:

mv composer.phar /usr/local/bin/composer

2.安装laravel

composer global require "laravel/installer"

设置环境变量:

echo $PATH
export PATH=$PATH:/home/ubuntu/.config/composer

新建一个laravel程序:

laravel new blog

 
 

Posted on

ubuntu 14.04 安装bbr

bbr可以简单理解为tcp加速算法。

1.查看当前内核

uname -r
输出4.4.0-78-generic

2.查看可用内核

dpkg -l|grep linux-image
输出:
ii linux-image-4.4.0-78-generic 4.4.0-78.99~14.04.2 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii linux-image-4.4.0-79-generic 4.4.0-79.100~14.04.1 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii linux-image-extra-4.4.0-78-generic 4.4.0-78.99~14.04.2 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii linux-image-extra-4.4.0-79-generic 4.4.0-79.100~14.04.1 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii linux-image-generic-lts-xenial 4.4.0.79.64 amd64 Generic Linux kernel image

3.下载最新内核

去http://kernel.ubuntu.com/~kernel-ppa/mainline/页面底部下载最新内核:
wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.12-rc4/linux-image-4.12.0-041200rc4-generic_4.12.0-041200rc4.201706042031_amd64.deb

4.安装

sudo dpkg -i linux-image-4.12.0-041200rc4-generic_4.12.0-041200rc4.201706042031_amd64.deb
安装最后输出:
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.12.0-041200rc4-generic
Found initrd image: /boot/initrd.img-4.12.0-041200rc4-generic
Found linux image: /boot/vmlinuz-4.4.0-79-generic
Found initrd image: /boot/initrd.img-4.4.0-79-generic
Found linux image: /boot/vmlinuz-4.4.0-78-generic
Found initrd image: /boot/initrd.img-4.4.0-78-generic
done
可以看到,已经更新了引导文件,并把我们新安装的内核排到了第一位,所以并不用卸载旧内核了。
再查看一次内核:
dpkg -l|grep linux-image
输出:
ii linux-image-4.12.0-041200rc4-generic 4.12.0-041200rc4.201706042031 amd64 Linux kernel image for version 4.12.0 on 64 bit x86 SMP
ii linux-image-4.4.0-78-generic 4.4.0-78.99~14.04.2 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii linux-image-4.4.0-79-generic 4.4.0-79.100~14.04.1 amd64 Linux kernel image for version 4.4.0 on 64 bit x86 SMP
ii linux-image-extra-4.4.0-78-generic 4.4.0-78.99~14.04.2 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii linux-image-extra-4.4.0-79-generic 4.4.0-79.100~14.04.1 amd64 Linux kernel extra modules for version 4.4.0 on 64 bit x86 SMP
ii linux-image-generic-lts-xenial 4.4.0.79.64 amd64 Generic Linux kernel image
重启:sudo reboot

5.重连服务器

查看当前内核:uname -r
输出:4.12.0-041200rc4-generic 
已经成功

6.开启bbr

修改系统配置:
sudo bash -c 'echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf'
sudo bash -c 'echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf'
保存:
sudo sysctl -p

7.测试

sysctl net.ipv4.tcp_available_congestion_control
sysctl net.ipv4.tcp_congestion_control

如果结果都有bbr代表成功。
lsmod | grep bbr
也应该有bbr。

8.实测

原来的速度:

开启bbr以后的速度:

速度竟然降了,怎么回事呢?

-end-

Posted on

php实现面向对象

对象可以用于表示所有实物或概念。面向对象软件由一系列具有属性和操作的自包含对象组成,这些对象之间能够交互,从而达到我们的要求。

1.类和对象

对象的属性是与对象相关的特性或变量。对象的操作是对象可以执行的、用来改变其自身或对外部产生影响的方法、行为或函数。
封装也叫做数据隐藏。从本质上说,访问一个对象中的数据只能通过对象的操作来实现,对象的操作也就是对象的接口。
对象是一个被保存数据和操作这些数据的操作方法的唯一、可标识的集合。
对象可以按类进行分类。类是表示彼此之间可能互不相同,但是必须具有一些共同特点的对象集合。

2.多态

面向对象的编程语言必须支持多态性,多态性的意思是指不同的类对同一操作可以有不同的行为。

3.继承

继承允许我们使用子类在类之间创建层次关系。子类将从它的超类继承属性和操作。

4.创建类、属性和操作

一个最小的类:

class classname { }

包含属性的类:

class classname
{
public $att1;
public $att2;
}

包含操作的类:

class classname
{
  function operation1() {}
  function operation2($param1, $param2) {}
}

构造函数:

大多数类都有一种称为构造函数的特殊操作。当创建一个对象时,它将调用构造函数,通常将执行一些有用的初始化任务:列如,设置属性的初始值或者创建该对象需要的其他对象。
构造函数的名称是__construct().
有构造函数的类:
class classname 
{
  function __construct($param)
{echo "constructor called with parameter".$param."<br />";}
}

析构函数:

与构造函数相对,析构函数允许在销毁一个类之前执行一些操作或完成一些功能。
析构函数名称是__destruct()。

5.类的实例化