使用git-svn管理svn仓库

作者:matrix 发布时间:2021-08-24 分类:兼容并蓄

git-svn工具是git对比较老的svn的兼容性支持,可以直接对svn仓库进行管理。git-svn内部其实是使用perl脚本处理svn命令,没有的话要重新安装git。之后就可以任意使用git的功能了,比如stash。

mac环境下直接输入命令git svn --version检查是否可用。

出现问题最好是重新安装svn和git:

$ brew reinstall subversion
$ brew reinstall git

clone项目

$ git svn clone svn://username@svn.hhtjim.com/repos

修改&提交

这里和git仓库操作一致

$ git add .
$ git commit -m "first commmit"

推送到远程仓库

使用git svn dcommit代替git push命令

$ git svn dcommit

查看本地仓库的svn地址信息

$ git svn info

参考:

https://www.jianshu.com/p/6a3afcb59fa9

Git-Svn保存密码凭证免输入

作者:matrix 发布时间:2021-08-12 分类:兼容并蓄

使用git-svn管理svn项目每次操作都要输入密码 😳

之前尝试过 echo password | git svn rebase来自动输入,还有删除~/.subversion/auth目录的方法都还是失败,不能达到免输入密码的效果。

办法

以mac为例,打开应用钥匙串访问,删除掉对应svn项目地址的钥匙串<svn://svn.XXXX:3690>密码。
之后马上使用git svn命令操作,系统会自动保存新的密钥在钥匙串中。

图片5344-Git-Svn保存密码凭证

这样在任何程序操作之前去保存密码就可行。git-svn是读取系统保存的密钥,之所以有问题因为密钥是之前的程序授权的,现在使用git-svn也就无法读取。

这样操作之后我这里其他程序没有影响,如果有问题的话可以自行到svn项目目录执行缓存密码凭证操作。

$ svn update --username 'user' --password 'password'

参考:

https://newbedev.com/does-git-svn-store-svn-passwords

ios 自定义html页面发送到桌面图标

作者:matrix 发布时间:2020-06-26 分类:兼容并蓄 零零星星

经常用高德地铁图书签看地铁线路图
今天发现高德修改了scheme跳转规则,走到了测距界面。本来想重新设置个书签到桌面的,结果是找不到以前的方法了,干。

重新设置

高德地铁图url data数据

data:text/html;charset=UTF-8,%3Chtml%3E%20%20%20%20%20%20%20%20%3Chead%3E%20%20%20%20%20%20%20%20%3Cmeta%20content=%22yes%22%20name=%22apple-mobile-web-app-capable%22%20/%3E%20%20%20%20%20%20%20%20%3Cmeta%20content=%22text/html;%20charset=UTF-8%22%20http-equiv=%22Content-Type%22%20/%3E%20%20%20%20%20%20%20%20%3Cmeta%20name=%22viewport%22%20content=%22width=device-width,%20initial-scale=1.0,%20user-scalable=no%22%20%20%20%20%20%20%20%20/%3E%20%20%20%20%20%20%20%20%3Clink%20rel=%22apple-touch-icon-precomposed%22%20href=%22data:image/png;base64,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%22%3E%20%20%20%20%20%20%20%20%3C/link%3E%20%20%20%20%20%20%20%20%3Ctitle%3E%20%20%20%20%20%20%20%20%E5%9C%B0%E9%93%81%E5%9B%BE%20%20%20%20%20%20%20%20%3C/title%3E%20%20%20%20%20%20%20%20%3Cstyle%3E%20%20%20%20%20%20%20%20%20%20%20%20*%7Bmargin:0;padding:0%7D%20%20%20%20%20%20%20%20%20%20%20%20html,body%7Bheight:100%25;min-height:100%25%7D%20%20%20%20%20%20%20%20%20%20%20%20body%7Bbackground:%23eee;text-align:center;overflow:hidden%7D%20%20%20%20%20%20%20%20%20%20%20%20a%7Bdisplay:%20none%7D%20%20%20%20%20%20%20%20%20%20%20%20p%7Bfont-size:14px;line-height:200%25%7D%20%20%20%20%20%20%20%20%20%20%20%20.logo%7Bwidth:90px;margin-top:%2032px%7D%20%20%20%20%20%20%20%20%20%20%20%20section%7Bwidth:%20264px;height:%2078px;background:%23fff;position:absolute;bottom:%2020px;-webkit-border-radius:%203px;border-radius:%203px%7D%20%20%20%20%20%20%20%20%20%20%20%20section:before%7Bcontent:'';display:block;width:528px;height:156px;-webkit-transform:scale(0.5);-webkit-transform-origin:%20left%20top;border:1px%20solid%20%2389ccff;-webkit-border-radius:6px;border-radius:%206px;z-index:1%7D%20%20%20%20%20%20%20%20%20%20%20%20section:after%7Bcontent:'';display:block;width:36px;height:%2036px;border:%201px%20solid%20%2389ccff;background:%20%23fff;position:absolute;-webkit-transform:%20scale(0.5)%20rotate(45deg);bottom:%20-19px;left:113px;z-index:%202%7D%20%20%20%20%20%20%20%20%20%20%20%20div%7Bposition:%20absolute;top:%201px;right:%201px;bottom:0;left:1px;z-index:3;background:%23fff%7D%20%20%20%20%20%20%20%20%20%20%20%20div%20%3E%20p%7Bcolor:%20%23333%7D%20%20%20%20%20%20%20%20%20%20%20%20div%20%3E%20p:first-child%7Bmargin-top:8px%7D%20%20%20%20%20%20%20%20%20%20%20%20span%7Bdisplay:inline-block;width:%2017px;height:%2023px;background:%20url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACEAAAAuCAMAAACRbICIAAABR1BMVEX///9+wv8UkP9ktv/j8v/S6v8lmf/Y7f90vv8Rj/8pl//s+P+a1P8smv8mmf/t+P+54/+Y0/+Z1P/q9/8Eif9fuP9Ssf9Usv/j8f/P6/8mlv8Dgv+Z0//p9/9Ssv9ovP/0/P/Z7f9TsP8qmv8Hgv/t+f9XtP/5/f/k9P/T7//9/v8IhP+k2f+W0f92w//4/v/U8P9Pr//X7f9Ep/9Vsf8pkf/y+f+m1f8pmv8qm/8tk/+Vzf8Sj//x+P+c0P8Rhf8Mjf96wP9PsP/X7P/9///8/v+IyP9nuP/U6//K5v+ey//w+P/W7P8VkP8hl/9zvv+73/8LjP/P7f90vf91vv9ktf9zwP9ksP+x2v8Ae/8Ag/8Ad/8AfP8Adv9it/8Ahv8LjP90wf8AhP8Ji/8Aev8AgP8Acv8Adf8Aav8imf+a0/8Tiv8AiP/+x5cfAAAAWXRSTlMAgeubHCzZJovt1RJk09kSRmZmFPufrascMNn7Zhatlwomq9X3EqcGGiwC91poiQYqryi7qdUMWNXV0WrtDmLt84WvKAICdpcqNGAOKOndi0TzMIuJm4ubTn6oYBsAAADXSURBVHhe7c1FVwNBEIXRNxODhIm7E0IUdXd3lx6JB///a1h0b2CoJbDIt3znnip8qeStgMwVfhulQaSrBpME8Myo7Xrj3ffzhZzerLHXl5Yf5gW2WGhHMqKxeGLAFKTSeiaLc20QV868GRkusLsi0Kc5gLJSHfkudvfGxsEFJianYBoXvN8V08qCaGiOi/lZMS0uLUNW+0Urq1ysrYtpQ9uE7Ka+bD9JkO2UsP0P0RP7zwe0wOHRMSlEfy96wk2Jk09xemYlujAkXLIOEXu8xs2ther+4QN2Dj6s1Wm3NwAAAABJRU5ErkJggg==)%20no-repeat%20center;background-size:%20contain;margin:%200%2010px;position:relative;top:3px%7D%20%20%20%20%20%20%20%20%3C/style%3E%20%20%20%20%20%20%20%20%3C/head%3E%20%20%20%20%20%20%20%20%3Cbody%3E%20%20%20%20%20%20%20%20%3Ca%20href=%22iosamap://openFeature?featureName=Subway&sourceApplication=applicationName&page=Subway%22%20id=%22qbt%22%3E%3C/a%3E%20%20%20%20%20%20%20%20%3Cnav%20id=%22nav%22%3E%3C/nav%3E%20%20%20%20%20%20%20%20%3C/body%3E%20%20%20%20%20%20%20%20%3Cscript%3E%20%20%20%20%20%20%20%20if%20(window.navigator.standalone%20==%20true)%20%7B%20%20%20%20%20%20%20%20%20%20%20%20var%20lnk%20=%20document.getElementById(%22qbt%22);%20%20%20%20%20%20%20%20%20%20%20%20var%20evt%20=%20document.createEvent('MouseEvent');%20%20%20%20%20%20%20%20%20%20%20%20evt.initMouseEvent('click');%20%20%20%20%20%20%20%20%20%20%20%20lnk.dispatchEvent(evt);%20%20%20%20%20%20%20%20%7D%20else%20%7B%20%20%20%20%20%20%20%20%20%20%20%20var%20bodyWidth%20=%20document.body.clientWidth;%20%20%20%20%20%20%20%20%20%20%20%20var%20nav%20=%20document.getElementById(%22nav%22);%20%20%20%20%20%20%20%20%20%20%20%20nav.innerHTML%20=%20'%3Cimg%20class=%22logo%22%20src=data:image/png;base64,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%3E'%20+%20'%3Cp%3E%E6%B7%BB%E5%8A%A0%E5%BF%AB%E6%8D%B7%E6%96%B9%E5%BC%8F%E5%88%B0%E4%B8%BB%E5%B1%8F%E5%B9%95%3C/p%3E'%20+%20'%3Csection%20style=%22margin-left:'%20+%20((bodyWidth%20-%20264)%20%3E%3E%201)%20+%20'px%22%3E'%20+%20'%3Cdiv%3E'%20+%20'%3Cp%3E%E7%82%B9%E5%87%BB%E9%A1%B5%E9%9D%A2%E4%B8%8B%E6%96%B9%3Cspan%3E%3C/span%3E%E6%8C%89%E9%92%AE%3C/p%3E'%20+%20'%3Cp%3E%E5%9C%A8%E5%BC%B9%E5%87%BA%E8%8F%9C%E5%8D%95%E9%80%89%E6%8B%A9%E2%80%9C%E6%B7%BB%E5%8A%A0%E5%88%B0%E4%B8%BB%E5%B1%8F%E5%B9%95%E2%80%9D%3C/p%3E'%20+%20'%3C/div%3E'%20+%20'%3C/section%3E';%20%20%20%20%20%20%20%20%7D%20%20%20%20%20%20%20%20%3C/script%3E%20%20%20%20%20%20%20%20%3C/html%3E

说明:

其中核心位置为 iosamap://的scheme a标签跳转。

iosamap://openFeature?featureName=Subway&sourceApplication=applicationName&page=Subway

顺便再记录下官方原版不可用的scheme:

iosamap://openFeature?featureName=Mine&page=ToolBox&item=Subway

item参数失效,所以就默认跳转到了测距界面。

使用

复制顶部的url data代码,在safair地址栏中打开,使用下方的分享发送按钮发送到桌面快捷键即可。

到这里就解决了问题。
下面是简化和修改操作,各位没必要看了。

自定义以及精简

上面的大段官方代码主要是css样式、图标等信息,其实可直接简化。

代码中可以任意修改。设置为其他任意界面,样式,图标,标题,以及打开的跳转页面和预览窗口都可以。要求为data:text/html形式。

如果理解一些html,可简化html为如下形式:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script>
        window.location.href = 'iosamap://openFeature?featureName=Subway&sourceApplication=applicationName&page=Subway';
    </script>
</head>
<body>
</body>
</html>

最终的url data数据:

data:text/html;charset=UTF-8,%3c!DOCTYPE%20html%3e%0d%0a%3chtml%20lang%3d%22en%22%3e%0d%0a%3chead%3e%0d%0a%20%20%20%20%3cmeta%20charset%3d%22UTF-8%22%3e%0d%0a%20%20%20%20%3ctitle%3eTitle%3c%2ftitle%3e%0d%0a%20%20%20%20%3cscript%20%3e%0d%0awindow.location.href%20%3d%20%27iosamap%3a%2f%2fopenFeature%3ffeatureName%3dSubway%26sourceApplication%3dapplicationName%26page%3dSubway%27%3b%0d%0a%20%20%20%20%3c%2fscript%3e%0d%0a%3c%2fhead%3e%0d%0a%3cbody%3e%0d%0a%3c%2fbody%3e%0d%0a%3c%2fhtml%3e

说明:

注意!需要以data:text/html;charset=UTF-8,形式开头。切记,后面字符全部为url编码数据,空格字符编码为%20,非+字符。

schma参考:

https://lbs.amap.com/api/amap-mobile/guide/ios/subway

ISO8601时间字符串到时间戳处理

作者:matrix 发布时间:2019-06-21 分类:Python 兼容并蓄

之前不太理解ISO8601时间格式,后来看了下网上文章,其实是没有固定的单一格式。
按照下面这些其实都属于ISO8601时间格式:

2019-03-25T16:00:00.000111Z
2019-03-25T16:00:00.111Z
2019-03-25T16:00:00Z
2019-03-25T16:00:00
...

Z表示祖鲁时间Zulu time+0时区,若去掉不写Z则采用系统本地时区。
ISO8601时间还有很多其他扩展格式。

下面代码处理的也就是普通格式

python

import datetime,pytz
def iso2timestamp(datestring, format='%Y-%m-%dT%H:%M:%S.%fZ',timespec='seconds'):
    """
    ISO8601时间转换为时间戳

    :param datestring:iso时间字符串 2019-03-25T16:00:00.000Z,2019-03-25T16:00:00.000111Z
    :param format:%Y-%m-%dT%H:%M:%S.%fZ;其中%f 表示毫秒或者微秒
    :param timespec:返回时间戳最小单位 seconds 秒,milliseconds 毫秒,microseconds 微秒
    :return:时间戳 默认单位秒
    """
    tz = pytz.timezone('Asia/Shanghai')
    utc_time = datetime.datetime.strptime(datestring, format)  # 将字符串读取为 时间 class datetime.datetime

    time = utc_time.replace(tzinfo=pytz.utc).astimezone(tz)

    times = {
        'seconds': int(time.timestamp()),
        'milliseconds': round(time.timestamp() * 1000),
        'microseconds': round(time.timestamp() * 1000 * 1000),
    }
    return times[timespec]


def timestamp2iso(timestamp, format='%Y-%m-%dT%H:%M:%S.%fZ',exact_sec_type = 3):
    """
    时间戳转换到ISO8601标准时间(支持微秒级输出 YYYY-MM-DD HH:MM:SS.mmmmmm)
    :param timestamp:时间戳 int值,支持 秒,毫秒,微秒级别
    :param format:输出的时间格式  默认 iso=%Y-%m-%dT%H:%M:%S.%fZ;其中%f表示微秒6位长度
    :param exact_sec_type: %f表示的单位  3|6  默认 6微秒,3毫秒

    此函数特殊处理,毫秒/微秒部分 让其支持该部分的字符格式输出
    :return:
    """
    format = format.replace('%f','{-FF-}')#订单处理微秒数据 %f
    assert exact_sec_type in [3,6]
    length = min(10+exact_sec_type, len(str(timestamp)))#最多取到微秒级

    #获取毫秒/微秒 数据
    sec = '0'
    if length != 10:#非秒级
        sec = str(timestamp)[:10+exact_sec_type][-(length - 10):]#最长截取16位长度 再取最后毫秒/微秒数据
    if exact_sec_type == 6:
      sec = '{:0<6}'.format(sec)#长度位6,靠左剩下的用0补齐
    elif exact_sec_type == 3:
      sec = '{:0<3}'.format(sec)#长度位3,靠左剩下的用0补齐
    timestamp = float(str(timestamp)[:10])#转换为秒级时间戳
    return datetime.datetime.utcfromtimestamp(timestamp).strftime(format).replace('{-FF-}',sec)


说明:
之前别个写的iso到时间戳的转换方法简直蛋疼,无参数说明和无法精确到秒级别。
两个函数都可以相互转换和处理。

参考:

https://en.wikipedia.org/wiki/ISO_8601
https://docs.Python.org/zh-cn/3.7/library/datetime.html?highlight=isoformat#strftime-strptime-behavior
https://www.w3.org/TR/NOTE-datetime
https://www.cryptosys.net/pki/manpki/pki_iso8601datetime.html

ubuntu安装Let’s Encrypt证书实测

作者:matrix 发布时间:2017-01-15 分类:兼容并蓄 零零星星

Let’s Encrypt证书出来已经有很长时间,之前用主机未到期,也就干瞪眼。
现在手上拿了一台有设备,其实算下来价格也都差不多,国外的速度是慢点,但是好处很多。

测试环境:
ubuntu 14 64bit
lnmp 1.3

获取证书

git clone https://github.com/letsencrypt/letsencrypt 
cd letsencrypt
./letsencrypt-auto certonly --standalone --email hhtjim@foxmail.com -d hhtjim.com -d www.hhtjim.com
# 若服务器已经占用80端口开启webserver则只需执行webroot:
#  ./letsencrypt-auto certonly --webroot --email hhtjim@foxmail.com -d link.hhtjim.com

执行完上面三个命令之后会有图形界面出现
gui图形界面
选择Agree之后出现这个也就完成了证书的获取

安装证书

修改域名对应下的nginx配置
进入/usr/local/nginx/conf/vhost目录找到和域名同名的conf文件
在server代码块中添加:

listen 443 ssl;
        #listen [::]:80;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem;

参考如下完整配置

server
    {
        listen 80;
        listen 443 ssl;
        #listen [::]:80;
        ssl on;
        ssl_certificate /etc/letsencrypt/live/hhtjim.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/hhtjim.com/privkey.pem;

        server_name hhtjim.com www.hhtjim.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/hhtjim.com;

        include other.conf;
        #error_page   404   /404.html;
        include enable-php.conf;
        include wordpress.conf;

                if ($http_host !~ "^www.hhtjim.com$"){
                    rewrite  ^(.*)    https://www.hhtjim.com$1 permanent;
                }
                if ($scheme = "http"){ 
                        rewrite ^(.*)$  https://$host$1 permanent;
                }

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log  /home/wwwlogs/hhtjim.com.log;
    }

接着准备重启nginx:lnmp nginx restart

参考:loazuo

更新操作

按照网上大多执行的命令我这里就会出现交互界面,需要手动选择webroot目录

How would you like to authenticate with the ACME CA? 

       x x          1  Place files in webroot directory (webroot)           x x  
       x x          2  Spin up a temporary webserver (standalone)  


还好找到办法,只需要添加参数 --webroot -w 设置好存放web路径即可。最终参考如下

ubuntu下保存为sh文件。记得附加x执行权限。然后执行该sh文件即可自动更新证书.

#!/bin/sh
~/letsencrypt/letsencrypt-auto certonly --webroot -w /home/wwwroot/www.hhtjim.com/ --renew-by-default --email hhtjim@foxmail.com -d hhtjim.com -d www.hhtjim.com && lnmp nginx restart

若报错Failed authorization procedure...则需要修改-w参数为网站根目录
如:

-w /home/wwwroot/hhtjim.com/

且nginx配置中将.well-known加入白名单:

location ~ /.well-known {
            allow all;
    }

参考:
http://letsencrypt.readthedocs.io/en/latest/using.html
https://www.ubock.com/article/25
https://stackoverflow.com/questions/42269107/using-certbot-to-apply-lets-encrypt-certificate-failed-authorization-procedure

最后的定时执行

修改定时任务 crontab -e
0 0 1 * * /root/updateLetsEncrypt.sh #每月1号执行sh脚本

重启定时服务 /etc/init.d/cron restart

peace

Let’s Encrypt 项目提供免费的SSl证书

作者:matrix 发布时间:2015-09-15 分类:兼容并蓄 零零星星

官网:https://letsencrypt.org
github: https://github.com/letsencrypt/letsencrypt
letsencrypt

这将表示如果一个网站只是需要最基本的HTTPS加密,那么将无需任何花费购买SSL证书。

Mozilla、思科、Akamai、IdenTrust、EFF 和密歇根大学研究人员宣布了 Let’s Encrypt CA项目,计划为网站提供免费 ssl 证书,加速将 Web 从 HTTP 过渡到 HTTPS。

上个月才看到了这个消息,大咖阵容提供的公益项目。之前说好的9月份发布,怎么又推迟到了Q4 2015。
网站使用https协议非常不错 。至少比普通网站多了一个绿色的标识,好看还安全~不容易被『挤挨服达不溜』监听到通讯内容。
BUT网站使用https协议必须要有ssl证书,大多都是收费的。不过目前也有免费的,沃通、CloudFlare。。。。。

沃通这些没用过,看到有这么好的公益项目那当然是首推!!值得等待。

Postscript:百度在前几个月都默默启用了全站SSL

阅读剩余部分 »

正确OpenWeiPN GUI上网姿势

作者:matrix 发布时间:2015-06-23 分类:兼容并蓄

使用WeiPN Gate Client高科技上网的时候发现还有OpenVPN配置文件这种东东。没明白怎么用就查了查。原来还有个比较不错的上网选择,使用OpenWeiPN GUI。

OpenWeiPN GUI下载

官网http://openvpn.net/index.php/open-source/downloads.html
百度网盘http://pan.baidu.com/s/1FbrzC

使用

1.安装完成OpenWeiPN
2.找到软件安装目录下的config文件夹
README.txt
This directory should contain OpenVPN configuration files
each having an extension of .ovpn

When OpenVPN is started as a service, a separate OpenVPN
process will be instantiated for each configuration file.
意思就是喊你把.ovpn文件放置在此目录(config文件夹)

3.获取.ovpn文件
如果你有的话那就好,没有就请选择合适的上网地点:http://130.158.6.78/cn/
下载其对应的配置文件(.ovpn文件)到config文件夹。

4.打开软件OpenWeiPN GUI,最好请使用管理员权限运行
5.右键点击软件托盘图标选择好你的配置文件然后点击connect
右键点击软件托盘图标

怕是以后地址被qiang了,可以现在订阅他们的邮件。
http://130.158.6.78/cn/mail.aspx

参考:http://130.158.6.78/cn/howto_openvpn.aspx

PHP递归函数内的静态变量

作者:matrix 发布时间:2015-06-20 分类:兼容并蓄 零零星星

//静态变量的例子

/**
 * 将数组转换为字符
 *
 * 用于缓存
 *
 * @param $data
 * @return string
 */
function philnaArray2String($data, $returns = '')
{
    static $t = 1;
    $tabType = " ";
    $tab = str_repeat($tabType, $t);
    $data = (array)$data;
    foreach ($data as $key => $value) {
        if (is_array($value)) {
            $t++;
            $returns .= "$tab'" . $key . "' => array(\n" . philnaArray2String($value) . "$tab),\n";
        } else {
            if (!is_bool($value)) {
                $value = "'" . addslashes($value) . "'";
            }
            $returns .= "$tab'" . $key . "' => $value,\n";
        }
    }
    $returns = substr_replace($returns, '', -2, -1);
    return $returns;
}

说明:
上面php代码中的$t被static修饰,即为静态变量
静态变量在函数执行完毕后不会释放,会继续累加下去
赶脚非常合适在递归函数中用

参考:http://blog.csdn.net/shaerdong/article/details/8545874