解决itunes无法上传音乐到icloud的问题(上传下载极慢)

经过几天折腾总算搞定,说到底还是墙的问题。问题详情不再描述,反正就是各种恶心传不上去,20多个mp3一个通宵传不完,偶尔一两个可以成功,要么失败要么上传时间无限长不说有多恶心了。

解决方法1:

使用VPN并配置所有接收流量都走VPN。

解决方法2(推荐):

itunues使用全局http代理,所以用shadowsocks就可以搞定,shadowsocks我这边用的pac控制(非浏览器插件),每次切换全局模式经常忘了换回来,这么做不科学。从apple官网查到itunes使用的服务器和端口(關於 macOS、iOS 和 iTunes 伺服器主機連線與 iTunes 背景程序),经过测试,代理其中*.amazonaws.com即可,pac规则如下:

||*.amazonaws.com^

如果不行,可以重启itunes试试。

弄上之后上传速度极快。

问题是aws全走代理了,实际上是没必要的,只不过没有分析出具体的子域名,通过charles抓包找到对应子域名,这个子域名可能不同地区有区别或者会变,目前正在观测中,发现规律改下pac匹配即可。

||s3-external-1.amazonaws.com^

手机上同理,我用的是Shadowrocket软件,配置如下:

版本信息如下:

mysql 根据经纬度和距离筛选数据

先根据经纬度和距离计算一个矩形,然后筛选经纬度在矩形范围内的数据。

/**
 *
 * @param Select $select            
 * @param string $columnName            
 * @param string $longitude            
 * @param string $latitude            
 * @param int $distance
 *            metre
 * @return string
 */
static function ST_MBRWithinRectangle(Select $select, $columnName, 
    $longitude, $latitude, $distance)
{
    list ($min, $max) = self::rectangle($longitude, $latitude, $distance);
    $where = "$columnName!=PointFromText('Point(0 0)') and $columnName!='' and";
    $where .= " ST_MBRWithin(`$columnName`,ST_GeomFromText('Polygon(($min[0] $min[1],";
    $where .= "$min[0] $max[1],$max[0] $max[1],$max[0] $min[1],$min[0] $min[1]))'))";
    $select->where($where);
}

/**
 * get rectangle longitude and latitude
 *
 * @param float $longitude
 * @param float $latitude
 * @param integer $distance
 *            meter
 * @return array
 */
static function rectangle($longitude, $latitude, $distance)
{
    $radius = 6371 * 1000;
    // latitude boundaries
    $maxlat = $latitude + rad2deg($distance / $radius);
    $minlat = $latitude - rad2deg($distance / $radius);
    // longitude boundaries (longitude gets smaller when latitude increases)
    $maxlng = $longitude +
         rad2deg($distance / $radius / cos(deg2rad($latitude)));
    $minlng = $longitude -
         rad2deg($distance / $radius / cos(deg2rad($latitude)));
    return array(
        array(
            'lng' => $minlng,
            'lat' => $minlat
        ),
        array(
            'lng' => $maxlng,
            'lat' => $maxlat
        )
    );
}