CodeMan

Each of us must find a way to love the world. You have found yours.

0%

1. 启动并停止Erlang Shell
1
2
3
4
5
6
yfydemacbook-pro:~ yfy$ erl
Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V7.2.1 (abort with ^G)
1>

启动后显示的提示信息解释:

Erlang/OPT 18

erts

smp

async-threads

  • Async threads pool

hipe

kernel-poll

  • 是否启用内核poll模式,可以降低CPU战用就绪

dtrace

2. 在erlang shell中输入一些命令,不要忘了以句号和空白结束命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
yfydemacbook-pro:~ yfy$ erl
Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V7.2.1 (abort with ^G)
1> hello
1> .
hello
2> 123.
123
3> True.
* 1: variable 'True' is unbound
4> true.
true
5> foo
5> .
foo
6>

3. 对hello.erl做一些小改动,在shell里面编译并运行它们,如果有错,中止Erlang shell并重启shell。

原hello.erl

1
2
3
4
5
-module(hello).
-export([start/0]).

start() ->
io:format("Hello world~n").

更改后hello1.erl

1
2
3
4
5
-module(hello1).
-export([start/0]).

start() ->
io:format("Hello world~n");

中止后重新运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
yfydemacbook-pro:src yfy$ erl
Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V7.2.1 (abort with ^G)
1> c(hello2).
hello2.erl: no such file or directory
error
2>
BREAK: (a)bort (c)ontinue (p)roc info (i)nfo (l)oaded
(v)ersion (k)ill (D)b-tables (d)istribution
a
yfydemacbook-pro:src yfy$ erl
Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V7.2.1 (abort with ^G)
1>
4. 运行客户端和服务器代码。加入一个名为put_file的命令。你需要添加何种消息?学习如何查阅手册页。查阅手册页里的file模块。
  • 修改后的代码

afile_client.erl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
%%%-------------------------------------------------------------------
%%% @author yfy
%%% @copyright (C) 2016, <COMPANY>
%%% @doc
%%% @end
%%%-------------------------------------------------------------------
-module(afile_client).
-author("yfy").

%% API
-export([ls/1, get_file/2,put_file/2]).

ls(Server) ->
Server ! {self(), list_dir},
receive
{Server, FileList} ->
FileList
end.

get_file(Server, File) ->
Server ! {self(), {get_file, File}},
receive
{Server, Content} ->
Content
end.

put_file(Server, File) ->
Server ! {self(), {put_file, File}},
receive
{Server, Content} ->
Content
end.

file_server.erl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
%%%-------------------------------------------------------------------
%%% @author yfy
%%% @copyright (C) 2016, <COMPANY>
%%% @doc
%%% @end
%%%-------------------------------------------------------------------
-module(afile_server).
-author("yfy").

%% API
-export([start/1, loop/1]).

start(Dir) -> spawn(afile_server, loop, [Dir]).

loop(Dir) ->
receive
{Client, list_dir} ->
Client ! {self(), file:list_dir(Dir)};
{Client, {get_file, File}} ->
Full = filename:join(Dir, File),
Client ! {self(), file:read_file(Full)};
{Client, {put_file, File}} ->
NewFilename = "newfilea.txt",
NewFull = filename:join(Dir, NewFilename),
Origion = filename:join(Dir, File),
{ok,Binary} = file:read_file(Origion),
{ok,S} = file:open(NewFull,[raw,write,binary]),
Client ! {self(), file:pwrite(S,0,Binary)}
end,
loop(Dir).

put_file只是把文件读出来,以另外的文件重新保存。

1
2
yfydemacbook-pro:cp2_3 yfy$ erl -man file

  • 调试erlang程序
1
2
3
4
5
6
7
8
9
10
11
12
yfydemacbook-pro:cp2_3 yfy$ erl
Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V7.2.1 (abort with ^G)
1> c(afile_server,[debug_info]).
afile_server.erl:7: Warning: Non-UTF-8 character(s) detected, but no encoding declared. Encode the file in UTF-8 or add "%% coding: latin-1" at the beginning of the file. Retrying with latin-1 encoding.
{ok,afile_server}
2> c(afile_server,[debug_info]).
{ok,afile_server}
3> c(afile_client,[debug_info]).
{ok,afile_client}
4> FileServer=debugger:quick(afile_server,start,["."]).

解决Warning方法是查看erl文件中包含有中文字符。这里我直接去掉后重新编译就没有了。

如需要使用debugger工具,编译方式如:c(xxx,[debug_info]). 使用debugger:quick启动debugger后界面:
debugger界面

可以在其中添加断点,调试。

####找到erlang模块手册页,你会看到它列出了大量的内置函数(远多于我们现在这里讨论过的)。可以用这些信息来解决下面列出的一些问题。

在线手册页:http://www.erlang.org/doc/man/erlang.html

1.扩展geometry.erl。添加一些子句来计算圆和直角三角形的面积。添加一些子句来计算各种几何图形的周长。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
%% coding: latin-1
%%%-------------------------------------------------------------------
%%% @author yfy
%%% @copyright (C) 2016, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 14. 二月 2016 下午3:57

%%%-------------------------------------------------------------------
-module(geometry).
-author("yfy").

-import(math,[pow/2]).

%% API
-export([area/1, circum/1]).

area({rectangle, Width, Height}) ->
Width * Height;

area({square, Side}) ->
Side * Side;

area({circle, Radius}) ->
3.14 * Radius * Radius;

area({right_triangle, SideA, SideB}) ->
SideA * SideB / 2.


circum({rectangle, Width, Height}) ->
(Width + Height) * 2;

circum({square, Side}) ->
Side * 4;

circum({circle, Radius}) ->
2 * 3.14 * Radius;

circum({right_triangle, SideA, SideB}) ->
(SideA + SideB) + math:sqrt(math:pow(SideA, 2) + math:pow(SideB,2)).

2.内置函数tuple_to_list(T)能将元组T里面的元素转换成一个列表。请编写一个名为my_tuple_to_list(T)的函数来做同样的事,但不要使用相同功能的内置函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
%% coding: latin-1
%%%-------------------------------------------------------------------
%%% @author yfy
%%% @copyright (C) 2016, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 16. 二月 2016 下午3:18
%%%-------------------------------------------------------------------
-module(my_tuple_to_list).
-author("yfy").

%% API
-export([m_tuple_to_list/1]).


m_tuple_to_list(T) ->
m_tuple_to_list(T, tuple_size(T), []).

m_tuple_to_list(T, N, Result) ->
if
N > 0 -> m_tuple_to_list(T, N - 1, [element(N, T) | Result]);
N =< 0 -> Result
end.

3.查看erlang:now/0、erlang:date/0和erlang:time/0的定义。编写一个名为my_time_func(F)函数,让它执行fun F并记下执行时间。编写一个名为my_date_string()的函数,用它把当前的日期和时间改成整齐的格式。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
%% coding: latin-1
%%%-------------------------------------------------------------------
%%% @author yfy
%%% @copyright (C) 2016, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 16. 二月 2016 下午3:55
%%%-------------------------------------------------------------------
-module(my_time).
-author("yfy").

%% API
-export([my_time_func/1, my_date_string/0]).

%% F = fun() -> math:pow(2,1000) end.

my_time_func(F) ->
{G, S, M} = now(),
F(),
{G1, S1, M1} = now(),
{(G1 - G), (S1 - S), (M1 - M)}.


my_date_string() ->
{Year, Month, Day} = date(),
{Hour, Seconds, Minuts} = time(),
L = tuple_to_list({integer_to_list(Year), "-", integer_to_list(Month), "-", integer_to_list(Day), " ", integer_to_list(Hour), ":", integer_to_list(Seconds), ":", integer_to_list(Minuts)}),
list_to_bitstring(L).

4.高级练习:查找Python datetime模块的手册页。找出Python的datetime类里有多少方法可以通过erlang模块里有并时间的内置函数实现。在erlang的手册页里查找等价的函数。如果有明显的遗漏,就实现它。

python datatime doc: https://docs.python.org/2/library/datetime.html

5.编写一个名为math_functions.erl的模块,并导出函数even/1各odd/1。even(X)函数应当在X是偶数时返回true,否则返回false.odd(X)应当在X是奇整时返回true。
6.向math_functions.erl添加一个名为filter(F,L)的高阶函数,它返回L里所有符合条件的元素X(条件是F(X)为true)。
7.向math_functions.erl添加一个返回{Even,Odd}的split(L)函数,其中Even是一个包含L里所有偶数的列表,Odd是一个包含L里所有奇数的列表。请用两钏不同的方式编写这个函数,一种使用归集器,另一种使用在练习6中编写的filter函数。

1.7 问题

1.c是一种自由形式的语言,也就是说,并没有规则规定它的外观究竟应该怎么。但本章的例子程序遵循了一定的空白使用规则。你对此有何想法?

1
2
3

A: 很显然,规则格式更有利于代码的阅读与维护。一堆没办法阅读的代码质量就跟一堆💩没区别。

2.把声明(如函当选原型的声明)放在文件头中,并在需要时用#include指定把它们包含于源文件中,这种做法有什么好处?

1
2
3

A: 这样可以避免重复的声明代码。也有利于代码块重用。

3.使用#define指令给字面值常量取名有什么好处?

1
2
3
4
A: 有两个原因
1. 如果在不同的地方引用了常量,后续改动常量只需要在define处改动即可,不需要满到处改定义值。
2. define指令可以给常值赋予有意义的名字,以达到见名知义的作用。

4.依次打印一个十进制整数、字符串和浮点值,你应该在printf函数中分别使用什么格式代码?试编一例,让这些打印值以空格分隔,并在输出行的末尾加一个换行符。

1
2
3
4
5
#include <stdio.h>

int main(int argc, char *argv[]) {
printf("%d %s %g \n",6);
}

输出结果:
6 £∆Ø·˛ 0


Q: 新问题出来了为什么以字符串打印会是乱码呢?

5.编写一条scanf语句,它需要读取两个整数,分别保存于quantity和nice变量,然后再读取一个字符串,保存在一个名叫department的字符数组中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>

int main(int argc, char *argv[]) {
int quantity;
int nice;
char department[100];

scanf("%d",&quantity);
scanf("%d",&nice);
printf("quantity: %d\tnice:%d\n",quantity,nice);

scanf("%s",&department);
printf("department:%s",department);
}

输出结果:
12
23
quantity: 12 nice:23
test
department:test


  1. C语言并不执行数组下标的有效性检查。你觉得为什么这个明显的安全手段会从语言中省略?
  1. 本章描述的rearrange程序包含下面的语句
1
strncpy(output _ output_col, input + columns[col],nchars);

strcpy函数只接受两个参数,所以它实际上所复制的字符数由第2个参数指定。在本程序中,如果用strcpy函数取代strncpy函数会出现什么结果?

8.rearrange程序包含下面的语句

1
while( gets(input) != NULL){

你认为这段代码可能会出现什么问题?

1.8编程练习

  1. “Hello world!” 程序常常是C编程新手所编写的第一个程序。它在标准输出中打印Hello world!,并在后面添加一个换行符。当你希望摸索出如何在自己的系统中运行C编译器时,这个小程序往往是一个很好的测试例。

  2. 编写一个程序,从标准输入读取几行输入。每行输入都要打印到标准输出上,前面要加上行号。在编写这个程序是要试图让程序能够处理的输入行的长度没有限制。

  3. 编写一个程序,从标准输入读取一些字符,并把它们写到标准输出上。它同时应该计算checksum值,并写在字符的后面。checksum(检验和)用一个singed char类型的变量进行计算,它初始为-1.当每个字符从标准输入读取时,它的值就被加到checksum中。如果checksum变量产生了溢出,那么这些溢出就会被忽略。当所有的字符均被写入后,程序以十进制整数的形式打印出checksum的值,它有可能是负值。注意在checksum后面要添加一个换行符。在使用ASCII码的计算机中,在包含”Hello world!”这几个词并以换行符结尾的文件上运行这个程序应该产生下列输出:
    Hello world!
    102

  4. 编写一个程序,一行一行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行不超过100个字符。

  5. rearrange程序中的下列语句

1
2
if( columns[col] >= len ...)
break;

当字符的列范围超出输入行的末尾时就停止复制,这条语句只有当列范围以递境顺序出现时才是正确的,但事上并不一定如此。请修改这条语句,即使列范围不是按顺序读取也能正确完成任务。

  1. 修改rearrange程序,去除输入中列标号的个数必须是偶数的限制。 如果读入的列桔为奇数个,函数就会把最后一个列范围设置为最后一个列标号所指定的列到行尾之间的范围。从最后一个列标号至行尾的所有字符都将被复制到输出字符串

1.在Scala REPL中键入3, 然后按Tab键。有哪些方法可以被应用?

1
2
3



2.在scala REPL中,计算3的平方根,然后再对该值求平方。现在,这个结果与3相关多少?(提示:res变量是你的朋友)

1
2
3
4
5
6
7
8
9
10
11
12
scala> import scala.math._
import scala.math._

scala> math.sqrt(3)
res11: Double = 1.7320508075688772

scala> res11 * res11
res12: Double = 2.9999999999999996

scala> 3 - res12
res13: Double = 4.440892098500626E-16

3.res变量是val还是var?

res是val因为:

1
2
3
4
scala> res12 = 134
<console>:15: error: reassignment to val
res12 = 134
^

4.Scala允许你用数字去乘字符串--去REPL中试一下”crazy” * 3. 这个操作做什么?在Scaladoc中如何找到这个操作?

1
2
3
scala> "crazy" * 3
res14: String = crazycrazycrazy

此操作会使用”crazy”重复三次,生成字符串。
此操作属于String的运算符操作,在Scaladoc的StringOps类中可以找到这个操作的详细说明
文档在此处

1
2
3
4
5
6

def *(n: Int): String
Return the current string concatenated n times.
Definition Classes
[StringLike](http://www.scala-lang.org/api/2.11.8/index.html#scala.collection.immutable.StringLike)

5.10 max 2 的含义是什么? max方法定义在哪个类中?

10与2比较,返回较大的数

max方法定义在Int类中文档

6.用BigInt计算2的1024次方

1
2
3
4
5
6
scala> val x: BigInt = 2
x: scala.math.BigInt = 2

scala> x.pow(1024)
res19: scala.math.BigInt = 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216

7.为了在使用probablePrime(100,Random)获取随机数时不在probablePrime和Radom之前使用任何限定符,你需要引入什么?

1
2
3
4
5
6
7
8
9
scala> import scala.util._
import scala.util._

scala> import scala.math.BigInt._
import scala.math.BigInt._

scala> probablePrime(100,Random)
res27: scala.math.BigInt = 831336893134383164693951229437

8.创建随机文件的方式之一是生成一个随机的BigInt,然后将它转换成三十六进制,输出类似“qsnvbevtomcj38o06ul”这样的字符串。查阅Scaladoc,找到在Scala中实现该逻辑的办法。

9.在Scala中如何获取字符串的首字符和尾字符?

1
2
3
4
5
scala> "get first element".head
res32: Char = g

scala> "get first element".take(1)
res33: String = g

10.tak、drop、takeRight和dropRight这些字符串函数是做什么用的? 和substring相比,它们的优缺点都有哪些?

1
2
3
4
5
6
7
8
9
10
11
12
13

scala> "get first element".take(1)
res33: String = g

scala> "drop test".drop(2)
res34: String = op test

scala> "take right".takeRight(2)
res36: String = ht

scala> "drop right".dropRight(2)
res37: String = drop rig

1. 快速浏览3.1.3节,然后测试并记忆这些行编辑命令
命令 说明 助记法
^A 行首 A为第一个字母
^D 删除当前字符 D为Delete
^E 行尾 E为End
^F 向前的字符 F为Forward
^B 向后的字符 B为Back
^P 前一行 P为Preceding
^N 下一行 N为Next
^T 调换最近两个字符的位置 T为Transposition
Tab 尝试扩展当前模块或函数的名称

^在Mac中按键为:Control

2. 在shell里面输入help()命令。你将看到一长串命令。可以试一试其中一些命令。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
yfydemacbook-pro:opensource yfy$ erl
Erlang/OTP 18 [erts-7.2.1] [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Eshell V7.2.1 (abort with ^G)
1> help().
** shell internal commands **
b() -- display all variable bindings
e(N) -- repeat the expression in query <N>
f() -- forget all variable bindings
f(X) -- forget the binding of variable X
h() -- history
history(N) -- set how many previous commands to keep
results(N) -- set how many previous command results to keep
catch_exception(B) -- how exceptions are handled
v(N) -- use the value of query <N>
rd(R,D) -- define a record
rf() -- remove all record information
rf(R) -- remove record information about R
rl() -- display all record information
rl(R) -- display record information about R
rp(Term) -- display Term using the shell's record information
rr(File) -- read record information from File (wildcards allowed)
rr(F,R) -- read selected record information from file(s)
rr(F,R,O) -- read selected record information with options
** commands in module c **
bt(Pid) -- stack backtrace for a process
c(File) -- compile and load code in <File>
cd(Dir) -- change working directory
flush() -- flush any messages sent to the shell
help() -- help info
i() -- information about the system
ni() -- information about the networked system
i(X,Y,Z) -- information about pid <X,Y,Z>
l(Module) -- load or reload module
lc([File]) -- compile a list of Erlang modules
ls() -- list files in the current directory
ls(Dir) -- list files in directory <Dir>
m() -- which modules are loaded
m(Mod) -- information about module <Mod>
memory() -- memory allocation information
memory(T) -- memory allocation information of type <T>
nc(File) -- compile and load code in <File> on all nodes
nl(Module) -- load module on all nodes
pid(X,Y,Z) -- convert X,Y,Z to a Pid
pwd() -- print working directory
q() -- quit - shorthand for init:stop()
regs() -- information about registered processes
nregs() -- information about all registered processes
uptime() -- print node uptime
xm(M) -- cross reference check a module
y(File) -- generate a Yecc parser
** commands in module i (interpreter interface) **
ih() -- print help for the i module
true
2>
3. 试着用一个元组来表示一座房子,再用一个房子列表来表示一条街道。请确保你能向这些结构中加入数据或从中取出数据。

Erlang的所有数据类型:Data Types

类型 说明
Terms A piece of data of any data type
Number two types of numeric literals, integers and floats
Atom An atom is a literal, a constant with name 如果是以大写字母开前头则需要用’’号括起来
Bit Strings and Binaries A bit string is used to store an area of untyped memory.
Reference A reference is a term that is unique in an Erlang runtime system
Fun A fun is a functional object.
Port Identifier A port identifier identifies an Erlang port.
Pid A process identifier, pid, identifies a process.
Tuple A tuple is a compound data type with a fixed number of terms.
Map A map is a compound data type with a variable number of key-value associations.
List A list is a compound data type with a variable number of terms.
String Strings are enclosed in double quotes (“), but is not a data type in Erlang.
Record A record is a data structure for storing a fixed number of elements.
Boolean There is no Boolean data type in Erlang. Instead the atoms true and false are used to denote Boolean values.
Escape Sequences 具体查看上面数据类型链接

房子:

House1={house,{owner,yangfy1},{location,’china cq1’}}

House2={house,{owner,yangfy2},{location,’china cq2’}}

House3={house,{owner,yangfy3},{location,’china cq3’}}

街道:

ShaZhengjie=[House1,House2,House3]

1
2
3
4
5
6
7
8
9
10
11
12
Eshell V7.2.1  (abort with ^G)
1> House1={house,{owner,yangfy1},{location,'china cq1'}}.
{house,{owner,yangfy1},{location,'china cq1'}}
2> House2={house,{owner,yangfy2},{location,'china cq2'}}.
{house,{owner,yangfy2},{location,'china cq2'}}
3> House3={house,{owner,yangfy3},{location,'china cq3'}}.
{house,{owner,yangfy3},{location,'china cq3'}}
4> ShaZhengjie=[House1,House2,House3].
[{house,{owner,yangfy1},{location,'china cq1'}},
{house,{owner,yangfy2},{location,'china cq2'}},
{house,{owner,yangfy3},{location,'china cq3'}}]
5>

读取House1中location;House2的owner

1
2
3
4
5
6
7
8
5> {house,_,{_,D}} = House1.
{house,{owner,yangfy1},{location,'china cq1'}}
6> D.
'china cq1'
7> {house,{_,O},_} = House2.
{house,{owner,yangfy2},{location,'china cq2'}}
8> O.
yangfy2

读取街道中第二栋房子的owner

1
2
3
4
5
6
7
8
9> [H1,H2|H3] = ShaZhengjie.
[{house,{owner,yangfy1},{location,'china cq1'}},
{house,{owner,yangfy2},{location,'china cq2'}},
{house,{owner,yangfy3},{location,'china cq3'}}]
10> {house,{_,O1},_}=H2.
{house,{owner,yangfy2},{location,'china cq2'}}
11> O1.
yangfy2

为街道新增加一栋房子

House4={house,{owner,yangfy4},{location,’china cq4’}}

1
2
3
4
5
6
7
8
9
10
12> House4={house,{owner,yangfy4},{location,'china cq4'}}.
{house,{owner,yangfy4},{location,'china cq4'}}
13> ShaZhengjie1 = [House4|ShaZhengjie].
[{house,{owner,yangfy4},{location,'china cq4'}},
{house,{owner,yangfy1},{location,'china cq1'}},
{house,{owner,yangfy2},{location,'china cq2'}},
{house,{owner,yangfy3},{location,'china cq3'}}]
16>


####安装VMware

####image加速介绍
由于众所周知的原因, 国内访问docker hub是一件非常痛苦的事情。所以国内访问还得依靠各种docker镜像加速服务。我们可选择的云加速器有:

  1. daocloud
  2. aliyun
  3. 灵雀云

以下所有配置均选择的aliyun的加速服务

####安装Docker

安装或升级Docker

请安装1.6.0以上版本的Docker。
您可以通过阿里云的镜像仓库下载: mirrors.aliyun.com/help/docker-engine
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment