股息收税的问题

大陆A股、B股分红不扣税(只考虑长期持股)。

港股通买港股,分红扣税20%。

境外券商账户买注册在内地的港股公司,分红扣税10%。

境外券商账户买注册在香港、开曼、维京、百慕大的港股公司,分红不扣税。

境外券商账户买美股填了w8表,分红扣税10%。

香港银行账户买美股即使填了w8表,基本上分红扣税也是30%。

the row size is xx which is greater than maximum allowed size (8126 bytes) for a record on index leaf page

一个数据库DDL在MariaDB 10.3上没有任何问题,在MariaDB 10.6上就一般报这个问题:

[ERROR] InnoDB: Cannot add field `footer_color` in table `xxxx`.`theme` because after adding it, the row size is 8474 which is greater than maximum allowed size (8126 bytes) for a record on index leaf page.

这个Google一下很容易就知道是Row Size Too Large Error. 根据下面的文档很容易解决办法.

https://mariadb.com/kb/en/troubleshooting-row-size-too-large-errors-with-innodb/

但是按理说MariaDB 10.3 和 MariaDB 10.6上在这方面变动不大,为什么会出现问题呢?

搜索了半天,在MariaDB的文档上找到了说明:

https://mariadb.com/kb/en/innodb-row-formats-overview/#maximum-row-size

原来在MariaDB 10.2.26, 10.3.17, 10.4.7之前的版本上,InnoDB计算row size的方式是错误的,在后面的版本里修复了。

而我的MariaDB 10.3的版本正好是10.3.15.

困扰了一个上午的问题解决了!

另附解决办法,如果不想修改表的结构,可以在my.cnf添加下面的命令:

innodb_strict_mode = OFF

JavaScript setInterval 和 ‘this’ 的解决方案

By default, setInterval中的this 是被绑定到global context, 如果你想绑定到current context, 有如下几种解决方案:

(本文来自于stackoverflow: https://stackoverflow.com/questions/2749244/javascript-setinterval-and-this-solution)

Code:

prefs: null,
startup : function()
{
// init prefs
...
this.retrieve_rate();
this.intervalID = setInterval(this.retrieve_rate, this.INTERVAL);
}

如果我们想在setInterval里面access this,可以:

  1. 使用.bind
this.intervalID = setInterval(this.retrieve_rate.bind(this), this.INTERVAL);

2. 在函数外,把this 赋值给其他变量,常见是that 和 self

var self = this;
this.intervalID = setInterval(
function() { self.retrieve_rate(); },
this.INTERVAL);

3. 使用arrow function, 箭头函数

startup : function()
{
// init prefs
...
this.retrieve_rate();
this.intervalID = setInterval( () => this.retrieve_rate(), this.INTERVAL);
}

US 大型服务商wifi calling 所需的port和 domain(ePDG)

Wifi Calling 一般是通过IPSEC tunnels

Port 这个很简单,就是在UDP下需要打开如下端口:

UDP – port 500 (IPsec – IKE)
UDP – port 4500 (IPsec – NAT traversal)

MTU一般推荐设置为1500.

ePDG: Evolved Packet Data Gateway

ePDG其实就是一个FQDN, 很多服务商都发布了他们的ePDG. 国内一般用的比较多的是t-mobile 的wifi calling. 所以可以多关注一个t-mobile 的 ePDG

AT&T:

epdg.epc.att.net
sentitlement2.mobile.att.net
vvm.mobile.att.net
mmsc.mobile.att.net

Verizon:

wo.vzwwo.com
sg.vzwfemto.com

T-Mobile:

epdg.epc.mnc260.mcc310.pub.3gppnetwork.org
ss.epdg.epc.mnc260.mcc310.pub.3gppnetwork.org
ss.epdg.epc.geo.mnc260.mcc310.pub.3gppnetwork.org

在Android/iPhone上抓包

因为要debug一个app为什么无法启动,就研究了一下抓包.  目前主流的在android 和iphone上都可以抓包的是fiddler, 使用简单,不用root, 操作简便,UI简明. 但是缺点就是只能抓包http/https协议,无法抓包第四层tcp/udp协议. 在android上也可以抓包使用tcpdump. 此篇文章只简单记录一下fiddler.

总体流程分为这么几步: 在电脑上安装fiddler; 简单配置fiddler; 手机上安装证书; 手机设置proxy, 让所有http/https流量经过fiddler; 抓包. 

前提条件是电脑和手机在一个局域网内.

下面详细说一下:

  1. 下载fiddler. 只需要下载免费的fiddler classic就可以了. 下载地址如下
https://www.telerik.com/fiddler/fiddler-classic

2. 简单配置fiddler远程连接

Fiddler 如果抓取 https 协议会话需要进一步配置,在 Tools ->Options 菜单下,选择HTTPS标签并配置如下:

手机抓取需要配置远程连接,在 Tools ->Options 菜单下,选择Connections标签并配置如下:

Fiddler listens on port是手机连接fiddler时的代理端口号,默认8888即可;

Allow remote computers to connect是允许远程发送请求,需要勾上.

防火墙需要开放8888端口,注意如果你使用的是windows的话,这个防火墙已经自动配置好了.

3. 手机安装fiddler证书, 这里需要手机和电脑在同一个局域网之内. 下面以iphone为例说明,安卓的步骤差不多.

在电脑上通过cmd敲命令ipconfig查看本机的ipv4地址.

打开手机浏览器,输入 http://【fiddler电脑IP地址】:【fiddler设置的端口号】,例如 http://192.168.123.100:8888 可以下载证书并安装。

在打开的页面中,点击 FiddlerRoot certificate 下载证书,点击允许

在Settings系统设置中,点击 Profile Downloaded(已下载的配置文件):

点击install, 安装证书

不同系统手机的下载路径不一样,例如有的是: 设置->通用->关于本机->证书信任设置

4 手机配置代理

手机设置 -> WLAN -> 选择无线网络 -> HTTP Proxy,选择 Manual,Server 为 Fiddler 的电脑 ip 地址,端口号为 Fiddler 的端口号:

 

此时操作浏览器或APP,在 fiddler 中可以看到完成的请求和响应数据:

 

PHP双引号下的多维数组

今天在VSCode上用PHP处理JSON文件的时候遇到了,VSCode 给出了提示,但是没有注意到.

虽然用其他的方式绕过了,但是总是想知道原因. 在stackoverflow上发现了原因:

https://stackoverflow.com/questions/38054476/how-to-put-multidimensional-arrays-double-quoted-strings

PHP在双引号下输出一维数组,没有问题:

<?php echo "my name is: $arr[name]"; ?>

但是输出二维甚至多维数组的时候就出现了问题:

<?php echo "he is $twoDimArr[family][1]"; ?>

输出为:

he is Array[1]

在php官网的文档中发现了答案:

http://php.net/manual/en/language.types.string.php#language.types.string.parsing

一维数组属于simple variable,二维甚至多维数组属于complex variable,需要使用curly braces(大括号)包围起来

echo "he is {$twoDimArr['family'][1]}";

 

VSCode原生Sync功能

今天又把VSCode装回来了,毕竟免费啊,发现VSCode 自带了Sync功能,体验了一下,比Shan Khan的Setting Sync要好用很多。

果断卸载了Shan Khan的setting sync,用回了原生的setting sync

关于原生的setting sync 的文档,可以参看下面的文档:

https://code.visualstudio.com/docs/editor/settings-sync

平安银行香港分行开户

这个我没啥经验,看到retire50blog.wang老哥写的,觉得很有意义,转过来记录一下.

这要求和HSBC JADE差不多了,看看就行,真有这资本了HK还是有很多bank抢着给你开的

优势:

1内地香港互转0费秒到

2香港本地转账收款免费,单日额度100万港币

3新客定存有加息,港币+0.5%,美元+0.9%

4开得人少,估计港分风控不严,港分客户经理说“只要钱能打进来就行”

5计算内地达标权益的时候,港分资产也统计在内

 

劣势:

1没有实体卡。

2第二年起结余要求较高(客户经理说现行管理费未必执行,还未完全确定)。

3港分app仅有基本的转账和存款功能,较为简陋。

 

开户条件:

两个条件选一个

1开户时或者开户后三个月内,平安银行内地+平安银行香港>100万美元。(经确认,只计算银行资产,证券不计算在内)

2开户时提交300万美元可投金融资产证明,比如自己名下券商盖章的结单。

理论上可以0开,比如平安银行原有资金达标、或者开户以后转钱到内地平安放一天过夜即可、或者其他地方开资产证明

 

开户流程:

1平安银行APP上搜“香港账户服务”,提交申请。需要准备护照,90天以上签证。(可以自己做土耳其电子签。)

2等客服预约上门或者自己去网点办理。

3等一个月左右,香港分行开好账户。

4同名入金一笔,激活账户(如果是选择开户后三个月内入金内地+香港等值100万美元的条件,那么满足内地+香港>100以后,隔夜第二天8:30左右自动激活。)

 

管理费:

1开户第一年免

2第二年起香港分行不达标100万港币,每季度收900港币。(内地客服说如果内地+香港大于100万美元,可以继续申请豁免管理费。)

22年9月24日补充:

经实测,

内地转平安香港每日限额5万美元,无费秒到。

平安香港转内地平安,1万美元以下,无费,不用申报,但要人工审核才入账,大约1-2小时。

平安香港转内地平安,1万美元以上,无费,需要申报。

香港本地转账,无费秒到。

CentOS7 编译MariaDB的问题

浪费了一下午时间得到的经验:

Centos7 直接编译Mariadb 10.4 及其以下的版本没有任何问题,但是当你在centos 7 上编译mariadb 10.5及其以上的版本时,

会告诉你cmake 版本太低(centos 7 的cmake 应该时2.8.18), 需要cmake 3.0.0 以上

两个解决办法,一是用安装epel,然后升级到cmake 3;另外一种办法就是切换到debian 11

确实,还是切换到debian 11吧, centos 7 的实在太老了