daorren's Secrets


  • 首页

  • 分类

  • 归档

  • 标签

如何让外网访问本机服务

发表于 2017-11-18

大家平时在工作中,可能会遇到这样的问题:本机处在一个内网环境中、没有外网IP,但如果希望运行在本机的服务,让外网也能够访问,怎么做到呢?

接下来就介绍几种方法,可以解决这样的问题,思路都是一致的,依靠一个拥有公网IP的机器中转,把内网映射出去。

简单法:直接运行 ngrok/localtunnel

ngrok 和 localtunnel 都是开箱即用的工具,其原理是服务提供商提供了域名,为你的服务做转发。你不需要自己准备中转的机器,只要下载这俩工具到本机,对于临时的访问需求可以直接使用。

但是这两个工具又各有缺点,ngrok 首先是被墙了,其次如果你不是付费用户,每次启动 URL 都会发生变化;而 localtunnel 经常异常崩溃,可能需要额外的重启脚本。

也就是说,如果你的情况比较特殊,比如需要和外部服务对接,映射出去的你本机的服务需要越稳定越好,这两种方式都不会是首选。

阅读全文 »

网络协议——写给每个懂点编程的同学

发表于 2017-06-12

原本是我想了解一下底层网络的一些原理,看了几天《TCP/IP 详解 卷一》,但是这部书读起来十分吃力。这时候正好看到 hn谈到这篇 Network protocols。所以特地翻译过来,希望也能有人从中受益。本人知识有限,在一些译文处补充了原文用词来辅助理解,翻译不对之处欢迎指正。本文同时也发布在Ruby-China。

网络栈技术,完成了几件看起来不可能的任务。它在不可靠网络基础上,实现了可靠数据传输,传输过程中鲜有可察觉的问题出现。它在网络拥塞时能够平滑适应。它给网络中上十亿的活动节点提供地址。它能在受损的网络基础设施中,往正确的路线发送数据包,即使是乱序到达在接收端,也能将数据包重新装配成正确的顺序。它适应了深奥的模拟analog硬件需求,比如以太网电缆两端的电荷平衡。网络技术工作得如此之好,以至于网络用户们从没听说过它们,甚至大部分编写程序的工程师们也不知道底层究竟是如何工作的。

阅读全文 »

《深入浅出MySQL》笔记

发表于 2017-04-10

TL;DR

《深入浅出MySQL》是讲MySQL不可多得的好书,做法和背后的原理都涉及。索引和锁,show variables 查看参数,优化SQL的几大步骤等,是这本书的核心。不过这篇文章作为记录性笔记,参考意义更大些,可读性可能不是很强。

第一部分 基础篇

支持的数据类型

  • 数值类型
    • 整数类型。按照取值不同,有tinyint、smallint、mediumint、int、bigint。
      指定显示宽度,如int(5),默认为int(11),常与zerofill同用,也就是不够长用0填空。存储数据超过宽度限制时,宽度限制不再有意义。
      属性 UNSIGNED(无符号)。tinyint有符号范围是 -127~+127,而无符号范围是 0~255。
      属性 AUTO_INCREMENT。插入NULL到此列时,MySQL插入一个比该列当前最大值大1的值。
    • 小数
      • 浮点数。包括float单精度和double双精度。
      • 定点数。只有decimal一种表示。(注:这里我不懂linux的数值表示,浮点定点是基于二进制表示)
        小数可以在类型名称后加(M, D),表示该值一共显示M位数字,其中D位位于小数点后面。M和D称为精度和标度。
        浮点数不指定精度时,会按照实际精度(硬件和操作系统决定),而定点数不指定精度时,默认为(10, 0)。
        注意,超过精度的数值,会被截断;而在传统的SQL Mode下,记录将无法插入。
    • BIT位类型。存放二进制数,使用时需要 select bin(column) 或者 select hex(column)。
  • 日期时间类型
    • Date只保存日期,Time只保存时分秒,Datetime保存日期加时分秒。Year只保存年。
    • Timestamp。支持范围较小,表中第一个Timestamp列自动设置为系统时间。Timestamp与时区有关,插入查询都会先转换成本地时区。
  • 字符串类型
    • CHAR与VARCHAR。用户保存较短字符,主要区别是存储方式。CHAR列的长度固定为创建表时声明的长度,VARCHAR列保存可变长字符串。
      另外,查询的时候,CHAR列删除末尾的空格,而VARCHAR则保留空格。(改小VARCHAR限制,性能不会提高)
    • ENUM。枚举类型,255个成员以下用1个字节,65535个成员以下用2个字节。一次只能取单个值
    • SET。类似ENUM,存储64个成员以下,占用字节数也大,但一次能取多个值
阅读全文 »

《Ruby设计模式》笔记

发表于 2017-03-31

第一部分 设计模式与Ruby

  • 把变的和不变的分开
  • 针对接口编程,而不对实现编程
    在Ruby中,虽然没有接口这种实际结构,但其真实意义是尽可能针对最通用的类型进行编程。
    如果能用交通工具来处理汽车类型,就别对汽车使用汽车类型。
  • 组合优先于继承
    使用继承,一旦需要修改超类的行为,子类都会受到影响。所以使用组合进行装配会更好。
    所谓组合,就是在实例中,用实例变量保存需要的对象。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    class Engine
    def start;end
    end
    class Car
    def initialize
    @engine = Engine.new
    end
    def drive
    @engine.start
    end
    end
  • 委托,委托,委托
    Car类的这个方法就是委托。组合和委托并用是比继承更强大灵活的手段,且没有继承的副作用。代价是对性能的轻微影响,以及需要编写模板代码。

    1
    2
    3
    def start_engine
    @engine.start
    end
阅读全文 »

浅谈不同版本HTTP协议

发表于 2017-02-08

做Web开发的同学,肯定对互联网的基石——HTTP协议有所了解吧,据说这也是技术面试的时候经常出现的问题呢!

这里我从比较协议版本异同的角度,带大家回顾一下经典的知识。

阅读全文 »

用Electron把任意WebApp打包成跨平台桌面应用

发表于 2017-01-12

Electron 是 Github 搞的一个开发框架,利用Web技术去打造跨平台的桌面应用。

Electron的原理是,把现代浏览器的核心封装,向下对接不同操作系统,向上则统一提供浏览器平台运行你的应用程序。

有时候,你可能用 Django、Laravel、Rails 这样的后端框架,把Web应用已经写好了。这时候想打包成桌面应用,也可以使用Electron,而且这是本文的目的。

只不过,一般情况是在Electron容器中运行诸如用Angular等JS开发框架开发的应用(local),而这个情况下,在其中打开你的应用网址即可(remote)。

其好处是,不需要用户安装特定的浏览器;同时还能在不用更新安装包的情况下,保证使用开发者最新版本的应用。

阅读全文 »

如何用Hexo新建一个blog

发表于 2016-12-29

一年多前,我看到一个很好看的 Jekyll 主题leonids(预览)。于是用它来建了第一个Github-Pages的博客。虽然他视觉元素很棒,但那时候的我还hold不住Jekyll。没实现只要写好MD格式的post并提交,其他都不用管的目标,所以写了一篇博文之后就晾着了。
16年底我又回来了,缘起于一个清新的 Hexo 主题Next(预览)。这次实现了需要的目标嘿嘿。

  • 用 Hexo 建站,使用你要的主题
  • 启用 Github-Pages ,并使用 Travis-CI 自动更新
阅读全文 »
daorren

daorren

Call me Maybe

7 日志
10 标签
Douban GitHub
© 2017 daorren
由 Hexo 强力驱动
主题 - NexT.Pisces