typescript 聚合多个文件的多个类到一个命名空间

最近调研VSCode的插件开发,选择typescript语言,看了typescript的官方的指导手册关于 namespace 的使用方式,我尝试类官方给出的一个文件和多个文件场景下使用namespace 。 结果一个文件使用namesapce没有问题,但是多个文件共享namespace,VSCode的语法提示总是提示找不到xxxx。 重点说明下,插件工程使用 yo code 创建的,namespace的示例也是官方的,官方的多个文件共享一个命名空间的方法是使用 /// <reference path = "xxxx.ts" /> 指令。 百思不解,百度依然不解。幸好与多年的c++经验,借鉴c++的namespace中导入符号的方法,我找到类一条可行的路—-综合利用 nameapce , import as , extends,示意如下: a.ts内容 //a.ts export class A { } b.ts内容 //b.ts export class B { } c.ts内容 //c.ts export class C { } 然后创建一个聚合的ts文件,将 a,b,c的符号以子类继承方式聚合 my.ts //my.ts import * as _a from 'a'; import * as _b from 'b'; import * as _c from 'c'; expport namespace my { export class A extends _a.A {} export class B extends _b.B {} export class C extends _c.C {} } 使用示意: import {my} from 'my'; let tmp = new my.A();

January 21, 2020 · 1 min · holdsky

ubuntu 18.04 安装 shadowsocks server

shadowsocks 干啥用的,我就不细说了。 安装过程如下 安装pip3 shadowsocks有一个Python语言开发的实现,需要用pip安装 sudo apt-get update sudo apt-get install python3-pip 安装shadowsocks pip3 install https://github.com/shadowsocks/shadowsocks/archive/master.zip 查看是否安装成功,安装成功应该会有版本显示 ssserver --version //Shadowsocks 3.0.0 创建配置文件 sudo mkdir /etc/shadowsocks cd /etc/shadowsocks vi config.json config.json 的内容如下 { "server":"::", "local_address": "127.0.0.1", "local_port":1080, "port_password": { "8388":"端口A的密码", "9000":"端口B的密码", "9001":"端口C的密码" }, "timeout":300, "method":"aes-256-cfb", "fast_open": false } 启动server ssserver -c /etc/shadowsocks/config.json 添加server到系统服务 vi /etc/systemd/system/shadowsocks-server.service 内容如下 [Unit] Description=Shadowsocks Server After=network.target [Service] ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks/config.json Restart=on-abort [Install] WantedBy=multi-user.target 然后就可以以系统服务启动了 sudo systemctl start shadowsocks-server 参考 https://www.drsanwujiang.com/ubuntu-shadowsocks-install-and-optimize/

January 14, 2020 · 1 min · holdsky

小程序同层渲染--iOS WKWebView实现

先上代码 RenderWebViewWithNative 我只在模拟器环境中测了。 本文成文使用的环境 Xcode Version 11.3 (11C29) 模拟器版本Version 11.3 (SimulatorApp-912.5 SimulatorKit-570.3 CoreSimulator-681.17),对应iOS 13.2 同层渲染步骤 简单说下同层渲染效果,是将Native控件添加到WKWebView的子层级View中,最明显的是z-index 属性可以控制Native控件。详细请阅读https://developers.weixin.qq.com/community/develop/article/doc/000c4e433707c072c1793e56f5c813 需要前端改造的地方 为了让WKWebView为Native控件单独生成一个子层级的View,需要改变对应DOM节点的CSS样式,如 〈div style="position: fixed; font-size: 50px;overflow: scroll;-webkit-overflow-scrolling: touch" id="zl_native" 〉 〈zl-native id="zl_native_node"〉world〈zl-native〉 〈/div〉 本文成文环境中测试的结果是: WKWebView只为 position: fixed 的 标签内容生成单独的子层级视图 overflow: scroll;-webkit-overflow-scrolling: touch,在本文成文环境中不起作用;建议读者自行尝试更多的环境,以得到更准确的结论。 需要客户端改造的地方 首先,当前端加载DOM时,检测到需要Native渲染的节点,需要通过jsbridge通知客户端,把节点的信息告诉客户端。客户端根据节点信息找到对应的子层级view -(UIView *)find_zl_native_view { UIView *wkcontentview = [self get_wkcontentView]; NSMutableArray *arr = [wkcontentview.subviews mutableCopy]; while (arr.count > 0) { UIView *comp = arr.firstObject; [arr removeObjectAtIndex:0]; if ([@"WKCompositingView" isEqualToString:NSStringFromClass([comp class])]) { if ([comp.layer.name isEqualToString:@" id='zl_native'"]) { return comp; } } if (comp.subviews.count > 0) { [arr addObjectsFromArray:comp.subviews]; } } return nil; } 找到后,在这个子层级view上添加Native控件,渲染对应内容。 ...

January 13, 2020 · 1 min · holdsky

翻译: 介绍pptp 、l2tp、sstp、openvpn

文章内容为谷歌翻译 源址http://www.earthvpn.com/faq-items/what-is-the-difference-between-pptp-l2tp-sstp-and-openvpn/ PPTP 点对点隧道协议(PPTP)是Microsoft的一项发明,用于在拨号网络上创建VPN,因此多年来一直是内部业务VPN的标准协议。 它仅是一个VPN协议,并依靠各种身份验证方法来提供安全性。 它几乎在所有支持VPN的平台和设备上均作为标准配置提供,因此无需安装其他软件即可轻松设置,对于企业和个人使用而言,它仍然是一种流行的选择。 它还具有实现所需的低计算开销的优点。 EarthVPN通过MPPE 128位密码(带有或不带有压缩功能以及MS-CHAPv2身份验证)实施PPTP加密。 L2TP / IPSec 第2层隧道协议(L2TP)是通过Cisco和Microsoft之间的合作关系而产生的,其目的是提供更安全的VPN协议。 与PPTP相比,L2TP被认为是一种更安全的选择,因为结合使用了拥有更多安全加密算法的IPSec协议。 它还需要预共享的证书或密钥。 EarthVPN通过具有AES加密算法的标准化IPSec协议实现L2TP加密。 256位密钥将用于加密。 SSTP 安全套接字隧道协议(SSTP)在大多数VPN连接将被阻塞的情况下起作用。 其中包括禁止使用VPN技术的国家和某些阻止VPN连接的公司。 它使用TCP端口443,与安全套接字层(SSL)传输使用的端口相同。 这与特殊方法结合以形成数据包,以允许SSTP传输通过大多数代理和防火墙。 它被认为是VPN隧道协议中最安全的,因为它使用SSL,身份验证证书和2048位加密。 SSTP的主要缺点是它仅由Microsoft创建,仅在Windows Vista SP 1和Windows 7/8上运行。 由于它是专有软件,因此尚无计划将其正式提供给Mac OS,Linux和较旧版本的Windows用户。 如果您无法使用PPTP或L2TP协议进行连接,并且可以浏览https网站,则SSTP最有可能为您工作。 OpenVPN OpenVPN是一种相当新的开源技术,它使用OpenSSL库和SSLv3 / TLSv1协议以及其他技术来提供强大而可靠的VPN解决方案。 它的主要优点之一是高度可配置,尽管它在UDP端口上运行最好,但可以将其设置为在任何端口上运行,包括TCP端口443。这使得它的流量无法区分,除了使用SSL上的标准HTTP,因此很难阻止。 EarthVPN实施具有AES密码,128位和256位(可选)加密的OpenVPN协议,哈希算法为160位SHA1,控制通道为TLSv1 / SSLv3 DHE-RSA-AES256-SHA和2048位RSA。 EarthVPN在TCP端口80(http),443(https),992、1194、8888和UDP端口53(dns),80、992、1194和8888上提供OpenVPN / SSL VPN协议。 如果无法使用PPTP或L2TP协议进行连接,则可以尝试使用具有不同tcp和udp端口的OpenVPN进行连接。

January 8, 2020 · 1 min · holdsky

Gitblit权限类型

主要是这张图,看懂就懂 权限定义: V ,可以使用浏览器查看、订阅RSS、zip打包下载 R ,具有V的所有权限,还具有复制(克隆)远程仓库到本地的权限 RW,具有R的所有权限,还具有推送到远程仓库的权限 RWC,具有RW的所有权限,还具有创建远程分支的权限 RWD,具有RWC的所有权限,还具有删除远程分支的权限 RW+ ,具有RWD的所有权限,还具有回退远程分支的权限 其他: admin ,拥有所有权限(这毋庸置疑) owner,可以创建、编辑、重命名、删除、fork个人仓库 认证用户,可以创建个人仓库、fork个人仓库 参考http://www.gitblit.com/administration.html

January 3, 2020 · 1 min · holdsky

nwjs:使用webview加载本地网页

首先配置权限 在 package.json 中添加以下 partitions 内容 { "webview": { "partitions": [ { "name": "trusted", "accessible_resources": [ "<all_urls>" ] } ] } } 然后为webview 的dom节点添加属性 partitions="true" <webview partition="trusted"></webview> 之后就可以使用 src 属性加载本地文件。 或者使用javascript: var webview = document.createElement("webview") webview.partition="trusted" webview.src = "test/index.html" document.body.appendChild(webview) 参考https://nwjs.org.cn/doc/api/webview-Tag.html

January 1, 2020 · 1 min · holdsky

使用JavaScript在HTML DOM中设置全屏、隐藏滚动条

不显示滚动条 document.body.style.overflow = "hidden" //不显示滚动条 全屏 document.body.style.height = win.window.innerHeight + "px" document.body.style.width = win.window.innerWidth + "px"

December 31, 2019 · 1 min · holdsky

VSCode+NWJS调试环境配置

我使用的Mac OS系统。 需要说明的是: Debugger For NWjs 可以一键式配置,但是nwjs官网速度实在是惨不忍睹啊。 首先,需要下载 nwjs sdk,官网速度能忍就忍吧,不能忍就下载国内的镜像版本,可以从这里下载https://nwjs.org.cn/download.html VSCode是必需要安装的。 说下调试配置。先在VSCode的插件市场中下载安装 Debugger For NWjs, 然后,在系统的用户目录下建立如下目录: # ~/.nwjs/nwjs-sdk-版本-系统平台-cpu架构 # 例如 mkdir ~/.nwjs/nwjs-sdk-v0.43.1-osx-x64 然后把下载的 nwjs sdk 解压到这个目录下,注意需要nwjs就在这个一级目录下。 然后用VSCode打开nwjs项目, VSCode ->调试->添加配置,应该就可以调试了。

December 31, 2019 · 1 min · holdsky

在Ubuntu19.10 上部署dzzoffice+onlyoffice协同办公系统

单台计算机的安装部署过程。 硬件要求(推荐) 一台计算机 CPU 2G+,实测1G也可以运行,但仍然建议大点吧 RAM 2G+,实测1G也可以运行,但仍然建议大点吧 硬盘可用空间,实测大于5G就可以安装部署,但仍然建议越大越好 独立网卡和高速网络 固定ip地址 需要的软件 Ubuntu19.10 server版 Docker Apache2 php7 MySql dzzoffice 安装部署过程 Ubuntu19.10 server 官方的太慢了,用国内镜像吧,我用的是网易镜像站 下载地址: http://mirrors.163.com/ubuntu-releases/19.10/ubuntu-19.10-live-server-amd64.iso 下载完成后,直接安装,安装过程中需要联网,ubuntu安装向导挺人性化的,接近Windows系统安装,很容易很方便。 需要注意的是,ubuntu 安装过程中有一步骤需要输入镜像站地址,因为众所周知的原因,还是输入国内的吧。我输入的是网易的, http://mirrors.163.com/ubuntu (建议)安装OpenSSH Server 这步骤不是必需的,但会方便远程访问,更方便后续安装过程的复制粘贴。 sudo apt-get install openssh-server #启动ssh服务 sudo service ssh start 然后远程登陆主机 我使用VSCode + Remote SSH。之所以远程登陆,是为了方便后面的复制粘贴。 VSCode + Remote SSH大概配置如下: Host dzz_ubuntu19.10 HostName ubuntu主机地址(可以是ip地址) User 用户名 # Port 22 默认是22 上面配置是使用用户名和密码的方式访问,也可以使用私钥文件方式访问,本文不讨论。 安装Docker 安装过程,参考https://www.runoob.com/docker/ubuntu-docker-install.html 如果有旧版本,先卸载旧版本 $ sudo apt-get remove docker docker-engine docker.io containerd runc 更新索引 ...

December 30, 2019 · 2 min · holdsky

局域网部署文档协同办公系统:Windows + onlyoffice + dzzoffice

如果能连接公网的话,关闭本页面吧。一大票的好用的解决方案、office365、google doc、wps、腾讯文档、石墨文档。。。。。。 废话不说,直接进入正题,单台计算机的安装部署过程。 硬件要求 一台计算机 CPU 2G+ RAM 4G+ 独立网卡和高速网络 固定ip地址 需要的软件 Windows操作系统,Windows7之类,不需要Windows Server也可以 Virtual Box,虚拟机 DockerToolBox,docker集成工具 Xampp,LAMP集成环境 Onlyoffce document server dzzoffice 安装部署过程 安装VirtualBox 官方下载地址: https://www.virtualbox.org/wiki/Downloads 国内下载地址:自己百度吧。国内下载的速度会快一些 下载完成后,直接安装。在Windows上安装软件基本可以“一路确定” 安装Docker Windows上使用DockerToolBox集成工具,国内可以使用阿里云的镜像来下载,下载地址: http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/ 同样是“一路确定”。详细安装过程,参考https://www.runoob.com/docker/windows-docker-install.html 安装后,启动 Docker Quickstart Terminal 初始化Docker,等待即可(中途可能会询问权限,放开就好)。 用Docker安装Onlyoffce document server 打开 Docker Quickstart Terminal,正常的情况下会看到这么一行 docker is configured to use the default machine with IP 192.168.99.100 记下这个ip地址,后面会用到。 输入命令 docker pull onlyoffice/documentserver 等待吧,如果网速不快也许就半个小时。 安装后,启动documentserver,并将宿主9000端口映射到docker的80端口 docker run -i -t -d -p 9000:80 onlyoffice/documentserver 用浏览器打开 http://ip:9000(本文对应 http://192.168.99.100:9000),应能看到 ...

December 28, 2019 · 1 min · holdsky