技术奇客ITGeeker.net的博客

  • Python处理文件名或路径名中无法decode代码问题

    Python处理文件名或路径名中无法decode代码问题

    首先讨论的是python 2处理时的问题,其实不是单单指中文名的问题,即使是中文名称,如果能够decode还是没问题的,比如用如下这些方法:

    • – coding: utf-8 –– 或者 –– coding: gbk –
    • 强制utf-8
    import sys
    reload(sys)
    sys.setdefaultencoding('utf8')
    • .decode(‘gbk’).encode(‘utf-8’)
    • unicode(path_name,’utf8′)

    当然path前加r, 或者wingdows转用反斜杠,然后用了这四种方法还不行,windows下执行提示windows error 123之类的错误,发现文件名中会有无法decode的符号问号 ?的,基本就是在python 2之下无法解决了。

    Windows Error错误参考:

    • WindowsError:[Error 2]        不存在这个文件
    • WindowsError:[Error 3]        没有这个路径
    • WindowsError:[Error 5]        权限问题
    • WindowsError:[Error 13]       该文档被其它程序占用,处理不了  
    • WindowsError:[Error 123]      路径语法有误
    • WindowsError:[Error 145]      目录非空,多在删除非空目录时出现

    不要再花时间去解决python 2处理文件名的问题了,基本无法解决的,还是转用python 3吧,ITGeeker技术奇客测试已完美解决,用的是python 3.6的版本,而且是WSL的Ubunt版本测试的。而且现在更新到win10 2019 May的更新版,可以在微软商店直接下载3.7官方版本了,这是催促大家赶紧放弃python 2的节奏。

    Python 3.6默认使用utf-8编码,当然你也可以再加上reload在文件首,但和python 2有所不同:

    import importlib
    import sys
    importlib.reload(sys)

  • 5G相对4G的8大关键能力提升

    5G相对4G的8大关键能力提升

    一直都在说5G如何如何好,ITGeeker技术奇客今天来掰掰5G在那些关键参数得到了提升。

    指标流量密度连接数密度时延移动性能效用户体验速率频谱效率峰值速率
    4G参考值0.1 Tbps/Km210万/平方公里空口10ms350Km/h1倍10Mbps
    (urban/suburban)
    1倍1Gbps
    5G取值 10 Tbps/Km2 100万/平方公里 空口1ms500Km/h100倍提升0.1-1Gbps至少3倍提升20Gbps

    有些数字可能需要研究一下才知道什么意思,但只要对比数值的10倍百倍的增长率我们就应该觉得5G是非常值得期待的。


  • Python根据年龄计算出生年份

    Python根据年龄计算出生年份

    不管通过中文或英文搜索通过年龄来计算出生年份或日期,结果都是教你如何用生日计算年龄的,ITGeeker技术奇客认为应该也有这方面的需求,在此分享自己的代码。

    当然反过来计算是无法计算出生日,只能计算出年份,所以不是准确的生日日期。这个代码是在计算出年份后补全月日,把字段存到date格式里,方便日后计算年龄用。

    # -*- coding: utf-8 -*-
    ##############################################################################
    #    GeekerMaster奇客大师 www.geekermaster.com
    #    Copyright 2019 ITGeeker <alanljj@gmail.com>
    ##############################################################################
    from datetime import datetime, date, timedelta
    
    
    tday = date.today()
    print ('tday: '+str(tday))
    #假设年龄40岁
    age = 40
    birthday_year = tday.year - 40
    birthday_mg = str(birthday_year) + '-01-01' #这里的月份和日期是为了补全格式
    birthday_full_df = datetime.strptime(birthday_mg, "%Y-%m-%d").date() #格式化为date格式
    print ('birthday_full_df: '+str(birthday_full_df))

  • pg_trgm postgresql插件安装

    pg_trgm postgresql插件安装

    系统CentOS,PostgreSQL9.6 yum安装

    sudo yum install postgresql96-contrib
    sudo dnf install postgresql96-contrib
    sudo dnf install postgresql10-contrib

    用yum和dnf都可以,dnf需要先安装 sudo yum install dnf,然后\c链接数据库后:

    CREATE EXTENSION pg_trgm;

    误区:不用postgresql96而直接用postgresql就会产生找不到文件的问题,主要是lib库的路径问题,错误提示:

    ERROR:  could not open extension control file "/usr/pgsql-9.6/share/extension/pg_trgm.control": No such file or directory

    然后你或许可以用链接路径来解决

    ln -s /usr/share/pgsql/extension/pg_trgm* /usr/pgsql-9.6/share/extension/

    但会遇到新的错误:

    ERROR:  could not access file "$libdir/pg_trgm": No such file or directory

    所以确定好版本,用正确的方式安装很重要。


  • 华为无线耳机Freebuds Pro 2的调整音量窍门

    华为无线耳机Freebuds Pro 2的调整音量窍门

    没带着耳机坐过地铁,今天发现耳机音量好低,明明蓝牙音量调到最高了,但是还是音量很低听不清。

    地铁里网速不好,GG了一会找到了解决方案。原来耳机通过骨声纹调整的音量和手机蓝牙音量是两套系统,平常用惯语音调整音量减,造成现在光调高蓝牙音量不起作用了。

    但是,华为没有为freebuds耳机提供软件调整音量,所以只能用骨声纹来调整,地铁那么多人,不好意思对着耳机大喊“音量加”,结果试了两遍轻轻喊,结果?

    终于到站了,大声一喊,音量终于上来了!

    再吐槽一下华为也没为freebuds提供随时查询电量的功能,只有刚打开盒子的时候才能看的到。


  • Zimbra 8.X安装使用阿里云免费SSL证书脚本(更新)

    Zimbra 8.X安装使用阿里云免费SSL证书脚本(更新)

    网上一搜都是使用 Let’s Encrypt或者沃通的SSL,他们的格式和阿里云下载的还是不同的,阿里云的相对来说,可能更简单些,不用合并root证书。

    首先当然要去阿里云申请的ssl证书下载其他类型证书,解压缩后有两个文件上传到相应目录,这里是/opt/zimbra/ssl/aliyunssl/,文件名类似18131-domain.key和.pem

    对比Let’s Encrypt和Wosign的证书,这里会涉及到转换阿里云的RSA密钥到PKCS#8的格式,两者的区别,在于开头和结尾的内容。zimbra是不能验证RSA秘钥的。

    —–BEGIN RSA PRIVATE KEY—–

    —–BEGIN PRIVATE KEY—–

    我们可以通过openssl命令把阿里云的私钥转成zimbra能接受的格式。

     openssl pkcs8 -topk8 -inform PEM -in 18131XXXXXXXXX.key -outform PEM -nocrypt -out privkey.pem

    完整脚本如下:

    #!/bin/bash
    # Note: create by itgeeker
    
    domain=mail.itgeeker.net
    
    su - zimbra -c 'zmproxyctl stop'
    su - zimbra -c 'zmmailboxdctl stop'
    
    mkdir /opt/zimbra/ssl/aliyunssl/
    echo "up load aliyun ssl other to this folder first !!!!!!!"
    cd /opt/zimbra/ssl/aliyunssl/
    openssl pkcs8 -topk8 -inform PEM -in 18131XXXXXXXXX.key -outform PEM -nocrypt -out privkey.pem
    mv 1813131_mail.geekerconsulting.com.pem cert.pem
    chown zimbra:zimbra /opt/zimbra/ssl/aliyunssl/*
    
    su - zimbra -c 'cd /opt/zimbra/ssl/aliyunssl/ && /opt/zimbra/bin/zmcertmgr verifycrt comm privkey.pem cert.pem '
    
    echo "Backup Zimbra SSL directory"
    cp -a /opt/zimbra/ssl/zimbra /opt/zimbra/ssl/zimbra.$(date "+%Y%m%d")
    
    echo "Copy the private key under Zimbra SSL path"
    cp /opt/zimbra/ssl/aliyunssl/privkey.pem /opt/zimbra/ssl/zimbra/commercial/commercial.key
    
    echo "Final SSL deployment"
    su - zimbra  -c 'cd /opt/zimbra/ssl/aliyunssl/ /opt/zimbra/bin/zmcertmgr deploycrt comm cert.pem'
    
    echo "restart zimbra"
    su - zimbra -c 'zmcontrol restart'

    gist link:

    https://gist.github.com/alanljj/2f90ca543dc2f2e45319ac13c30bbf72

    验证zimbra ssl证书命令:

    su - zimbra -c '/opt/zimbra/bin/zmcertmgr viewdeployedcrt'

    更新

    通过上面的方法虽然没有提示任何错误,但可能无法更新证书,使用验证命令,仍然会显示老的证书。那么就需要以下的复杂流程了。

    zimbra证书的三个文件,目录/opt/zimbra/ssl/zimbra/commercial/:

    1. commercial_ca.crt
    2. commercial.crt
    3. commercial.key

    zimbra ssl证书制作方法:

    commercial_ca.crt – 阿里云下载证书1813131_domain.pem的第二部分,也就是第二个—–BEGIN CERTIFICATE—–到—–END CERTIFICATE—– 也就是中级证书(mid-digicert-ca) + 根证书(root-digiert-ca)

    阿里云免费ssl的根证书分享,不同发证机构根证书会有所不同:

    -----BEGIN CERTIFICATE-----
    MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
    MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
    d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
    QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
    MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
    b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
    9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
    CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
    nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
    43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
    T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
    gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
    BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
    TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
    DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
    hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
    06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
    PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
    YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
    CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
    -----END CERTIFICATE-----

    https://gist.github.com/alanljj/26b12b591173b3ba7c3c51edea09cad6

    commercial.crt – 1813131_domain.pem的第一部分,也就是第一个—–BEGIN CERTIFICATE—–到—–END CERTIFICATE—–部分。

    commercial.key – 就是1813131_domain.key,用上面的RSA密钥到PKCS#8 转换方法先转换,然后改名字就可以了。

    开始部署

    上传三个文件到/opt/zimbra/ssl/zimbra/commercial/目录,上传前检查、检查、再检查是否已经正确,如果老的文件已存在,先删除老的三个文件(技术奇客有碰到未删除,生成的文件格式不对导致无法更新ssl证书的情况)

    验证证书。进入/opt/zimbra/ssl/zimbra/commercial/目录后,使用zimbra用户执行:

    /opt/zimbra/common/bin/openssl verify -CAfile commercial_ca.crt commercial.crt

    部署证书。 使用zimbra用户执行 :

    /opt/zimbra/bin/zmcertmgr deploycrt comm commercial.crt commercial_ca.crt

    重启zimbra服务。

    su - zimbra -c 'zmcontrol restart' 

    查看新证书。

    su - zimbra -c '/opt/zimbra/bin/zmcertmgr viewdeployedcrt' 

    本方法ITGeeker技术奇客在CentOS 6 zimbra 8.8.11_FOSS版本实操通过。

    by ITGeeker Approven

奇客罗方公众号 奇客罗方小程序 奇客罗方客服 ITGeeker Telegram

网站由ITGeeker技术奇客开发并管理;隶属于GeekerCloud奇客罗方智能科技
Site designed and developed by ITGeekerwhich is a sub-website of GeekerCloud
网站地图 | 沪ICP备2021031434号-4