oracle cloud and google cloud

春节在家,一直到初五都没闲着,这几天主要是在折腾eve-ng,装了2台mac电脑,还有一个google cloud,用下来还是gcp给力,毕竟300美金不是闹着玩的。

oracle cloud

说google cloud的之前,得先唠叨下我去年申请的oracle cloud,号称永久免费的云,虽然配置不怎么地,胜在免费,用下来挺不错,唯一不爽的是一直要登录oracle的shell,今天突然发现,使用token的方式,与ssh密码登录是不矛盾的,只能怪自己学艺不精吧

vi /etc/ssh/sshd.conf

在上面的配置文件里,修改两个地方

  • PasswordAuthentication yes
  • Passwordlogin yes

然后重新启动ssh服务

systemctl restart sshd

就可以实现ssh登录了

google cloud

为什么要折腾google cloud呢?按理说我自己的目标是在aws找一个网工的职业,在苦寒之地可以不用洗盘子和在超市搬货。所以在我寻找eve-ng这个软件的部署方式时,突然发现原来是可以在云主机上部署的,唯一的特殊要求是,需要支持nested,也就是在虚拟机套娃(在一台虚拟机里,再安装一台虚拟机),这个时候就要用到一个比较特殊的技术,vmx,也就是允许虚拟机把硬件资源开放出来,让套娃虚拟机继续使用,和我们搞gpu的passthrough很类似,很可惜,国内的阿里云是不支持这样做的,目测下来只有google cloud支持的比较好。

所以早晨抓紧时间,利用目前google的优惠政策,申请了一台3个月的免费主机,算下来,3个月我也能在网络技术方面小有所成了。

下面是这次的几个心得

  1. 申请ecs的时候,选4个vcpu,16g内存,因为eve可能要支持100个node,每个node也许就要部署一个1G的镜像包 ,性能太差就玩不起来;
  2. 硬盘可以选的差一点,我直接用了standard,而不是ssd,每个月50G可以省7美金,用下来觉得自己真是会精打细算;
  3. cpu架构一定要选intel的cascade或skylake,一方面便宜,另外对vmx支持比较好
  4. 3个月biling大概350加币,马上就要突破300美金了,有一点点紧迫的感觉
  5. 云主机创建完成,会发现ssh的环境和cloud shell的环境不同,ssh上的是ubuntu20的环境,这就是套娃虚拟机的系统,是用eve官网给的命令安装的;而google cloud的环境是debian的系统,内核版本很高,关于这两个环境不不同的原因我还没有搞的很清楚,毕竟整个ecs创建的过程中,没有让我选择os啊?

20G disk space is not mounted!

今天打算在阿里云上安装eve-ng,感觉磁盘空间可能不足,打开控制台,发现还有一个20G的数据盘,觉得勉强够用,就直接在终端上通过lsblk查看

[MDaliyun ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
loop0    7:0    0 63.5M  1 loop /snap/core20/2015
loop2    7:2    0 40.4M  1 loop /snap/snapd/20671
loop3    7:3    0 11.9M  1 loop /snap/kubectl/3164
loop4    7:4    0 63.9M  1 loop /snap/core20/2105
loop5    7:5    0 40.9M  1 loop /snap/snapd/20290
loop6    7:6    0 11.9M  1 loop /snap/kubectl/3149
vda    252:0    0   40G  0 disk 
└─vda1 252:1    0   40G  0 part /
vdb    252:16   0   20G  0 disk 

好家伙,这一看不要紧,发现vdb这块盘虽然启动2年了,但是一直没有挂载,就这么白白浪费了2年!
马上格式化,挂载,把它用起来,为了省事,直接让chatgpt出马:

The output /dev/vdb: data from the file -s /dev/vdb command indicates that the /dev/vdb block device does not have a recognizable filesystem or partition table. This typically means that the disk is either unformatted or contains raw data that is not structured in a manner recognized by the file command.

Given this situation, if you intend to use /dev/vdb for storage, the next steps would involve creating a filesystem on it. Here's how you can do it:

Create a Filesystem on /dev/vdb
Choose a Filesystem Type: Decide on the type of filesystem you want to create. Common choices include ext4 for general use, xfs for high-performance environments, and btrfs for systems requiring advanced features like snapshotting.
Create the Filesystem: Use the mkfs command to create a filesystem. For example, to create an ext4 filesystem on /dev/vdb, you would use:
bash
Copy code
mkfs.ext4 /dev/vdb
Replace ext4 with your filesystem of choice if different.
Mount the Filesystem
After creating the filesystem, you can mount it to make the storage available for use:

Create a Mount Point: This is the directory where the disk's contents will be accessible. For example, to create a mount point at /mnt/data, use:
bash
Copy code
mkdir /mnt/data
Mount the Disk: Mount the newly formatted disk to the mount point:
bash
Copy code
mount /dev/vdb /mnt/data
Ensure Persistent Mounting Across Reboots
To automatically mount the disk after a reboot, you'll need to add an entry to the /etc/fstab file:

Find the UUID of /dev/vdb: The UUID is a unique identifier for the disk, which is preferable to use in the /etc/fstab file instead of the device name (/dev/vdb) since it won't change between reboots.
bash
Copy code
blkid /dev/vdb
Edit /etc/fstab: Add a line to this file with the disk's UUID and mount information. Open the file in a text editor (like nano or vi), and add a line similar to:
plaintext
Copy code
UUID=<your-uuid> /mnt/data ext4 defaults 0 2
Replace <your-uuid> with the actual UUID you obtained from the blkid command.

使用mkfs.ext4这个命令,作为通用存储,结果如下:

[MDaliyun ~]# mkfs.ext4 /dev/vdb
mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 5242880 4k blocks and 1310720 inodes
Filesystem UUID: 811e4057-5c8b-45e2-8fb9-40e023ec72cc
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done   

然后挂在在data下面:

[MDaliyun /]# mkdir /mnt/data
/
[MDaliyun /]# file -s /dev/vdb  
/dev/vdb: Linux rev 1.0 ext4 filesystem data, UUID=811e4057-5c8b-45e2-8fb9-40e023ec72cc (extents) (64bit) (large files) (huge files)
[MDaliyun /]# mount /dev/vdb /mnt/data
[MDaliyun /]# blkid /dev/vdb
/dev/vdb: UUID="811e4057-5c8b-45e2-8fb9-40e023ec72cc" TYPE="ext4"

再使用lsblk看看,成功了

不过正事还没有完,eve-ng是虚拟机,没法在已经虚拟化的机器上安装(阿里云不支持vmx,也就是硬件已经使用了一次kvm的vmx,虚拟机里就无法支持二次的vmx了),但是我的本地电脑也没有空间继续安装vmware,如何是好?

https://zhuanlan.zhihu.com/p/548997684
我们知道,在Intel处理器上,KVM使用Intel的vmx(virtul machine eXtensions)来提高虚拟机性能, 即硬件辅助虚拟化技术, 现在如果我们需要测试一个openstack集群,又或者单纯的需要多台具备"vmx"支持的主机, 但是又没有太多物理服务器可使用, 如果我们的虚拟机能够和物理机一样支持"vmx",那么问题就解决了,而正常情况下,一台虚拟机无法使自己成为一个hypervisors并在其上再次安装虚拟机,因为这些虚拟机并不支持"vmx"

嵌套式虚拟nested是一个可通过内核参数来启用的功能。它能够使一台虚拟机具有物理机CPU特性,支持vmx或者svm(AMD)硬件虚拟化。

langchain的sdk也升级了

前两天升级openai后,这两天一直在解决下面的错误,openai的error属性缺失

File /usr/local/lib/python3.11/site-packages/langchain/chat_models/openai.py:77, in _create_retry_decorator(llm, run_manager)
     68 def _create_retry_decorator(
     69     llm: ChatOpenAI,
     70     run_manager: Optional[
     71         Union[AsyncCallbackManagerForLLMRun, CallbackManagerForLLMRun]
     72     ] = None,
     73 ) -> Callable[[Any], Any]:
     74     import openai
     76     errors = [
---> 77         openai.error.Timeout,
     78         openai.error.APIError,
     79         openai.error.APIConnectionError,
     80         openai.error.RateLimitError,
     81         openai.error.ServiceUnavailableError,
     82     ]
     83     return create_base_retry_decorator(
     84         error_types=errors, max_retries=llm.max_retries, run_manager=run_manager
     85     )

AttributeError: module 'openai' has no attribute 'error'

开始有点着急,毕竟openai已经是最新版本了,不想降级,然后就开始把openai.py里的相关code都注释掉,这下可好,压下葫芦起了瓢,各种稀奇古怪的问题都跑出来,
不得已检查各种包的版本

pip3 list --outdated

发现langchain也要升级了,最后一招制敌。

pip3 install --upgrade langchain

升级到新版本后,问题解决了

pip3 show langchain       
Name: langchain
Version: 0.0.352
Summary: Building applications with LLMs through composability
Home-page: https://github.com/langchain-ai/langchain
Author: 
Author-email: 
License: MIT
Location: /usr/local/lib/python3.11/site-packages
Requires: aiohttp, dataclasses-json, jsonpatch, langchain-community, langchain-core, langsmith, numpy, pydantic, PyYAML, requests, SQLAlchemy, tenacity

如果按照网上的建议,非得降级才能解决,这不是自断手脚嘛。

pip install openai==0.28.1
pip install langchain==0.0.330

langchain应用课程

这是吴恩达和langchain创始人联合开的一门课,目前我在学两个课程,1个是应用框架介绍,1个是langchain和data结合。
langchain application course

##我的初步思考

  • langchain的应用框架,核心,是为了更好的完成对llm的输入和输出。为什么普通用户不可以完成一个完美的prompt,因为缺乏训练,或者因为完美的prompt重复性内容很多,特别是针对某一类垂直领域的业务,其模式是非常固定的,人就懒惰了。
    1. 我们首先要完成一个完美的prompt(和parsers) ;
    2. 然后分析这个prompt,里面有哪些内容是可以重复使用?灵活使用的?把这部分拿出来作为模版或者变量,例如:语言的选择,形式的选择,语气的选择等待;
    3. 在上面业务分析的基础上,利用langchain的各种组建,实现上面的设计。

chatapi有两种方式

直接调用openai的api

response = openai.ChatCompletion.create(

        model=model,

        messages=messages,

        temperature=0, 

    )
    

调用langchain来实现

chat = ChatOpenAI(temperature=0.0, model=llm_model)

维特根斯坦说过,你如何使用语言,你就如何思维;你如何思维,你也如何使用语言。
你如何使用语言呢,其实就是你语言的关键词有哪些,这些关键词的顺序是怎样的。

  • thought是llm应该如何去理解问题;
  • Action是llm应该采取什么行动;
  • Oberservation是llm从action中得到了什么;

参考-维特根斯坦说过的话

  1. "语言不仅仅是传达思想的工具;它也塑造和限制了我们所能思考的内容。" – 这句话源自维特根斯坦的著作《逻辑哲学论》(Tractatus Logico-Philosophicus)。维特根斯坦在这里阐述了一个关于语言和思维的基本观点:语言不仅仅是用来表达我们已有的思想,它实际上还在形塑和限制我们的思维方式。换句话说,我们能够想到什么,以及我们如何去思考,很大程度上受到我们所使用的语言结构和词汇的限制。例如,如果某种语言没有表达特定概念的词汇,那么使用这种语言的人可能很难理解或思考这个概念。这体现了语言不只是思维的载体,也是思维的塑造者和限制者。

  2. "我们的语言是我们思考的镜子。" – 来自《文化与价值》(Culture and Value)。在这句话中,维特根斯坦强调了语言和思维之间的反映和相互作用。这里,语言被视为一种反映我们思考方式的工具。就像镜子一样,语言展示了我们的思考模式和心理过程。这意味着通过观察和分析我们的语言使用,我们可以了解自己的思维习惯和方式。这种观点也强调了语言和思维之间不可分割的关系,表明我们的语言实际上揭示了我们的思考特征和倾向。

查理芒格去世,学习一切,才是他挥舞的长剑

今天早晨看到芒格去世的消息,众多公众号文章中,有一篇我阅读的最认真,下面这段话特别引起我的共鸣,大概一周前,在郑州一间宾馆房间里,我产生过类似的想法。

83岁的芒格在南加州大学毕业典礼上说:

我想进一步解释为什么人们必须拥有跨科学的心态,才能高效而成熟地生活。在这里,我想引用古代最伟大的律师马尔库斯·图鲁斯·西塞罗的一个重要思想。

西塞罗有句话很著名,他说,如果一个人不知道他出生之前发生过什么事情,在生活中就会像一个无知的孩童。

这个道理非常正确,西塞罗正确地嘲笑了那些愚蠢得对历史一无所知的人。但如果你们将西塞罗这句话推而广之——我认为你们应该这么做——除了历史之外,还有许多东西是人们必须了解的。

所谓的许多东西就是所有学科的重要思想。但如果你对一种知识死记硬背,以便能在考试中取得好成绩,这种知识对你们不会有太大的帮助。

你们必须掌握许多知识,让它们在你们的头脑中形成一个思维框架,在随后的日子里能自动地运用它们。如果你们能够做到这一点,我郑重地向你们保证,总有一天你们会在不知不觉中意识到:“我已经成为我的同龄人中最有效率的人之一”。

与之相反,如果不努力去实践这种跨科学的方法,你们中的许多最聪明的人只会取得中等成就,甚至生活在阴影中。

过去40年,我对某些领域的知识,有意无意的不接触,例如医疗健康、化学、汽车修理,大多数人和我一样,被工作劳心劳力,即使一个热爱学习的人,也往往把精力放在与工作有关的事情上。就算有自己的兴趣,也仅仅聚焦在很窄的一个领域。

我们生而为人,作为个体和宇宙发生联系,对宇宙的认识的质量,是建立在从古至今,从中到外所有人有价值的知识上。缺乏任何方面的知识,都会影响我们对宇宙的认知。

这并不是说,学习中不要区分优先级,毕竟选择哪些马上可以实践的知识,是学习知识最好的方式。

我的核心看法是:不能为自己预设学习的门槛,不能把兴趣、利益作为掩盖懒惰的借口,所有未知的知识,都是你要勇于去探索,去掌握、去实践的。否则就是自动放弃掌握你的小宇宙的权利,拱手相让给那些坏人。

不要被懒惰、胆怯掌控,去面对整个宇宙,留下一点点余晖,最终消失在星辰之间。

附录:
查理·芒格逝世:我的剑传给能挥舞它的人

端口的行规

下面的文章,解决了多年的一个疑惑,端口号的命名,真的有规律吗?

De Facto Ports

Most applications communicate over a TCP or UDP port. Ports 0-1023 are usually privileged and require administrator or superuser access to bind a network socket to an IP with the corresponding port. But anything over 1024 is up for grabs. IANA (Internet Assigned Numbers Authority) can “reserve” ports for specific applications — but this is only a formality; users and applications are free to use whatever port they wish.

So a look at some port numbers (1024+) and how they are used as default ports today, in 2023. There are many lists out there, but this aims to capture a list of protocols actually used in production (and leaves off many one-off ports used for specific games).

Some interesting patterns observed:

Odd-numbered and easy-to-remember ports are usually used for development servers. 3000, 5000, and 9000 are common in all-in-one web frameworks. Applications that have a related privileged application port (e.g., SMTP, DNS) sometimes use a repeated string (e.g., 5353 for Multicast DNS, 3535 for SMTP, or 8080 for a web server). Other than that, it seems like the strategy is to pick a number with low entropy (e.g., Jupyter on 8888) or a completely random one unlikely to cause conflicts (e.g., 25565 for Minecraft).

Odd-numbered and easy-to-remember ports are usually used for development servers. 3000, 5000, and 9000 are common in all-in-one web frameworks. Applications that have a related privileged application port (e.g., SMTP, DNS) sometimes use a repeated string (e.g., 5353 for Multicast DNS, 3535 for SMTP, or 8080 for a web server). Other than that, it seems like the strategy is to pick a number with low entropy (e.g., Jupyter on 8888) or a completely random one unlikely to cause conflicts (e.g., 25565 for Minecraft).

1080 — SOCK Proxy
2049 — Network File System (NFS)
2181 — Apache ZooKeeper
2375 — Docker REST API (HTTP)
2376 — Docker REST API (HTTPS)
3000 — “The Development Framework Port.” Ruby on Rails uses port 3000 as the default development port for its web server. Node frameworks use this port (e.g., Express.js, Meteor, Create React App, NextJS, SvelteJS, Astro, Remix).

3306 — MySQL

3478 — STUN, TURN (NAT Traversal)

4000 — Phoenix, Jekyll

4001 — etcd

4200 — AngularJS

4567 — Sinatra

5000 — “The Other Development Framework Port.” Flask (Python) uses 5000 as the default development port. As does ASP.NET Core.

5222 — XMPP (Extensible Messaging and Presence Protocol)

5349 — STUN, TURN over TLS

5353 — Multicast DNS — Follows the same pattern as SMTP, occasionally being run on port 3535. Duplicates the privileged port (DNS uses 53).

5432 — PostgreSQL

5900 — VNC (using a remote frame buffer, RFB)

6000 — X11 (over the network). Common to take the display number and add it to 6000 (e.g., DISPLAY 6 would be served over 6006).

6379 — Redis

6660 — IRC (Internet Relay Chat)

6881 — BitTorrent

8000 — “Python Development Framework Port.” Includes Django and Python 3’s http.server.

8080 — “The HTTP web server port.” Like 5353 (Multicast DNS) and 3535 (SMTP), an unprivileged port to run an HTTP webserver.

8333 — Bitcoin

8888 — Jupyter Notebook,

8983 — Apache Solr

9000 — Used by various applications, but no central theme or extremely well-known application.

25565 — Minecraft

27017 — MongoDB

51820 — WireGuard

加拿大学校和专业选择

信息来源

  • 学校官网,alerba大学官网信息组织的更有效率,u get what u want,calgary大学就比较活泼,但是信息组织较为混乱
  • redit,关注了/ucalgary and /ualberta,明显albeta大学的群更活跃、更卷,也让你在不上学的情况下,有一种置身室内的体验
  • youtube,质量较高,广度深度都有覆盖,但是偏重国际学生体验,英文资源中印度中介很多
  • b站,可以有视觉体验,极少数up主质量很高
  • 知乎,有一些靠谱介绍,不过可疑的留学中介也很多
  • 一亩三分地app,post数量较少,这两所大学都不是热门

阿尔伯塔省大学选择

在阿省,目前看只能在UOA和UOC之间选择,都是综合性大学

  • UA综合排名靠前,加拿大前五,CS比UC要强?
  • UA和国内交流多,相比UC的轻松氛围,UA要卷很多,不过研究生可以申请去美国名校
  • UC学历不被国内承认,因为曾经给XX发过奖?
  • 似乎CS比CE要难
  • theis似乎有难度,会拖延毕业
  • coop是加分项;
  • UC的Geomatics专业北美排名第一(堪比兰州大学的冰川专业在中国的尴尬地位)
  • UC可以节省房费。每天骑自行车上课即可,不过远离家庭,也是上大学的价值之一

大二选专业的问题

如果是择优录取,GPA的成绩可能会逐渐提高,导致学业压力非常大,2019年UT-cs有4个人跳楼;

CS和CE的区别

计算机科学(Computer Science,简称 CS)

是系统性研究信息与计算的理论基础以及它们在计算机系统中如何实现与应用的实用技术的学科。

计算机科学包含很多分支领域;有强调特定结果的计算机图形学;也有探讨计算问题性质的计算复杂性理论;研究方向侧重不同,比如编程语言理论是研究描述计算的方法,而程序设计是应用特定的编程语言解决特定的计算问题,人机交互则是专注于怎样使计算机和计算变得有用、方便等等。这其中四个领域最为关键,分别是理论,编程语言,算法,数据构架。

计算机科学非常依赖于数学基础,学习偏向以软件为主,对数学、算法、计算、模型等能力要求较高。计算机科学非常适合数学能力突出的学生。

在加拿大大学里,计算机科学专业一般开设在理学院下,作为一门理科专业。但也有学校将其开设在数学院下,比如滑铁卢大学。

计算机工程(Computer Engineering,简称CE)

是硬件和软件的结合,学生不仅仅要学习计算和编程,还要学习物理和电子电路这些知识。从本源上说,计算机工程是计算机科学和电子工程的交叉学科专业。因此,它更关注微处理器如何工作、设计以及优化,需要考虑如何在电子元件之间实现有效传输数据;如何设计电子元件的综合系统、如何处理软件内指令以及如何针对特定的硬件平台编写、编译和优化软件。计算机工程师更加专注于硬件和集成设备的开发和设计。

计算机工程对于数学上的要求可能不如计算机科学那么高,但是对物理上的要求显然是更多的。主要学习的内容包括但不限于现代物理学原理,电子电路设计,计算机架构与设计,大规模集成电路,微处理器设计和接口,嵌入式计算机系统设计,数字信号处理,人工智能与机器人等等。

在加拿大大学里,计算机工程开设在工程学院,申请时不仅仅要求学生具备很好的数学基础,对高中理科课程也非常看重,其中物理成绩是最为重要的。

参考
知乎链接
阿大programs列表
The choice of universities in Alberta

Oracle免费云服务-永远免费

云服务现状-ARM与x86

目前提供ARM架构云服务器的厂商,只有amzaon和oracle,谷歌和微软暂时没有计划

  • amazon的AWS采用Graviton处理器
  • oracle cloud采用Ampere架构处理器

ARM是什么

ARM,全称为Advanced RISC Machine,是英国Acorn有限公司设计的一款低功耗、低成本RISC微处理器。1983年ARM架构问世,成本低、功耗小,是轻型便携设备‌理想选择,如手机、笔记本和平板等。

ARM vs x86

X86是Intel研发的一种微处理器体系结构的泛称,它采用的是CISC(全称是Complex Instruction Set Computers,即复杂指令集计算机),以增加处理器本身复杂度作为代价,去换取更高的性能,但集成的指令集数量越来越多,给硬件带来的负荷也就越来越大,无形中增加了功耗和设计难度。

于是,RISC(全称Reduced Instruction Set Computers,即精简指令集计算机)诞生了,其设计初衷便是通过精简指令系统减少硬件设计的复杂程度,提高指令执行速度。在RISC中,无论简单还是复杂的操作,均由简单指令的程序块完成,因此在性能上RISC可能有所不如,但在功耗上RISC却比CISC低很多。

所以,可以这样通俗的理解,CISC的代表为X86架构,而RISC的代表则为ARM架构,ARM与X86的区别就是RISC与CISC的区别。

Ampere A1机型优势

Ampere A1提供每CPU80核的Ampere Altra处理器,所有的核都能够以3.0GHz的最高频率稳定运行,每个核都有自己的64KB L1 指令高速缓存、64KB L1数据高速缓存和高达1MB L2 数据高速缓存,并提供可预测的性能

在基于行业标准的SPECrate2017 Benchmark测试中,Ampere A1实例的性价比是其他ARM服务器实例的2.5倍,而比较起基于x86的英特尔Skylake或AMD Naples实例来说,Ampere A1实例的性价比更是其4倍以上。与OCI的高性能云架构相结合,基于Ampere Altra处理器的Ampere A1在云中提供了最好的性价比。

灵活的CPU和内存配比

OCI为客户提供三种基于ARM的计算选择:灵活虚机、强大裸金属以及专用区域Cloud@Customer,分别适用于有不同需求的客户。

OCI独有的、灵活的CPU和内存配比方式,能支持企业选择任意数量的CPU核数(1-80核)和内存(1-512GB)来满足企业的工作负载需求,而不再局限于选择具有4个、8个或16个核以及每个核的静态内存比率的固定虚机(VM)大小。这种灵活性使客户能够构建更好地匹配工作负载需求的VM,从而在优化成本的同时获得最佳性能。

线性可伸缩性和可预测的性能

性能对于云端的工作负载至关重要。Ampere Altra处理器旨在云中所需的规模下提供可预测的性能,其处理器的单线程核则能确保任何时候资源都不会被抢占。因此,对于特定的云端工作负载,这些基于ARM的CPU并不依赖通过超频来实现更高的性能,其能持续3.0GHz的最大频率并提供可预测的性能。同时,Altra的单线程内核和缓存设计还确保了随着内核数量的增加,性能几乎呈线性增长。这尤其有利于计算密集型工作负载,如媒体编码、加密、AI推断和HPC

永远免费的OCI

All Oracle Cloud Infrastructure accounts (whether free or paid) have a set of resources that are free of charge for the life of the account. These resources display the Always Free label in the Console (for Ampere A1 Compute shapes, see Compute).

Using the Always Free resources, you can provision a virtual machine (VM) instance, an Oracle Autonomous Database, and the networking, load balancing, and storage resources needed to support the applications that you want to build. With these resources, you can do things like run small-scale applications or perform proof-of-concept testing.

选择合适的os镜像和cpu数量/型号

远程无法ping通是被墙了吗

这时候发现直接ping公网地址,是无法ping通的,不管从阿里云还是本地使用vpn的笔记本,这是由于安全列表里没有开通icmp的权限,如下操作后就可以ping通了,不过稍后要删除这条规则。

使用密钥登陆服务器

首先进入私钥存储的目录,修改文件权限为只读

chmod 400 <private_key_file>

然手使用ssh -i命令登陆远程服务器,由于使用了ubuntu的镜像文件,这里的用户名就是ubuntu,如果没有和私钥在同一目录下,也需要把目录地址一起带上

ssh -i <private_key_file> <username>@<public-ip-address>

参考信息
腾讯
Oracle官网
墨天轮介绍OCPU实例开通

分别

折腾了一个月,前天手续终于办完。明天母子两人就要去加拿大,准备早晨6点从家里出发赶往浦东机场。

今天特地请假在家,准备一起整理行李,但是工作上事情不断,一直拖到下午才有点空闲,5点钟我提议和马达一起去遛大汪。过去他肯定是拒绝的,不愿意放下手中的ipad,这次挺意外,非常爽快的答应下来。

我印象有挺长时间,马达和我经常结伴去遛大汪。那时候他大概9岁,10岁,大汪也刚刚被我们营救回家。待他上了初中,我们就很少一起活动了。

小区旁边有条河,走了一圈,我絮絮叨叨,努力想把所有青春期的经验传授给他:不要打架,也不要被欺负,多看书,多问问题,多做题,和同学友好相处,照顾好妈妈,不要挑剔妈妈做的饭不如外婆的好吃,他要么就是点头,要么就说知道了,有时候也会插嘴说,我是星战粉,和同学肯定有的聊,会成为好朋友。

走过了小桥,绕回河边,马达突然对我说,可能很久见不到你了,要不大家抱一抱吧。他比我高近10厘米,因为练习剑道的缘故,肩膀很结实,我抱住他,就像抱着一个陌生人,眼眶突然就发热,赶快和他说,你和大汪也抱一下,趁着他蹲下来去抱大汪,我赶快偷偷的擦眼泪。

待他站起来,我的眼泪也隐藏好了,两人就顺着原路返回,走到小区北门口,我舍不得这么快结束,对他说,你看大汪一点也不累,舌头都没有吐出来,要不我们再走一圈?他点点头,我们就打算从南门绕回小区。

两人开始都有点沉默,然后他就笑嘻嘻的说,给你讲一件很奇怪的事情,你不要觉得无聊。我几乎马上猜到,他要讲的就是两年前学校里非常轰动的手枪+手机事件,大概初二的时候他给我讲过好几次了,我装作头一次听说的样子,让他说。

没想到,这次的版本确实让我大感意外。过去的故事里,马达只是一个隔壁宿舍的旁观者,随着这次更多的细节披露,我才发现,故事原本要精彩许多,包括他打算用剑道对抗手枪的计划,让我开心不已。

是柯尔特,他补充说,小熊同学带的就是柯尔特,加拿大应该也有真枪吧,我说是的,加拿大是有真枪的,等我去了可以一起玩。

旁边一辆改装过的奔驰,轰隆隆的开过,马达非常鄙夷的说,我打算拿到驾照后,开一辆哈雷,那种车把非常靠前的,这种奔驰真是不配这种声音。我说是的,我们还要开飞机,我从小就觉得自己已经学会了开飞机,拉杆前推就是降落,后拉就是升起。我们还可以搞一艘船来开开。

好吧,祝你自由。