为什么我密码对了,就是登录不上?

今天又偶遇了之前用阿里云出现的问题:

明明密码没有错,本地登录可以,但远程登录就是不ok。

之前一直没有排查到错误,今天终于在本地机器的加持下得以解决。这是什么问题呢?IP地址冲突。

的确是IP地址冲突。首先先使用校园网client ssh b-server 服务器,失败了。使用同一个物理主机的a-server与b-server进行互联,成功了。校园网client能够连接a-server。因此,观察 a-server 和 b-server 的区别,发现 a-server 子网掩码是255.255.255.128,而 b-server 的子网掩码是 255.255.255.0。

此外,还有:

查看系统开放的端口
netstat -nltp
测试本地是否能够访问,排查本地问题
ssh user@locahost

子网掩码不同,为什么就连接不上呢?(原理)

最终,解决了这个问题。通过重启 networking 以及 重新通过 dhcp 获取 ip 地址。

  1. 使用 systemctl restart networking.service 重启 networking 服务。
  2. 使用 ifconfig eth0 down; ifconfig eth0 up 来开关具体的网卡。
  3. 使用 # dhclient -r 释放当前ip
  4. 使用 # dhclient 获取新的ip

大功告成,算是阶段性的解决了这个问题。DDNS迫在眉睫啊!

安装 GNU/Linux

之前一直搞不清楚 UEFI 和 Legacy 区别在哪里,今天搞了一下 Manjaro 终于搞明白了;比较好笑的是,我参考的是 Ubuntu 的文档。
https://help.ubuntu.com/community/UEFI

安装 Manjaro 的时候,一直都有个安装引导程序到某处,很纳闷,为啥我这里有这个东西,别人截图就没有。后来更换了rufus的写入的模式,也就是 UEFI only。然后重新以 UEFI 模式载入,终于,引导不再有之前的“安装引导程序“了。


感动不已,于是在这里记录一下。
https://askubuntu.com/questions/63610/how-do-i-remove-ubuntu-in-the-bios-boot-menu-uefi

绘制流程图,形成文档

可以使用的工具

  • https://www.websequencediagrams.com/
  • MY CHOICE: https://mermaidjs.github.io/
  • Another choice: google key word: sequence graph

把 svg 转换成 png 文件

Or without installing anything:

qlmanage -t -s 1000 -o . picture.svg 

It will produce picture.svg.png that is 1000 pixels wide.

I have tested it only on OS X 10.6.3.

例如:

sequenceDiagram
App->Server: 请求视频服务
Server-->Server: 生成支付信息
Server->App: 返回支付信息
Note left of App: 获取支付的相关信息
App-->支付宝: 完成付款
支付宝-->App: 支付成功
Note left of App: 获悉支付结果
支付宝->Server: 根据回调URL,发送支付结果
Server->App: 根据支付结果,发送给客户端

ssh 显示图像

原来一直认为ssh仅仅是一个字符界面,最近发现其实可以传输xserver中的图像。

方法很简单,只需要在ssh的选项中添加-Y就可以了。比如原来的ssh命令是这样:

ssh ubuntu@localhost

现在改成这样

ssh -Y ubuntu@localhost

非常简单有效。

另外,远程查看Ubuntu中的图像,可以使用eog命令。安装:

sudo apt install eog

安装完成后,直接运行eog ./test.png即可。这对于服务器调试相当方便了!

SSH 可选的加速策略

 -C      Requests compression of all data (including stdin, stdout,
         stderr, and data for forwarded X11 and TCP connections).  The
         compression algorithm is the same used by gzip(1), and the
         “level” can be controlled by the CompressionLevel option for pro-
         tocol version 1.  Compression is desirable on modem lines and
         other slow connections, but will only slow down things on fast
         networks.  The default value can be set on a host-by-host basis
         in the configuration files; see the Compression option.

classifier 文件分类

最近没有什么故事要讲,着实有点忙。但是文章太长时间不发也不好,说不定我有那么几个隐藏的很深的不爱说话的粉丝。

这里介绍一个小工具好了,·classifier· 是一个文件分类工具,包括音乐,pdf,图像等等。运行之后可以自动归类这些文件,懒人福音。

安装

pip install classifier

运行

进入目录,然后运行 classifier,像这样:

$ classifier

然后文件就会变得井然有序啦!

官方示例:

Example

Before:

Downloads
│   ├── project.docx
│   ├── 21 Guns.mp3
│   ├── Sultans of Swing.mp3
│   ├── report.pdf
│   ├── charts.pdf
│   ├── VacationPic.png
│   ├── CKEditor.zip
│   ├── Cats.jpg
│   └── archive.7z

After:

Downloads
│   ├── Music
│   │   ├── 21 Guns.mp3
│   │   └── Sultans of Swing.mp3
|   |
│   ├── Documents
│   │   ├── project.docx
│   │   ├── report.pdf
│   │   └── charts.pdf
|   |
│   ├── Archives
│   │   ├── CKEditor.zip
│   │   └── archive.7z
|   |
│   ├── Pictures
│   │   ├── VacationPic.png
│   │   └── Cats.jpg

更多有意思的东西,可以从 repo 看到:

https://github.com/bhrigu123/classifier

# Difference between map & unordered_map

目前有三个容器我不太了解其内部实现,打算通过 <c++ primer> 进行学习

  1. map
  2. multimap
  3. unordered_map

map

map 是目前最简单的结构,实现的方法是 BST(binary search tree)。因此,其时间复杂度等都与 BST 相同,搜索,增加,删除基本时间都是 log(n)。

use map when

  1. 数据有序
  2. 需要按照有序的顺序获得元素


unordered_map

unordered_map 则是通常所说的 hash table,哈希表,搜索,增加,删除都是以hash表为主,较好的情况是o(1),也就是hash函数可以较好的把元素分布到表中,如果 hash 函数比较糟糕,则每一次添加删除查找,都是完整遍历一个表。

use unordered_map when

  1. 对数据计数
  2. 只需要根据 key 访问 value

简单来讲,就是当你需要使用 vector 来计数的时候,可以用 unordered_map 来代替。

                  | map             | unordered_map
---------------------------------------------------------
Ordering        | increasing  order   | no ordering
                | (by default)        |

Implementation  | Self balancing BST  | Hash Table
                | like Red-Black Tree |  

search time     | log(n)              | O(1) -> Average 
                |                     | O(n) -> Worst Case

Insertion time  | log(n) + Rebalance  | Same as search
                      
Deletion time   | log(n) + Rebalance  | Same as search

multimap

multimap containers are generally slower than unordered_multimap containers to access individual elements by their key, but they allow the direct iteration on subsets based on their order.

Multimaps are typically implemented as binary search trees.

multiple 也是用 bst 实现的,相比 map,允许按照顺序遍历元素。

Reference

https://www.geeksforgeeks.org/map-vs-unordered_map-c/

# leetcode 相交链表

这是leetcode的解题报告。ARTS很想加入,但是因为自己懒,本身也做了这些事情,因此就一直都在拖,希望这周能够搞定。

origin

from leetcode

road

相交链表,两个指针分别遍历两个链表即可,具体可以画图来表示,两个链表,一个长度为 a+c,另一个长度为 b+c,两个指针势必会在 a+b+c 的位置相遇。

solution

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode *w1, *w2;
        w1 = headA;
        w2 = headB;
        if (!w1 || !w2) {
            return NULL;
        }
        while (w1 != w2) {
            if (!w1)
                w1 = headB;
            else
                w1 = w1->next;
            if (!w2)
                w2 = headA;
            else
                w2 = w2->next;
        }
        return w1;
    }
};

# 找房启示

安居客是不太行,所有的看起来不错的房源,没有一个能联系上,联系上的全都是没有了,建议别用安居客。

找房几个关键因素:

  1. 阳光好,(朝南)
  2. 床板硬,不凹陷
  3. 淋浴头水力充足
  4. 独立卫浴,
  5. 地铁口附近,
  6. 没有汽车声音
  7. 没有蟑螂老鼠,
  8. 隔音好,
  9. 马桶,是否正常使用
  10. 热水器,是否正常使用
  11. 冬天供暖多少度(集体供暖还是)
  12. 空调制冷情况,
  13. 房产证(是否和房东签合同)
  14. 水电如何收费,怎么缴费(商电民电等,差距比较大)
  15. 暖气费(一般是房东或者中介交)
  16. 天花板是否漏水,这个不要因为不是顶楼就不看,不是顶楼照样漏水!
  17. 设施损坏维修问题
  18. Wi-Fi,空调

根据这几个关键因素,找了两天的房子,终于有点收获,但是前期看房没有效率,耗费了不少的时间。此外,房子的地点需要额外精心挑选,离地铁近能省好多好多事情。。

自如贵一些,服务质量高,但是个人感觉是有溢价的,因此如果自己懂的套路多,又不是很懒,就可以避免。

链家和我爱我家,两大巨头,处理事情方便,房子相对小中介来言靠谱许多。

一些公寓的评论——来自微博和知乎,许多都在讲存在管家态度不好,以及隔音差,维修慢等问题。我感觉这个还是要看付了多少钱。一分价钱一分货,如果价格低,不要奢求太多。

# 解决 DD 之后 Mac 搞不定 USB 的问题

搜索了一通(可能是关键字找的不对),发现 Mac 对于磁盘异常的解决方案着实不多,因此用以下粗暴方法解决;

输入:

diskutil list

找到所需的 /dev/disk4

然后运行

sudo dd if=随便什么文件 of=/dev/disk4

此后再用disk utility.app进行格式化等等即可。


后来发现这个方法搞定的U盘往往出现一些诡异的问题,比如说在 Windows 的不同版本下无法读取,因此最好还是重新修复一下分区表。

# Docker swarm 学习

本文的学习过程主要是通过 Docker 官方文档

花了一段时间学习 Docker swarm,一个docker的容器集群服务,来应对即将到来的高并发项目需求。

Docker machine

Docker machine 是 Docker 官方编排的项目之一,可以理解成一个 Docker 宿主机器的统一管理CLI,自部署不是很好用:目前国内仅仅 aliyun 支持,其他的我在官方文档中没有找到。

Docker machine 的安装十分简单,通过官网提供的脚本即可,For Linux:

$ base=https://github.com/docker/machine/releases/download/v0.14.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo install /tmp/docker-machine /usr/local/bin/docker-machine

安装好以后,即可按照相关的操作进行运行。

比如,创建两个虚拟机:

$ docker-machine create --driver virtualbox myvm1
$ docker-machine create --driver virtualbox myvm2

进入虚拟机:

$ docker-machine ssh myvm1

显示虚拟机

NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.05.0-ce

然后即可在虚拟机的基础上进行相关的操作,十分方便。

Docker-swarm

Docker swarm 则是一个集群的东西,基本的概念是,每个宿主机器都是一个 worker ,然后大家都加入一个东西,叫做 stack ,stack 里面有许多的 container ,每个宿主机器,也分别是一个 node 。

这个 stack 是依据我们的 service 建立的,stack 中保存着 service 建立的名称,也可以通过 stack 查看相关的节点。

每个 node 都可以运行多个 container ,swarm 会进行 负载均衡 ,这个就很酷了。

图示

在官方的例子中,docker-compose.yml

version: "3"
services:
  web:
    # replace username/repo:tag with your name and image details
    image: svtter/get-started:part2
    deploy:
      replicas: 5
      resources:
        limits:
          cpus: "0.1"
          memory: 50M
      restart_policy:
        condition: on-failure
    ports:
      - "4000:80"
    networks:
      - webnet
networks:
  webnet:

复制的 app service 数量为 5。

大体上就是这个样子。

想法

行文至此,想到可以进一步学习,然后去一些相关的社区学习一波。(不过按照之前的经验,很多社区的质量都不高,讨论纯属浪费时间。)

学完这些东西,至少可以把自己的服务器升级一波,做成标准的DevOps,以及充分利用服务器资源了。

Code

GitHub – Svtter/Docker_Swarm_Test: a Docker swarm example project. Reference to official document.