core

1. 打开core开关

1.1 控制台方式(当前console有效)

1
2
3
ulimit -c 0 # 不产生core
ulimit -c 1024 # 限制core大小1024k
ulimit -c unlimited # 不限制core大小

1.2 配置方式

1
2
3
vim /etc/security/limits.conf
去掉soft core 0注释,并将0改为unlimited
soft core 0

2. 修改core命名规则或生成路径

2.1 默认下core在当前目录下,并且命名为core.pid;

2.2 临时修改:

可以直接修改/proc/sys/kernel/core_pattern文件的内容。例如,使用命令echo '/var/log/%e.core.%p' > /proc/sys/kernel/core_pattern,就可以将core dump文件的生成路径设置为/var/log/目录,文件名设置为进程名和进程ID。需要注意的是,/proc目录是动态加载的,每次系统重启都会重新加载,因此这种方法只能作为临时修改。

2.3 永久修改

如果想要永久修改core dump文件的生成路径和命名规则,可以通过修改/etc/sysctl.conf文件来实现。在/etc/sysctl.conf文件中,添加一行kernel.core_pattern = /var/log/%e.core.%p,然后保存退出。最后,使用命令sysctl -p使修改生效。

1
kernel.core_pattern= /var/log/%e.core.%p

2.4 core_pattern的格式可以包含以下一些元素:

  • %p:转储过程的PID
  • %u:转储进程的实际UID
  • %g:转储过程的实际GID
  • %s:引起转储的信号数
  • %t:转储时间,表示为自1970年1月1日00:00:00 +0000(UTC)以来的秒数
  • %h:主机名(与uname(2)返回的节点名相同)
  • %e:可执行文件名(无路径前缀)
  • %E:可执行文件的路径名,用斜杠(’/’)替换为感叹号(’! ’)
  • %c:崩溃过程的核心文件大小软资源限制(自Linux 2.6.24开始)

3. 生效

重启或这sysclt -p立即生效

4. 设置core_pattern建议

  1. 设置core文件的存放路径和文件名模式:你可以通过设置/proc/sys/kernel/core_pattern来指定core文件的存放路径和文件名模式。例如,你可以使用命令echo "/var/log/core-%e-%p-%t" > /proc/sys/kernel/core_pattern,这样当程序崩溃产生core dump时,会直接以这种格式存入到/var/log/目录下。
  2. 使用进程ID和时间戳:在文件名模式中,建议至少包含%p(进程ID)和%t(时间戳),这样可以帮助你更好地区分不同的core dump文件。
  3. 使用可执行文件名:如果你的系统中运行了多个程序,那么在文件名模式中包含%e(可执行文件名)可能会很有帮助,这样你可以知道是哪个程序产生了core dump。
  4. 使用管道符号:如果你希望在生成core dump文件的同时进行一些其他操作(例如压缩或发送通知),你可以在core_pattern的开头添加管道符号|,然后指定一个脚本,core dump将会以标准输入的形式传给这个脚本。
  5. 设置core文件的最大值:默认情况下,core文件的大小可能会受到限制。你可以使用ulimit -c unlimited命令来取消这个限制,或者设置一个适合你的系统的大小。

qt环境安装

mac

1. 前言

本文内容将简单介绍mac系统下安装qt。qt官方仓库下载速度极慢,本文介绍使用国内清华镜像来进行加速。

2. 安装步骤

  1. 注册账号,点击下一步
  2. 选择安装路径,并指定自定义选择安装组件

windows

windows的安装类似于mac, 这里简要说明。

  • 清华镜像加速安装
    将官网下载的qt-unified-windows-x64-4.5.1-online拖到命令窗口并添加上清华镜像参数–mirror https://mirrors.tuna.tsinghua.edu.cn/qt

  • 执行安装
    根据自己情况选择安装自己需要的组件,如下图所示。

qt内嵌浏览器对比

https://docs.qq.com/sheet/DWFBvTU1GQWFJTGJE

CEF下载编译

cef 简介

The Chromium Embedded Framework (CEF) 是基于Google Chrome开源的项目, 这个项目主要用途在于方便第三方软件可以嵌入浏览器。

二进制发行版本下载

下载地址如下:
https://cef-builds.spotifycdn.com/index.html 根据你的操作系统下载,本人下载的是windows 64bit标准版 cef_binary_109.1.18+gf1c41e4+chromium-109.0.5414.120_windows64

cmake 生成项目工程

如图所示,source code是下载解压缩后的地址,并设置好buid地址项目地址,configre里设置指定项目平台,这里指定vs2019.

vs2019编译

  • 打开vs工程
  • 编译libcef_dll_wrapper

cmake学习笔记

1. 基础项目

基本的cmakelist

1
2
3
● cmake_minimum_required(VERSION3.10)
● project(Tutorial)
● add_executable(Tutorialhttp://tutorial.cxx)

设置C++11编译器

1
2
●set(CMAKE_CXX_STANDARD11)
●set(CMAKE_CXX_STANDARD_REQUIREDTrue)

设置版本号,配置一个头文件

1
2
3
4
5
6
7
8
9
10
11
12
●project(TutorialVERSION1.0)
●configure_file(http://TutorialConfig.h.inTutorialConfig.h)
●TODO 10: TutorialConfig.h.in
// the configured options and settings for Tutorial#define Tutorial_VERSION_MAJOR @Tutorial_VERSION_MAJOR@#define Tutorial_VERSION_MINOR @Tutorial_VERSION_MINOR@
●#include"TutorialConfig.h"
if (argc < 2) {
// report version
std::cout << argv[0] << " Version " << Tutorial_VERSION_MAJOR << "."
<< Tutorial_VERSION_MINOR << std::endl;
std::cout << "Usage: " << argv[0] << " number" << std::endl;
return 1;
}

2. 链接库

添加一个库

1
2
3
4
●add_library(MathFunctionshttp://mysqrt.cxx)
●add_subdirectory(MathFunctions)
●target_link_libraries(Tutorial PUBLIC MathFunctions)
●target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}/MathFunctions")

条件链接

1
2
3
4
5
6
7
8
9
10
11
●option(USE_MYMATH"Use tutorial provided math implementation"ON)
●if(USE_MYMATH)
add_subdirectory(MathFunctions)
ist(APPEND EXTRA_LIBS MathFunctions)
list(APPEND EXTRA_INCLUDES "${PROJECT_SOURCE_DIR}/MathFunctions")
endif()
●target_link_libraries(TutorialPUBLIC${EXTRA_LIBS})
●target_include_directories(TutorialPUBLIC"${PROJECT_BINARY_DIR}"${EXTRA_INCLUDES})
●#ifdef USE_MYMATH#include"MathFunctions.h"#endif
●#ifdef USE_MYMATHconstdoubleoutputValue=mysqrt(inputValue);#elseconstdoubleoutputValue=sqrt(inputValue);#endif
●#cmakedefine USE_MYMATH

3. 增加对库的使用规范

1
2
3
4
5
6
7
8
9
10
11
●https://cmake.org/cmake/help/latest/command/target_compile_definitions.html#command:target_compile_definitions
●https://cmake.org/cmake/help/latest/command/target_compile_options.html#command:target_compile_options
●https://cmake.org/cmake/help/latest/command/target_include_directories.html#command:target_include_directories
●https://cmake.org/cmake/help/latest/command/target_link_directories.html#command:target_link_directories
●https://cmake.org/cmake/help/latest/command/target_link_options.html#command:target_link_options
●https://cmake.org/cmake/help/latest/command/target_precompile_headers.html#command:target_precompile_headers
●https://cmake.org/cmake/help/latest/command/target_sources.html#command:target_sources

●target_include_directories(MathFunctionsINTERFACE${CMAKE_CURRENT_SOURCE_DIR})
●if(USE_MYMATH)add_subdirectory(MathFunctions)list(APPENDEXTRA_LIBSMathFunctions)endif()
●target_include_directories(Tutorial PUBLIC "${PROJECT_BINARY_DIR}")

4. 生成器表达式

1
2
3
4
5
6
7
8
9
add_library(tutorial_compiler_flagsINTERFACE)
target_compile_features(tutorial_compiler_flagsINTERFACEcxx_std_11)
target_link_libraries(TutorialPUBLIC${EXTRA_LIBS}tutorial_compiler_flags)
注意下面这个是子目录下的(可以用父目录的makelist定义)
target_link_libraries(MathFunctionstutorial_compiler_flags)

●set(gcc_like_cxx"$<COMPILE_LANG_AND_ID:CXX,ARMClang,AppleClang,Clang,GNU,LCC>")set(msvc_cxx"$<COMPILE_LANG_AND_ID:CXX,MSVC>")
●target_compile_options(tutorial_compiler_flagsINTERFACE"$<${gcc_like_cxx}:-Wall;-Wextra;-Wshadow;-Wformat=2;-Wunused>""$<${msvc_cxx}:-W3>")
●target_compile_options(tutorial_compiler_flagsINTERFACE"$<${gcc_like_cxx}:$<BUILD_INTERFACE:-Wall;-Wextra;-Wshadow;-Wformat=2;-Wunused>>""$<${msvc_cxx}:$<BUILD_INTERFACE:-W3>>")

5. 条件生成器表达式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
$<condition:true_string>
$<IF:condition,true_string,false_string>

当condition为真则返回true_string字符串,否则返回空字符串
例如:

target_compile_options(tutorial_compiler_flags INTERFACE
"$<${gcc_like_cxx}:-Wall;-Wextra;-Wshadow;-Wformat=2;-Wunused>"
"$<${msvc_cxx}:-W3>"
)
当msvc_cxx变量为真则添加-W3编译选项
嵌套生成器表达式:
$<${msvc_cxx}:$<BUILD_INTERFACE:-W3>>

https://cmake.org/cmake/help/latest/manual/cmake-generator-expressions.7.html#manual:cmake-generator-expressions(7)

BUILD_INTERFACE
同一构建系统下(非Installed 目标使用)

add_compile_options("$<$<CONFIG:Debug>:-g;-ggdb;-O0>")
add_compile_options("$<$<CONFIG:Release>:-Wall;-O2>")

6. 安装和测试

1
2
3
4
5
6
7
8
9
10
11
12
13
●cmake --install .	
●cmake --install . --config Release
●cmake --install . --prefix "/home/myuser/installdir"

●set(installable_libsMathFunctionstutorial_compiler_flags)install(TARGETS${installable_libs}DESTINATIONlib)
●install(FILESMathFunctions.hDESTINATIONinclude)
●install(TARGETSTutorialDESTINATIONbin
●install(FILES"${PROJECT_BINARY_DIR}/TutorialConfig.h"DESTINATIONinclude)
●enable_testing()
●add_test(NAMERunsCOMMANDTutorial25)
●add_test(NAMEUsageCOMMANDTutorial)set_tests_properties(UsagePROPERTIESPASS_REGULAR_EXPRESSION"Usage:.*number")\
●add_test(NAMEStandardUseCOMMANDTutorial4)set_tests_properties(StandardUsePROPERTIESPASS_REGULAR_EXPRESSION"4 is 2")
●function(do_testtargetargresult)add_test(NAMEComp${arg}COMMAND${target}${arg})set_tests_properties(Comp${arg}PROPERTIESPASS_REGULAR_EXPRESSION${result})endfunction()# do a bunch of result based testsdo_test(Tutorial4"4 is 2")do_test(Tutorial9"9 is 3")do_test(Tutorial5"5 is 2.236")do_test(Tutorial7"7 is 2.645")do_test(Tutorial25"25 is 5")do_test(Tutorial-25"-25 is (-nan|nan|0)")do_test(Tutorial0.0001"0.0001 is 0.01")

7. 支持上传测试结果到dashboard

todo

8. 添加系统自查

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
●include(CheckCXXSourceCompiles)
●check_cxx_source_compiles("
#include <cmath>
int main() {
std::log(1.0);
return 0;
}
" HAVE_LOG)
check_cxx_source_compiles("
#include <cmath>
int main() {
std::exp(1.0);
return 0;
}
" HAVE_EXP)

●if(HAVE_LOG AND HAVE_EXP)target_compile_definitions(MathFunctionsPRIVATE"HAVE_LOG""HAVE_EXP")endif()

●#include<cmath>
●#if defined(HAVE_LOG) && defined(HAVE_EXP)
double result = std::exp(std::log(x) * 0.5);
std::cout << "Computing sqrt of " << x << " to be " << result
<< " using log and exp" << std::endl;
#else
double result = x;

9. 添加自定义命令及生成文件

1
2
3
4
●add_executable(MakeTablehttp://MakeTable.cxx)
●add_custom_command(OUTPUT${CMAKE_CURRENT_BINARY_DIR}/Table.hCOMMANDMakeTable${CMAKE_CURRENT_BINARY_DIR}/Table.hDEPENDSMakeTable)
●add_library(MathFunctionshttp://mysqrt.cxx${CMAKE_CURRENT_BINARY_DIR}/Table.h)
●target_include_directories(MathFunctionsINTERFACE${CMAKE_CURRENT_SOURCE_DIR}PRIVATE${CMAKE_CURRENT_BINARY_DIR})# link our compiler flags interface librarytarget_link_libraries(MathFunctionstutorial_compiler_flags)

10. 动态库编译

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
●set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}")

option(BUILD_SHARED_LIBS "Build using shared libraries" ON)

#if defined(_WIN32)
# if defined(EXPORTING_MYMATH)
# define DECLSPEC __declspec(dllexport)
# else
# define DECLSPEC __declspec(dllimport)
# endif
#else // non windows
# define DECLSPEC
#endif

namespace mathfunctions {
double DECLSPEC sqrt(double x);
}

# state that SqrtLibrary need PIC when the default is shared libraries
set_target_properties(SqrtLibrary PROPERTIES
POSITION_INDEPENDENT_CODE ${BUILD_SHARED_LIBS}
)

11. 生成导出配置

todo

12. 打包Debug、Release模式

1
2
3
4
5
6
7
8
9
10
11
12
13
●set(CMAKE_DEBUG_POSTFIX d)  
●set_target_properties(Tutorial PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
●set_property(TARGET MathFunctions PROPERTY VERSION "1.0.0")set_property(TARGET MathFunctions PROPERTY SOVERSION "1")
include("release/CPackConfig.cmake")

set(CPACK_INSTALL_CMAKE_PROJECTS
"debug;Tutorial;ALL;/"
"release;Tutorial;ALL;/"
)

首先是把自动生成的cpack配置文件引用进来,然后给CPACK_INSTALL_CMAKE_PROJECTS添加两个成员。成员中需要有分号分隔的4个内容,分别是install directory, install project name, install component, install subdirectory。
●cpack --config MultiCPackConfig.cmake
只set CMAKE_DEBUG_POSTFIX没设置set_target_properties(Tutorial PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX}):

13. PUBLIC PRIVATE INTERFACE

1
2
3
4
●PUBLIC    在public后面的库会被Link到你的target中,并且里面的符号也会被导出,提供给第三方使用。
●PRIVATE 在private后面的库仅被link到你的target中,并且终结掉,第三方不能感知你调了啥库
●INTERFACE 在interface后面引入的库不会被链接到你的target中,只会导出符号
https://zhuanlan.zhihu.com/p/82244559

14. CMake 条件、循环、跳出循环

1
2
3
4
5
6
7
8
https://blog.csdn.net/m0_57845572/article/details/118520448

messagetutorial_compiler_flags
message([<mode>] "message text" ...)

mode 的值包括 FATAL_ERROR、WARNING、AUTHOR_WARNING、STATUS、VERBOSE等。我主要使用其中的 2 个——FATAL_ERROR、STATUS。
FATAL_ERROR:产生 CMake Error,会停止编译系统的构建过程; STATUS:最常用的命令,常用于查看变量值,类似于编程语言中的 DEBUG 级别信息。
"message text"为显示在终端的内容。

15. 引入闭源/编译好的库:使用IMPORTED关键字

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
add_library(glfw STATIC IMPORTED)
set_property(TARGET glfw PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/extern/glfw/lib-vc2019/glfw3.lib)
target_include_directories(glfw INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/extern/glfw/include)

第一步是add_library,并指定IMPORTED。这代表是外部已经编译好的库

第二步是set_preperty。指定外部库的位置。

第三步是设定头文件。注意要用INTERFACE

cmake_minimum_required(VERSION 3.20)
project(tryIMPORTED)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

add_executable(main main.cpp)

设定外部库

glfw

add_library(glfw STATIC IMPORTED)
set_property(TARGET glfw PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_SOURCE_DIR}/extern/glfw/lib-vc2019/glfw3.lib)
target_include_directories(glfw INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/extern/glfw/include)

target_link_libraries(main glfw)

opengl
find_package(OpenGL REQUIRED)
target_link_libraries(main OpenGL::GL)

16. pkg-config

在使用 CMake 作为项目构建工具时,有一些库并没有提供 cmake 文件,往往提供的是 pkg-config 的 .pc 文

17. 汇编文件编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
vs:
1、右键 .asm 文件,点击“属性”。

2、在项类型里选择“自定义生成工具”。

3、点击应用,然后点击左边“自定义生成工具”里的“常规”。

4、在“命令行”里输入

ml64 /Fo $(IntDir)%(fileName).obj /c %(fileName).asm
在“输出”里输入

$(IntDir)%(fileName).obj
5、点击“确定”,然后重新编译。

cmakelists:

add_library(target, "xxx.asm")
enable_langange(ASM_MASM)

docker命令

1. 概念

  1. 镜像 容器 仓库

2. 镜像

  1. 增 docker pull nginx
  2. 删 docker image rm
  3. 查 docker image ls
  4. 改 docker run -it nginx bash
  5. 1
    2
    i. docker commit  container_id image_name:tag
    ii. dockerfile
  6. FROM (多阶段)
    RUN
  7. docker build -t nginx:v3 .
  8. .dockerignore
    f.多种系统镜像 docker mainfest

3. 容器

a. 增:docker run

b. 删:docker container rm

c. 查:docker container ls

d. 改: docker container start stop restart

e. 入:docker exec

4. 仓库

a.dockerHub

i.搜索:docker search centos

i.推送:

1.docker tag centos:18.04 username/centos:18.04
2.docker push username/centos:18.04 (username为dockerhub账号)

b.私有仓库

i.安装

1.获取官方registry运行: docker run -d -p 5000:5000 –restart=always –name registry registry

ii.上传:

1.标志:docker tag ubuntu:lastest 127.0.01:5000/ubuntu:lastest
2.上传:docker push 127.0.0.1:5000/ubuntu:lastest

iii.下载:

1.docker pull 127.0.0.1:5000/ubuntu:lastest

5. 数据管理

a.数据卷

i.建:

1
1.docker volume create my-vol

ii.挂:

1
2
3
4
5
docker run -d -P \
--name web \
# -v my-vol:/usr/share/nginx/html \
--mount source=my-vol,target=/usr/share/nginx/html \
nginx:alpine

b.主机目录

1
2
3
4
5
docker run -d -P \
--name web \
# -v /src/webapp:/usr/share/nginx/html \
--mount type=bind,source=/src/webapp,target=/usr/share/nginx/html \
nginx:alpine

6.网络

a.端口映射

1
2
3
4
docker run -d \
-p 80:80 \
-p 443:443 \
nginx:alpine

b.容器互联

i.新建网络

1.docker network create -d bridge my-net

ii.连接容器

1
2
3
1.docker run -it --rm --name busybox1 --network my-net busybox sh
2.docker run -it --rm --name busybox2 --network my-net busybox sh
3.ping busybox2

linux上安装apama Installation on Solaris and Linux

This chapter provides information and instructions for installing a Server version of Apama Release 5.0 on Solaris and Linux systems.You can download the installation package from the Apama Electronic Software Distribution (ESD) site.
The installation logs for the Apama Server installation can be found in the Apama installation's logs directory. If you accepted the default installation location, the path is something like this:
/opt/Progress/Apama_5.0/install/Apama_5.0.0.0/logs
For details, see the following topics:
• Installation prerequisites on Solaris and Linux
• Linux platform notes
• Apama 5.0 installation procedure on Solaris and Linux
• Post-installation steps on Solaris and Linux
• What was installed on Solaris and Linux
• Uninstalling Apama on Solaris and Linux

Installation prerequisites on Solaris and Linux

To be able to install Apama on your system, you must have local Administrator privileges.
If you have an earlier release of Apama on your system it is highly recommended that you uninstall
the previous version and then install Apama 5.0. In all cases, you cannot have two installed versions
of the Apama Management & Monitoring Agent service (also called the Sentinel Agent) running
concurrently without changing default port settings.
An Apama installation on Solaris or Linux must satisfy the following requirement:
• 500MB free disk space.
• The Apama Dashboard Server port (default 3278) must be accessible by Dashboard Viewer.
If you are using Solaris or Linux with the firewall enabled, you need to unblock network access
for this port.
• If you are deploying Java applications, when you start the correlator and specify the -j option,
the correlator starts a Java Virtual Machine. It uses the first JRE/JDK in the PATH environment
variable. It is highly recommended that you use JRE 7.0 update 5, which is the version that
Apama ships with.
Web clients can access Apama dashboards through any Apama host supported web browser. No
Apama installation is required for web clients but they must satisfy the following requirements:
• Oracle's(Sun's) Java plug-in (version 1.7.0_5 or later) must be installed for dashboards deployed
either as applets or through Java Web Start technology. There is no Java plug-in requirement
for dashboards deployed with the Apama Dashboard Display Server.
• Your browser must have cookies enabled for web pages served from the host where you are
running your application server.
• If you have a pop-up blocker, be sure to set it to allow popups for web pages served from the
host where you are running your application server.

Linux platform notes

efore installing Apama 5.0 on Linux, consider the following:
• No support for Security Enhanced Linux on page 32
• Linux development and samples on page 32
• Linux and Solaris root permissions on page 33

No support for Security Enhanced Linux

Apama does not support Security Enhanced Linux (SELinux). This option should be turned off on
Linux for Apama to run.

Linux development and samples

To build the samples and develop applications using the C/C++ API, development tools that are
not present in the default installation of the supported platforms must be installed. On all supported
Linux platforms the GCC-C++ package and all its dependencies must be installed. These are all
provided on the installation media provided with the distribution.

Linux and Solaris root permissions

On all UNIX platforms if Apama is installed by the root user then the resulting ApamaWork_5.0
directory will also be owned by root.This can cause problems for non-root users who run Apama
tools; they may not be able to write to ApamaWork_5.0.To support non-root users in installations
owned by root do one of the following:
• Change the permissions or owner of ApamaWork_5.0 and its subdirectories to allow write
access by users.
• Define the environment variable APAMA_WORK and set its value to an ApamaWork_5.0 directory
the users have write access to.

Apama 5.0 installation procedure on Solaris and Linux

To install the Server version of Apama 5.0 on Solaris or Linux, you can run the installation program
either in an X Windows environment or in console mode.The X server does not need to be running
on the same host as the installation program; remote X connections are fully supported. For a
remote installation, check that the DISPLAY environment variable is set appropriately before starting
the installer.
It is recommended that, for administration purposes, you create a separate user (for example,
apama) for installing and running Apama components.
There are two installation options on Solaris and Linux:
• Performing an Apama 5.0 GUI installation on page 33
• Performing an Apama 5.0 console installation on page 37

Performing an Apama 5.0 GUI installation

To perform a GUI installation of Apama Release 5.0 on Solaris or Linux machines:
1. If you intend the software to be used by a specific dedicated user account, such as apama,
login as this user.
2. Use gunzip to uncompress the archive file.
3. Unpack the archive file to some temporary directory. Be sure to preserve directory names and
structure. For example:
tar -xf PROGRESS_APAMA.tar .
4. Run ./install.bin from the solaris or linux directory within the temporary directory.
You can remove the temporary directory after installation is complete.
5. Click Next to proceed with the Installation Wizard.
6. You must accept the terms of the license agreement before you can install. Click Next.
7. Accept the default locations for installing Apama and for Apama's workspace or specify different locations. The user account performing the installation must have permission to write to the specified directories. Click Next.
8. Confirm that you want to install the Apama Server set including the correlator, dashboard servers, and other management tools. Then click Next
If the installation script cannot install the Apama service, it displays a message to indicate this and also displays the name of the script to run after installation. If necessary, make a note of this script, and run it after installation to add the Apama service.
9. Review the pre-installation summary (click Previous to make any changes). Then click Install to complete the installation.
10. The installation wizard shows the progress of the installation.
The progress bar does not necessarily reflect actual installation progress. The bar might not move for several minutes, but the installation is progressing.
11. When the installation is complete, click Next
If the installation script detected a license file when it started the installation, it displays instructions for where to store the Apama license file. Be sure to follow these instructions.

Performing an Apama 5.0 console installation

To perform a console installation of the Server version of Apama Release 5.0 on Solaris or Linux machines:

  1. If you intend the software to be used by a specific dedicated user account, such as apama, log
    in as this user.
  2. Use gunzip to uncompress the archive file.
  3. Unpack the archive file to some temporary directory. Be sure to preserve directory names and
    structure. For example:

    tar -xf PROGRESS_APAMA.tar
  4. Run ./install.bin -i console from the solaris or linux directory within the temporary
    directory. (You can remove the temporary directory once the installation is complete.)
    This starts the Apama installation. Press Enter to continue.
  5. You must accept the terms of the license agreement before you can install Apama.You can
    scroll and read through the entire agreement or you can skip to the end where you can indicate
    that you agree.

    At the appropriate prompt, after scrolling through the license information or skipping to the end,
    enter Y.
  6. Accept the default location or specify a different location for installing Apama.
  7. Accept the default location or specify a different location for the Apama work directory.
  8. Enter 1 to specify that you want to install the Server install set.

    If you do not have permission to install the Apama service, the installation script displays a
    message to let you know. It also indicates that you can run the

    Progress/Apama_5.0/bin/apama_services script after installation to add the services.
  9. Review the pre-installation summary and press Enter to continue the installation.
  10. The installation is complete. Press Enter.
  11. The installation script provides information about where to put your Apama license file. Be sure
    to follow these instructions. Press Enter to exit the installer.

Post-installation steps on Solaris and Linux

1
2
3
4
5
6
After installation, there are a few simple steps you must follow.The following topics describe these
steps:
• Copy the license file on page 42
• Set up the environment on page 42
• Start the Apama service if needed on page 42
• Set up Apama Sonic Integration Service on page 42

Copy the license file

1
2
3
4
5
6
After installation, copy your Apama license file to the license directory in your Apama work
directory. If you accepted the default Apama work directory location then the path for your license
file will be something like the following, where ~ indicates your home directory:
~/Progress/ApamaWork_5.0/license/license.txt
For details about Apama behavior when a license file expires, see Overview of Installing Apama
on page 11.

Set up the environment

1
2
3
4
5
6
After installation, source the apama_env file, which is in the bin directory of your Apama installation
directory. This script sets up the Apama environment, including setting the following environment
variables:
• APAMA_HOME
• APAMA_WORK
• APAMA_JRE

Start the Apama service if needed

1
2
3
4
5
6
7
8
9
10
During installation, the installer starts the Apama Management & Monitoring Agent service if it can.
If you need to start or restart this service, do one of the following:
• Run the apama_services file, which is in the bin directory of your Apama installation directory.
You can use this script to do the following:
• Add the service if you did not add it during installation
• Start and stop the service
• Perform other service management operations
Usage information is in the file.
• Run the executable for the service. If you installed Apama in the default location, the path for
the executable is /opt/Progress/Apama_5.0/bin/sentinel_agent.

Set up Apama Sonic Integration Service

1
2
3
4
The Apama Sonic Integration Service provides a way to send Apama events and Sonic XQMessages
back and forth between Apama applications and the Sonic ESB. For information about setting up
this service, see "The Apama Sonic integration service" in Deploying and Managing Apama
Applications.

Uninstalling Apama on Solaris and Linux

1
2
3
4
5
6
7
8
Before you uninstall Apama, ensure that all Apama components and applications are no longer
running.
To uninstall Apama:
1. Run the uninstall_apama_5.0 utility, located in the Apama’s uninstall directory. The
default location is /opt/Progress/Apama_5.0/uninstall.
2. The uninstall wizard opens.
3. Click Uninstall. The uninstall process proceeds.
4. After the uninstall process is complete, delete the Apama installation directory.

2023-07-23 十大券商最新研判,相信周期的力量

十大券商最新研判

1. 中信证券:政策时点临近,两大拐点将至

月底政策关键时点临近,美联储加息进程或在7月结束,人民币汇率的拐点正在构筑,活跃资金仓位迅速下降,场内流动性和情绪的拐点将至,市场正临近三重谷底尾声,8月料将迎来转机。

首先,政策的关键时点临近,预计月底政治局会议会围绕产业政策、债务处置和扩大内需三个维度展开,下半年政府支出边际上或发力,扭转上半年负增长的趋势,民营经济支持政策密集推出,提振信心的效果料将逐渐积累。

其次,人民币汇率正构筑拐点,美联储在7月或继续加息25个基点,加息周期临近尾声,央行在关键时点和位置上调跨境融资宏观审慎调节参数有较强信号作用。

最后,市场流动性和情绪正临近拐点,活跃私募仓位在近两周迅速下降,今年以来首次降至历史中位之下,两市缩量背景下TMT板块融资余额明显下滑,市场热度指标回归低位。配置上,建议借情绪冰点逐步布局产业主题,坚守科技、能源和国防三大安全领域的优势品种。

2. 中金公司:关注重要政策窗口期

交易信号低至历史偏底部位置,关注重要政策窗口期,后市不悲观。近期市场延续震荡调整态势,投资者一方面关注重要经济数据披露,另一方面也在高频指标中寻找内生增长动能边际变化的线索,以及国内稳增长政策方式及力度。周初公布的二季度经济数据显示中国增长复苏延续但内生动能仍弱,6月经济数据呈现出边际改善的迹象,用四年复合增速衡量,工业增加值、制造业和基建投资、社零增速均较5月走高,但房地产销售、投资表现不佳,指向稳政策加码仍有必要。

近期提振信心、稳增长相关政策出台明显提速,积极信号正陆续释放,包括促进民营经济发展顶层设计文件、在超大特大城市推进城中村改造等,7月底附近可能召开中央政治局会议,关注会议定调及政策落实状况。本周四央行上调企业和金融机构的跨境融资宏观审慎调节参数,助力人民币汇率阶段性企稳;中美双方继续积极对话,有望对市场风险偏好构成一定支撑。

当前市场估值水平处于历史偏低位,接近7000亿元左右的日成交额按照当前自由流通市值计算的换手率来看已经位于1.5%-2%的历史换手率偏底部区间,A股市场所呈现出的底部特征已经较为明显,如若后续政策应对得当,对后市表现不必过于悲观,当前位置市场机会大于风险。配置方面,我们认为政策窗口期需要对政策可能支持领域提升关注,同时上市公司中报业绩正陆续发布,未来结构上业绩出现改善拐点或超预期的下游消费、制造细分行业和个股,也有望成为投资者关注的领域。

行业建议:市场风格可能更加均衡,中报期间关注业绩可能超预期低预期个股。建议关注三条主线:1)顺应新技术、新产业、新趋势的偏成长领域,尤其是人工智能和数字经济等科技成长赛道,下半年半导体产业链有望具备周期反转与技术共振的机会;软件端继续关注人工智能有望率先实现行业赋能领域,如办公软件等。

2)需求好转或库存和产能等供给格局改善,具备较大业绩弹性的领域,例如白酒、白色家电、珠宝首饰、电网设备和航海装备等。3)股息率高且具备优质现金流的领域,低估值国央企仍有修复空间。

3. 民生证券:隐藏的右侧行情

1 看似调整,实际上是切换
大类资产看,对中国经济的悲观预期已经开始进入修正的右侧。人民币汇率在6月30日就已经见顶回落,而商品仍在继续反弹,股票内部的确也出现了从AI到非AI的切换迹象;唯一对经济仍悲观的债市也已经处于历史极端值的位置,进一步下行似乎需要更悲观的理由。股票内部看,近期沪深300和上证指数甚至公募基金净值的调整,很容易让市场陷入迷茫。但需要强调的是,自6月20日以来TMT开始见顶回落,而非TMT板块则开始走强,市场对于基本面企稳的交易其实已经进入了右侧,只是被前期强势板块的回撤所掩盖。
2 经验意义上的底部:跑赢指数是挑战
复盘2018年以来7次阶段性底部:强势板块在市场见底前一个月之前的表现远远好于非强势板块,但到了底部前一个月,强势板块也开始出现下跌甚至跑不赢非强势板块,这时候可能意味着市场出现了切换迹象,底部前一个月基金重仓股指数确实大部分时候都跑不赢中证800等权指数。我们认为近期市场在高低切换中的下跌反而意味着经验意义上的底部已经出现。当然本轮行情还有一些有意思的现象,股票型+偏股混合+灵活配置型基金自6月20日至今复权净值表现中位数是-4.87%(重仓股“仅”为-4.22%),中证800等权是-2.17%。中位数表现反映了更灵活的基金在5月以来出现的整体切换的程度,然而前期强势板块的下跌对净值拖累超越了基金重仓股本身,这与我们上期周报测算的2季度以来对AI的切换结论相吻合。历史上看,基金中位数在底部未能跑过中证800等权情况较少,除了2021年3月和2022年10月。经验上看基金未来跑赢指数将是较大挑战。从一定意义上讲,过去不相信经济复苏时存在其他做多的备选项,市场更容易对基本面的结构改善视而不见。现阶段做多方向正在收敛于经济本身,市场共识有望进一步凝聚。
3 经济修复VS债务收缩:更多风险意味着更大收益
当前国内经济的两股力量在角力:一个是经济内生的修复力量,另一个是房地产下行带来的债务收缩的力量。随着近期有关内需刺激的政策频繁出台、碧桂园的债务问题逐渐暴露,可能这两股力量就要面临一个短期反转的临界点:如果没有出现因为债务问题的系统性的下行风险,那么经济修复将会正常继续,同时需求侧的政策也将有所助力;如果出现系统性的债务风险,那么也就意味着更强力的政策出台的必要性,在这种情境下经济将会V型反转。本周公布的6月经济数据中,其中工业生产与固定资产投资均出现明显的好转,经济内生修复的动能仍在继续;而有关内需刺激的政策也在本周频繁出台:无论是旨在激活民营企业活力的政策还是有关促进汽车、电子产品消费的产业政策,以及城中村改造的落实政策。以城中村改造为例,如果我们假设2023年的城中村改造在政策的支持下加速落地,整体规模可以达到2019年的1.4万亿元,则相较于2022年的增量投资约8000亿元,这恰好可以大幅弥补当下对于房地产投资最为悲观的预期缺口(约9300亿元)。
4 顺风,顺周期:继续做多中国
市场已经处于预期扭转的阶段,但由于存量博弈下的结构切换所以导致了市场整体仍在下行。随着国内经济基本面形势逐步明朗,内生动能修复+需求刺激政策逐步出台。经济恢复方向是确定的,区别在于是否要用更大波动换更大弹性而已。因此在国内需求向上+海外顺风环境仍在的背景下,我们推荐:第一,同时受益于国内需求恢复和海外顺风环境的大宗商品相关资产(油、铜、铝、煤炭、贵金属)。第二,受益于国内需求政策刺激的领域:新能源车、智慧家居/家电,光伏未来有可能受益于全球能源价格反弹;城中村改造下的建筑、建材等,同时关注非银的潜在弹性。第三,全球制造业可能在3-4季度触底,提前抢跑可能带来收益:包括通用机械、部分电子等。红利资产近期也有所企稳,作为中长期主线我们也依旧看好。

4. 中信建投:政策持续,顺周期边际改善

政策利好信号持续出现,政策底向市场底传导。本周中央层面出台一系列重磅政策提振内需,鼓励民营企业发展改善营商环境,叠加将于本月底召开的政治局会议,房地产、建筑材料、汽车、社会零售、消费电子、平台企业、双碳、教育、人力服务等行业预期均有边际改善,且我们预期未来半年政策有望持续落地。

近月市场对今年经济预期持续下修,我们相信今年经济增速仍可达5%,预期下修基本已经完成,且美国加息周期临近收官,美债利率与美元都已处于顶部区域,本周a股市场情绪降至冰点,两市交易额缩量明显,人民币汇率已有企稳回升趋势,后续外资有望净流入a股,大宗商品价格继续上涨,升至年初以来高位,下半年价格指数有望好于预期,企业盈利预期存在上修空间,我们认为当前市场值得积极布局。

行业推荐:半导体、有色/石油、农化品、机械设备、汽车、通信、地产链等。主题层面关注中特估的新一轮机会。

5. 国金策略:当下A股有望迎来新一轮上涨行情起点

站在当前时点,我们对A股市场的展望,将通过两个维度展开分析:一是下行空间。二是上行驱动。前者,无论从风险溢价(ERP)还是股债收益比来看,均显示向下空间已较为有限。

后者我们认为驱动有两个方面:

(1)国内经济的核心驱动力已出现筑底迹象,考虑到7月度政治局会议召开,经济企稳回升预期将有望得到不断强化。

(2)预计最快2023Q3美国经济与通胀或共振回落,故判断7月美联储货币政策或将迎来“首次转向”。届时,中美经济预期差扩大及利差“倒挂”的不利形势方有望“扭转”,人民币汇率的贬值压力才可能得到持续缓解。

倘若后续国内经济复苏的相关指标,包括:M1及工业用电回升、PPI筑底回升、储蓄率明显下降、CPI企稳等持续兑现,并走向“被动去库”的全面复苏阶段,回首当下:7月末-8月初将可能就是A股新一轮上涨行情的起点。

6. 中泰策略:政策密集出台 市场将如何演绎?

本轮中美缓和驱动下的反弹或延续,这其中,新能源、出口链、港股等或将弹性更大。但对于市场博弈的政策预期,仍要关注:政治局会议政策力度的定力、北上资金新规后的流入规模变动以及海外地缘波动等风险释放。就市场结构而言,我们维持三季度:攻守兼备,兼顾主题的配置思路,依然建议重点关注:

1)美国加强对于中国半导体等行业的封锁,科技中半导体、数据要素等或有更大力度政策支持,倒逼国产化率进一步提升;

2)新一轮国企改革拉开序幕,低估值高分红的央企龙头仍是A股估值“洼地”,以电力为代表的央企公用事业现金流稳健,且其市场化改革与混改力度或将加大,后续可以挖掘:燃气、自来水、环保、高铁等细分;

3)疫情冲击与地产下行影响下,与地产财富相应的高端和耐用品消费承压,与“口红效应”相关的休闲食品、小家电、国产服装化妆品等有望受益,且参考日本90年代经验,老年人消费升级和年轻人消费下沉是未来5年最重要的内生消费趋势,可关注大众消费“困境反转”的逢低布局机会;

4)疫情对于社会的长期复杂性影响,使得包括中药、医疗器械、OTC、药店等在内的医药板块的景气度将贯穿全年,叠加中美关系或迎来缓和利好,中药、创新药等医药品种逢调整可逐步布局。

7. 兴证策略:积极信号正在积累 悲观预期将被修正

近期市场的波动主要由于两个因素:一是二季度GDP数据略低于市场预期,尤其是海外机构调整中国2023年经济增长预期,导致外资一度大幅流出。二是部分海外科技巨头业绩不及预期,如台积电、奈飞等,导致股价大跌,并对国内相应行业、板块形成扰动。

在当前这个已经反映了过多悲观预期的时刻,仍有一些积极信号正在积累:1、首先我们倾向于认为,当前这波外资流出已到达尾声,外部的扰动将逐步缓解。2、其次,6月份多项经济数据已经止跌企稳、甚至拐头向上,市场对于经济增长的悲观预期仍有望逐步修正。3、并且,近期各项经济政策也在密集加码落地。4、此外,当前市场本身仍处在一个隐含风险溢价较高、多数行业拥挤度较低的位置,具备整体修复的空间。

8. 国泰君安:底部震荡 战术平衡

近期市场出现了明显“高切低”与扩散的现象,前期涨幅居前的TMT板块大幅调整,而地产链等顺周期相关板块则出现了较大幅度反弹,我们认为成长价值风格的收敛短期仍将延续。

一方面,经过近半年的上涨,AI股票预期、部分环节拥挤度已处于较高水平。尽管中期产业趋势确定,但股票预期的进一步上修或需等待应用端“百花齐放”,并由此拉动算力等硬件需求预期的上调,这需要看到进一步的催化和新变化。

另一方面,随着总量政策开始稳步发力,叠加部分周期品低库存、顺周期价值板块存在部分做alpha的反弹机会。但考虑到当前信用扩张主体与路径仍未清晰,政策的实际力度与效果仍待确定,风格并不具备全面切换条件,做好预期收益管控,择优布局估值低位、且直接受益于政策支持的价值方向。

投资主题推荐:1、国产装备:本土替代预期提升、周期性业绩改善的通用装备/工程机械/先进封装;2、数据要素:顶层设计有望加速推进,数据交易和资产重估有望清晰化,推荐运营商/数据服务;3、能源新技术:看好商业化进程有望加速的复合集流体/异质结等;4、新型电力系统:源网荷储建设提速。

9. 西部证券:把握政策窗口期

政策底3.0已经到来,长期政策定力期,更应关注短期政策微调。从过去两轮政策底部的上行行情来看,以消费白马龙头为代表的大盘价值股往往都是经济预期修复的首选。随着市场情绪的不断提升,成交量逐步修复,市场热度逐步向小盘成长扩散。

我们认为本轮行情有望沿着顺周期(消费+周期)→新能源→TMT的路径轮动推进。随着促消费和地产政策窗口打开,叠加工业企业补库与PPI同比回升,推动业绩底逐步形成,与经济预期强相关行业的修复正在渐入佳境。但从宏观与微观流动性环境来看,尚不支持市场全面上涨,市场上行将在轮动中逐步推进。中报披露期仍将是业绩基础较为扎实的顺周期板块更加占优。

短期来看,与经济修复相关度较高的汽车(含新能源车),食品饮料,消费医疗;地产后周期的家电,建材,轻工等行业;以及有望受益于库存周期回补的化工等行业仍值得关注。中期来看,TMT板块正在逐步进入新一轮阶段行情的左侧布局期。

10. 华西策略:磨底行情 中长期机会大于风险

当前A股市场底部特征逐渐凸显:其一,本周两市成交额和换手率明显下行;其二,万得全A风险溢价持续上行,目前已高于三年均值向上一倍标准差;其三,在政策密集出台的背景下,市场表现出对利好因素的“钝化”,表明投资者风险偏好处于低位。

7月底,在国内政治局会议和海外美联储议息会议落地前,A股市场仍将处于“反复磨底”行情中。中长期角度,市场机会大于风险。后续稳增长一系列政策落地和经济基本面企稳回升下,A股风险偏好将迎来修复,底部区间不妨积极一些。

祝福大a

自学七次,从零入门蛙泳

背景

游泳我基本没经验,要是非要说有,那也是十多年在本科体育课,但是大学时候基本没学到啥,大学老师啥都没教就是让我们泡在水里。游泳对身体健康好处自然可以不多说,另外,在水里感觉真的爽爆了,那种美妙的感受是其他运动没法比的,我在第一次游过后就喜欢上这项运动了。

七次从零入门蛙泳

第一次,学会适应水

想了比较久,第一次标题也就是主要是要做啥。为什么需要适应水,想起第一次下水,还是非常不适应的。第一次把头往水里扎会有莫名其妙的害怕感,需要反复多勇敢试几次,稍微会对水适应一些。后面,就是想办法站在水里。其实,在浅水区,游泳池的水是比我身高要低的多的,但当你把整个身体想飘在水里的话,站起来就不是很容易了。把腿收在腹部,自然就往下沉了,但光这理论不够,还要多练,我是在第三四次游泳,才能很轻松地飘在水里后站起来。可以先在b站先做些攻略,看看初学者怎么站立的视频。总结起来,就两点:1、适应水;2、飘起来后能站立。

第二、三次,学会蛙泳腿

第一次,其实我没怎么做攻略或者有意识的先学习,而是当这玩到游泳池。第一次的时候,我有看旁边的人是怎么游泳的,然后在网上找了教程,结合实际看到的和网上教程,决定学习蛙泳。蛙泳其实是符合初学者学习的泳姿,而且呼吸时间相对比较长。第二、三次,其实主要是按照网上的教程印象来在水里自个游。自个游的时候,身边还是有不少好心的大妈大爷会教你的,一开始我不懂手脚乱动,腿和手都很不协调,后来有位大妈和大爷就非常友善地指出,我可以先学习蛙泳腿,当你腿学好了,后面就比较容易了。第三次过后,我发现把手伸直了,腿做动作也是能往前游的,但是我腿还是不够标准,经常游不动。

第四、五次,手腿并用闭气游

第三次过后,我再重点看了网上关于蛙泳腿的动作视频,以及手部动作。第四、五次游泳,基本就是在闭着气,手脚还是很不协调的游,能游个10米左右(再往前就是深水区),一般我就停下来站在水里,休息一会,然后再往回游。这样,来回n次的之后,可以加入呼吸,当然一开始,呼吸的时候就很容易沉下去,而且经常呛水。游久了,慢慢自己回摸索出一些技巧,其中的一个技巧是,把手、腿动作分开,节奏放慢。到第五次最后,基本上也能勉强换气游个20米。

第六次,学会换气

第五次过后,我重点网上回去看了换气。结合自己实操的,悟出个技巧:在腿踢水后让身体漂浮在水面上的时候,先吐气,通过用手抱水,马上抬头吐气并吸气。换气一开始可能觉得这很难,很容易呛水又容易沉下去,当你掌握好技巧,反复多练习,后面会发现蛙泳换气其实是非常友好的一种泳姿,有非常充足的时间可以吐气再吸气。

第七次,挑战深水区

前六次,基本还在25米左右的浅水区游。通过不断的练习,手、腿以及换气越来越熟练的情况下,我尝试了25米的不停来回游,也就是在25米处通过水里的转弯游回来。当我尝试多次,来回游后,对自己的游泳技术也开始比较自信了,按理说转弯游50米,和直线游50米,前者比后者难,于是在多次成功来回游后,我勇敢地往深水区游去,其实这时候深水区只是个心理关。其实深水区,当你做好呼吸以及站立动作基本功,也没必要害怕,因为在深水去站稳后,可以在水里吐气,吸气时候稍微用力跳一下让口跃过水面就可以吸气了。

以上是我七次学游泳的经验分享,基本上算入门,当然后面我会多加练习:)

2023年6月25日登梧桐山

来深圳近10年,从未爬过梧桐山,所以我是一个爬梧桐山新手,新手爬梧桐山前一定要做好攻略,不然很容易迷路,后面详细说说。本着好好锻炼身体(减肥)的原因,所以2023年定下一个爬梧桐山的小目标。

登山攻略





上图是我在登山前在网上找的登山路线图,由于是个新手,选择了秀桐道作为登山路线,既不会太难,风景也漂亮。
选择秀桐道还有一个好处是,近地铁口,坐8号线到深外高中地铁站,出地铁口C出口,走不远就能到达梧桐山秀桐道脚下。

时间

早上9:15,下楼吃完早餐后空手出发,坐11号线从南山地铁站转8号线到深外高中。
早上11点, 到达梧桐山秀桐道脚下,期间还去了附近的小区士多店里买了瓶红牛和运动饮料。
下午2点,爬上了最高峰,期间遇到很多爬山的好友,有刚高考完的,也有上大学的,也有毕业多年后出来做生意的,路上认识了不少朋友,还蹭了他们点鸡翅吃哈哈。
下午2点半左右,开始下山。 下午6点左右,从登云道下山到山脚下。 下午7点,回到家。

装备

推荐空手出发,只要带部手机,空手爬山更容易,因为在山脚下、山上都有卖水的,山脚下水的价格最便宜和外面相差无几,山上的则大概是山下的2.5倍左右。


登山风景

梧桐山主要在爬山中,和下山中会遇到一些平台,在这平台往外眺望,给人一种一览众山小感觉;在山顶,由于雾很大,风也很大,地方也少,其实没看到什么东西,主要就是吹风和经历爬山的艰苦后停下来休息幸福的感觉。
拍摄下的图片欣赏:








下山攻略

我走的下山路线主要是:山顶 -> 好汉坡 -> 小梧桐 -> 登云道 -> 莲塘地铁。其实就是登山攻略中的03登云道路径。
但是上面这条下山路线,下来走了大约4个小时,腿都走废了,其实后面让我推荐的话,有两种选择比较好:
1. 06秀桐道回去,这路线主要优点就是快,但是有些路段比较陡。
2. 01梧桐山北路回去,好汉坡下来后可以一直走大马路,这条路优点就是可以慢慢走大马路,但是时间比较久而且下去附近没地铁口。

好汉坡

收获体会

爬梧桐山收获了小腿疼外,其实后面总结下来,还是很值得的很棒的一次登山,为什么?
这里爬梧桐山的友人很多,在爬山的时候,你能结识到不同的登山人,和他们一起聊天,这过程能学习并体会到很多人生态度经验才是这次最难得的体验。
本次,爬梧桐山,一路上遇到了不少朋友,有刚高考完的,有上大学的一对男女好友,有在东莞打工的,有已经工作多年后出来做生意的,路途中还遇到一堆专门来登山的香港大叔大妈团。