4 Star 126 Fork 31

yyz116 / tinybg

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
ArtCfg.json 103.82 KB
一键复制 编辑 原始数据 按行查看 历史
yyz116 提交于 2022-06-17 21:19 . 优化,提高响应速度
{"Ver":0,"ArticlesMap":{"go学习笔记":{"3eaf98ad2b949b3f93d16aeaa1f45ab0":{"ID":"3eaf98ad2b949b3f93d16aeaa1f45ab0","Item":"go学习笔记","Title":"go语言文件目录监控功能\r","Date":"2020-10-23","Summary":"watcher is a Go package for watching for files or directory changes (recursively or non recursively) without using filesystem events, which allows it to work cross platform consistently.\r","File":"\r\n# watcher\r\n## TODO \r\n\r\n### command line \r\n\r\n- [ ] initiate \r\n- [ ] participate \r\n- [ ] redeem \r\n- [ ] refund \r\n\r\n### doc \r\n- [x] ReadMe\r\n- [ ] ReadMe_CN\r\n\r\n:angry:\r\n:smile:\r\n:laughing:\r\n:sunny:\r\n:blush:\r\n:pig:\r\n\r\n\u003e aaaaaaaaa\r\n\r\n* * *\r\n\r\n::: warning\r\n*here be dragons*\r\n:::\r\n\r\n\r\nHere is a footnote reference,[^1] and another.[^longnote]\r\n\r\n[^1]: Here is the footnote.\r\n\r\n[^longnote]: Here's one with multiple blocks.\r\n\r\n Subsequent paragraphs are indented to show that they\r\nbelong to the previous footnote.\r\n\r\n::: warning\r\n*here be dragons*\r\n:::\r\n\r\n\r\n\r\n\u003e这是一段包含**加粗**的 _斜体_ 和 _**斜粗体**_ 并带有`高亮`显示的一段文本来自[我的Github](https://github.com/SeayXu \"SeayXu\")。\r\n我是图片:\r\n![github logo][github-img]\r\n[github-url]:https://github.com/SeayXu \"SeayXu\"\r\n\r\n[![Build Status](https://travis-ci.org/radovskyb/watcher.svg?branch=master)](https://travis-ci.org/radovskyb/watcher)\r\n\r\n`watcher` is a Go package for watching for files or directory changes (recursively or non recursively) without using filesystem events, which allows it to work cross platform consistently.\r\n\r\n`watcher` watches for changes and notifies over channels either anytime an event or an error has occurred.\r\n\r\nEvents contain the `os.FileInfo` of the file or directory that the event is based on and the type of event and file or directory path.\r\n\r\n[Installation](#installation) \r\n[Features](#features) \r\n[Example](#example) \r\n[Contributing](#contributing) \r\n[Watcher Command](#command) \r\n\r\n# Update\r\n- Event.OldPath has been added [Aug 17, 2019]\r\n- Added new file filter hooks (Including a built in regexp filtering hook) [Dec 12, 2018]\r\n- Event.Path for Rename and Move events is now returned in the format of `fromPath -\u003e toPath`\r\n\r\n#### Chmod event is not supported under windows.\r\n\r\n# Installation\r\n\r\n```shell\r\ngo get -u github.com/radovskyb/watcher/...\r\n```\r\n\r\n# Features\r\n\r\n- Customizable polling interval.\r\n- Filter Events.\r\n- Watch folders recursively or non-recursively.\r\n- Choose to ignore hidden files.\r\n- Choose to ignore specified files and folders.\r\n- Notifies the `os.FileInfo` of the file that the event is based on. e.g `Name`, `ModTime`, `IsDir`, etc.\r\n- Notifies the full path of the file that the event is based on or the old and new paths if the event was a `Rename` or `Move` event.\r\n- Limit amount of events that can be received per watching cycle.\r\n- List the files being watched.\r\n- Trigger custom events.\r\n\r\n# Todo\r\n\r\n- Write more tests.\r\n- Write benchmarks.\r\n\r\n# Example\r\n\r\n```go\r\npackage main\r\n\r\nimport (\r\n\t\"fmt\"\r\n\t\"log\"\r\n\t\"time\"\r\n\r\n\t\"github.com/radovskyb/watcher\"\r\n)\r\n\r\nfunc main() {\r\n\tw := watcher.New()\r\n\r\n\t// SetMaxEvents to 1 to allow at most 1 event's to be received\r\n\t// on the Event channel per watching cycle.\r\n\t//\r\n\t// If SetMaxEvents is not set, the default is to send all events.\r\n\tw.SetMaxEvents(1)\r\n\r\n\t// Only notify rename and move events.\r\n\tw.FilterOps(watcher.Rename, watcher.Move)\r\n\r\n\t// Only files that match the regular expression during file listings\r\n\t// will be watched.\r\n\tr := regexp.MustCompile(\"^abc$\")\r\n\tw.AddFilterHook(watcher.RegexFilterHook(r, false))\r\n\r\n\tgo func() {\r\n\t\tfor {\r\n\t\t\tselect {\r\n\t\t\tcase event := \u003c-w.Event:\t\r\n\t\t\t\tfmt.Println(event) // Print the event's info.\r\n\t\t\tcase err := \u003c-w.Error:\r\n\t\t\t\tlog.Fatalln(err)\r\n\t\t\tcase \u003c-w.Closed:\r\n\t\t\t\treturn\r\n\t\t\t}\r\n\t\t}\r\n\t}()\r\n\r\n\t// Watch this folder for changes.\r\n\tif err := w.Add(\".\"); err != nil {\r\n\t\tlog.Fatalln(err)\r\n\t}\r\n\r\n\t// Watch test_folder recursively for changes.\r\n\tif err := w.AddRecursive(\"../test_folder\"); err != nil {\r\n\t\tlog.Fatalln(err)\r\n\t}\r\n\r\n\t// Print a list of all of the files and folders currently\r\n\t// being watched and their paths.\r\n\tfor path, f := range w.WatchedFiles() {\r\n\t\tfmt.Printf(\"%s: %s\\n\", path, f.Name())\r\n\t}\r\n\r\n\tfmt.Println()\r\n\r\n\t// Trigger 2 events after watcher started.\r\n\tgo func() {\r\n\t\tw.Wait()\r\n\t\tw.TriggerEvent(watcher.Create, nil)\r\n\t\tw.TriggerEvent(watcher.Remove, nil)\r\n\t}()\r\n\r\n\t// Start the watching process - it'll check for changes every 100ms.\r\n\tif err := w.Start(time.Millisecond * 100); err != nil {\r\n\t\tlog.Fatalln(err)\r\n\t}\r\n}\r\n```\r\n\r\n# Contributing\r\nIf you would ike to contribute, simply submit a pull request.\r\n\r\n# Command\r\n\r\n`watcher` comes with a simple command which is installed when using the `go get` command from above.\r\n\r\n# Usage\r\n\r\n```\r\nUsage of watcher:\r\n -cmd string\r\n \tcommand to run when an event occurs\r\n -dotfiles\r\n \twatch dot files (default true)\r\n -ignore string\r\n comma separated list of paths to ignore\r\n -interval string\r\n \twatcher poll interval (default \"100ms\")\r\n -keepalive\r\n \tkeep alive when a cmd returns code != 0\r\n -list\r\n \tlist watched files on start\r\n -pipe\r\n \tpipe event's info to command's stdin\r\n -recursive\r\n \twatch folders recursively (default true)\r\n -startcmd\r\n \trun the command when watcher starts\r\n```\r\n\r\nAll of the flags are optional and watcher can also be called by itself:\r\n```shell\r\nwatcher\r\n```\r\n(watches the current directory recursively for changes and notifies any events that occur.)\r\n\r\nA more elaborate example using the `watcher` command:\r\n```shell\r\nwatcher -dotfiles=false -recursive=false -cmd=\"./myscript\" main.go ../\r\n```\r\nIn this example, `watcher` will ignore dot files and folders and won't watch any of the specified folders recursively. It will also run the script `./myscript` anytime an event occurs while watching `main.go` or any files or folders in the previous directory (`../`).\r\n\r\nUsing the `pipe` and `cmd` flags together will send the event's info to the command's stdin when changes are detected.\r\n\r\nFirst create a file called `script.py` with the following contents:\r\n```python\r\nimport sys\r\n\r\nfor line in sys.stdin:\r\n\tprint (line + \" - python\")\r\n```\r\n\r\nNext, start watcher with the `pipe` and `cmd` flags enabled:\r\n```shell\r\nwatcher -cmd=\"python script.py\" -pipe=true\r\n```\r\n\r\nNow when changes are detected, the event's info will be output from the running python script.\r\n","ImgFile":"09.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":3},"c8564666fce10414f998096de1cfb647":{"ID":"c8564666fce10414f998096de1cfb647","Item":"go学习笔记","Title":"upx工具的使用,神器\r","Date":"2020-10-22","Summary":"嫌go编译后的动态库或静态库供c代码或嵌入式终端使用,体积太大?upx工具解决这一问题。\r","File":"\r\n\r\n1.go build添加 -ldflags=\"-w -s\" 会去除 DWARF调试信息、符号信息\r\n\r\n```\r\ngo build -ldflags=\"-w -s\" ota_main.go\r\n```\r\n\r\n```\r\ngo build -buildmode=c-shared -o test.so\r\n```\r\n-buildmode=c-shared requires exactly one main package\r\n\r\n注意:生成C可调用的so时,Go源代码需要以下几个注意。\r\n\r\n必须导入 “C” 包\r\n\r\n必须在可外部调用的函数前加上 【//export 函数名】的注释\r\n\r\n必须是main包,切含有main函数,main函数可以什么都不干\r\n\r\n2.优化方案 第二步:压缩优化\r\n\r\n执行命令:\r\n```\r\nupx.exe -9 *.exe\r\n```\r\nupx-3.96-amd64_linux.tar.xz\r\n\r\n打开文件夹\r\n\r\nupx工具 解压后放到 /usr/bin目录下就可以直接使用了\r\n\r\n编译为c动态库用的什么指令?\r\n\r\n增加一个属性:-buildmode=c-archive\r\n\r\n-buildmode=c-shared 这个是动态库\r\n\r\n举例:一个go文件编译初始值:7M\r\n\r\n去调试信息编译:5.2M\r\n\r\nupx处理后:1.9M\r\n\r\n![1591950391216](/assets/images/20200612001.png)\r\n\r\n\r\n\r\n![1591950422283](/assets/images/20200612002.png)\r\n\r\n\r\n\r\n![1591950469875](/assets/images/20200612003.png)\r\n\r\nNAME\r\n upx - compress or expand executable files\r\n\r\nSYNOPSIS\r\n upx [ *command* ] [ *options* ] *filename*...\r\n\r\nABSTRACT\r\n The Ultimate Packer for eXecutables\r\n Copyright (c) 1996-2020 Markus Oberhumer, Laszlo Molnar \u0026 John Reiser\r\n https://upx.github.io\r\n\r\n UPX is a portable, extendable, high-performance executable packer for\r\n several different executable formats. It achieves an excellent\r\n compression ratio and offers **very** fast decompression. Your\r\n executables suffer no memory overhead or other drawbacks for most of the\r\n formats supported, because of in-place decompression.\r\n \r\n While you may use UPX freely for both non-commercial and commercial\r\n executables (for details see the file LICENSE), we would highly\r\n appreciate if you credit UPX and ourselves in the documentation,\r\n possibly including a reference to the UPX home page. Thanks.\r\n \r\n [ Using UPX in non-OpenSource applications without proper credits is\r\n considered not politically correct ;-) ]\r\n\r\nDISCLAIMER\r\n UPX comes with ABSOLUTELY NO WARRANTY; for details see the file LICENSE.\r\n\r\n This is the first production quality release, and we plan that future\r\n 1.xx releases will be backward compatible with this version.\r\n \r\n Please report all problems or suggestions to the authors. Thanks.\r\n\r\nDESCRIPTION\r\n UPX is a versatile executable packer with the following features:\r\n\r\n - excellent compression ratio: compresses better than zip/gzip,\r\n use UPX to decrease the size of your distribution !\r\n \r\n - very fast decompression: about 10 MiB/sec on an ancient Pentium 133,\r\n about 200 MiB/sec on an Athlon XP 2000+.\r\n \r\n - no memory overhead for your compressed executables for most of the\r\n supported formats\r\n \r\n - safe: you can list, test and unpack your executables\r\n Also, a checksum of both the compressed and uncompressed file is\r\n maintained internally.\r\n \r\n - universal: UPX can pack a number of executable formats:\r\n * atari/tos\r\n * bvmlinuz/386 [bootable Linux kernel]\r\n * djgpp2/coff\r\n * dos/com\r\n * dos/exe\r\n * dos/sys\r\n * linux/386\r\n * linux/elf386\r\n * linux/sh386\r\n * ps1/exe\r\n * rtm32/pe\r\n * tmt/adam\r\n * vmlinuz/386 [bootable Linux kernel]\r\n * vmlinux/386\r\n * watcom/le (supporting DOS4G, PMODE/W, DOS32a and CauseWay)\r\n * win32/pe (exe and dll)\r\n * win64/pe (exe and dll)\r\n * arm/pe (exe and dll)\r\n * linux/elfamd64\r\n * linux/elfppc32\r\n * mach/elfppc32\r\n \r\n - portable: UPX is written in portable endian-neutral C++\r\n \r\n - extendable: because of the class layout it's very easy to support\r\n new executable formats or add new compression algorithms\r\n \r\n - free: UPX can be distributed and used freely. And from version 0.99\r\n the full source code of UPX is released under the GNU General Public\r\n License (GPL) !\r\n \r\n You probably understand now why we call UPX the \"*ultimate*\" executable\r\n packer.\r\n\r\nCOMMANDS\r\n Compress\r\n This is the default operation, eg. upx yourfile.exe will compress the\r\n file specified on the command line.\r\n\r\n Decompress\r\n All UPX supported file formats can be unpacked using the -d switch, eg.\r\n upx -d yourfile.exe will uncompress the file you've just compressed.\r\n\r\n Test\r\n The -t command tests the integrity of the compressed and uncompressed\r\n data, eg. upx -t yourfile.exe check whether your file can be safely\r\n decompressed. Note, that this command doesn't check the whole file, only\r\n the part that will be uncompressed during program execution. This means\r\n that you should not use this command instead of a virus checker.\r\n\r\n List\r\n The -l command prints out some information about the compressed files\r\n specified on the command line as parameters, eg upx -l yourfile.exe\r\n shows the compressed / uncompressed size and the compression ratio of\r\n *yourfile.exe*.\r\n\r\nOPTIONS\r\n -q: be quiet, suppress warnings\r\n\r\n -q -q (or -qq): be very quiet, suppress errors\r\n \r\n -q -q -q (or -qqq): produce no output at all\r\n \r\n --help: prints the help\r\n \r\n --version: print the version of UPX\r\n \r\n --exact: when compressing, require to be able to get a byte-identical\r\n file after decompression with option -d. [NOTE: this is work in progress\r\n and is not supported for all formats yet. If you do care, as a\r\n workaround you can compress and then decompress your program a first\r\n time - any further compress-decompress steps should then yield\r\n byte-identical results as compared to the first decompressed version.]\r\n \r\n [ ...to be written... - type `upx --help' for now ]\r\n\r\nCOMPRESSION LEVELS \u0026 TUNING\r\n UPX offers ten different compression levels from -1 to -9, and --best.\r\n The default compression level is -8 for files smaller than 512 KiB, and\r\n -7 otherwise.\r\n\r\n * Compression levels 1, 2 and 3 are pretty fast.\r\n \r\n * Compression levels 4, 5 and 6 achieve a good time/ratio performance.\r\n \r\n * Compression levels 7, 8 and 9 favor compression ratio over speed.\r\n \r\n * Compression level --best may take a long time.\r\n \r\n Note that compression level --best can be somewhat slow for large files,\r\n but you definitely should use it when releasing a final version of your\r\n program.\r\n \r\n Quick info for achieving the best compression ratio:\r\n \r\n * Try upx --brute myfile.exe or even upx --ultra-brute myfile.exe.\r\n \r\n * Try if --overlay=strip works.\r\n \r\n * For win32/pe programs there's --strip-relocs=0. See notes below.\r\n\r\nOVERLAY HANDLING OPTIONS\r\n Info: An \"overlay\" means auxiliary data attached after the logical end\r\n of an executable, and it often contains application specific data (this\r\n is a common practice to avoid an extra data file, though it would be\r\n better to use resource sections).\r\n\r\n UPX handles overlays like many other executable packers do: it simply\r\n copies the overlay after the compressed image. This works with some\r\n files, but doesn't work with others, depending on how an application\r\n actually accesses this overlayed data.\r\n \r\n --overlay=copy Copy any extra data attached to the file. [DEFAULT]\r\n \r\n --overlay=strip Strip any overlay from the program instead of\r\n copying it. Be warned, this may make the compressed\r\n program crash or otherwise unusable.\r\n \r\n --overlay=skip Refuse to compress any program which has an overlay.\r\n\r\nENVIRONMENT\r\n The environment variable UPX can hold a set of default options for UPX.\r\n These options are interpreted first and can be overwritten by explicit\r\n command line parameters. For example:\r\n\r\n for DOS/Windows: set UPX=-9 --compress-icons#0\r\n for sh/ksh/zsh: UPX=\"-9 --compress-icons=0\"; export UPX\r\n for csh/tcsh: setenv UPX \"-9 --compress-icons=0\"\r\n \r\n Under DOS/Windows you must use '#' instead of '=' when setting the\r\n environment variable because of a COMMAND.COM limitation.\r\n \r\n Not all of the options are valid in the environment variable - UPX will\r\n tell you.\r\n \r\n You can explicitly use the --no-env option to ignore the environment\r\n variable.\r\n\r\nNOTES FOR THE SUPPORTED EXECUTABLE FORMATS\r\n NOTES FOR ATARI/TOS\r\n This is the executable format used by the Atari ST/TT, a Motorola 68000\r\n based personal computer which was popular in the late '80s. Support of\r\n this format is only because of nostalgic feelings of one of the authors\r\n and serves no practical purpose :-). See http://www.freemint.de for more\r\n info.\r\n\r\n Packed programs will be byte-identical to the original after\r\n uncompression. All debug information will be stripped, though.\r\n \r\n Extra options available for this executable format:\r\n \r\n --all-methods Compress the program several times, using all\r\n available compression methods. This may improve\r\n the compression ratio in some cases, but usually\r\n the default method gives the best results anyway.\r\n\r\n NOTES FOR BVMLINUZ/I386\r\n Same as vmlinuz/i386.\r\n\r\n NOTES FOR DOS/COM\r\n Obviously UPX won't work with executables that want to read data from\r\n themselves (like some commandline utilities that ship with Win95/98/ME).\r\n\r\n Compressed programs only work on a 286+.\r\n \r\n Packed programs will be byte-identical to the original after\r\n uncompression.\r\n \r\n Maximum uncompressed size: ~65100 bytes.\r\n \r\n Extra options available for this executable format:\r\n \r\n --8086 Create an executable that works on any 8086 CPU.\r\n \r\n --all-methods Compress the program several times, using all\r\n available compression methods. This may improve\r\n the compression ratio in some cases, but usually\r\n the default method gives the best results anyway.\r\n \r\n --all-filters Compress the program several times, using all\r\n available preprocessing filters. This may improve\r\n the compression ratio in some cases, but usually\r\n the default filter gives the best results anyway.\r\n\r\n NOTES FOR DOS/EXE\r\n dos/exe stands for all \"normal\" 16-bit DOS executables.\r\n\r\n Obviously UPX won't work with executables that want to read data from\r\n themselves (like some command line utilities that ship with\r\n Win95/98/ME).\r\n \r\n Compressed programs only work on a 286+.\r\n \r\n Extra options available for this executable format:\r\n \r\n --8086 Create an executable that works on any 8086 CPU.\r\n \r\n --no-reloc Use no relocation records in the exe header.\r\n \r\n --all-methods Compress the program several times, using all\r\n available compression methods. This may improve\r\n the compression ratio in some cases, but usually\r\n the default method gives the best results anyway.\r\n\r\n NOTES FOR DOS/SYS\r\n Compressed programs only work on a 286+.\r\n\r\n Packed programs will be byte-identical to the original after\r\n uncompression.\r\n \r\n Maximum uncompressed size: ~65350 bytes.\r\n \r\n Extra options available for this executable format:\r\n \r\n --8086 Create an executable that works on any 8086 CPU.\r\n \r\n --all-methods Compress the program several times, using all\r\n available compression methods. This may improve\r\n the compression ratio in some cases, but usually\r\n the default method gives the best results anyway.\r\n \r\n --all-filters Compress the program several times, using all\r\n available preprocessing filters. This may improve\r\n the compression ratio in some cases, but usually\r\n the default filter gives the best results anyway.\r\n\r\n NOTES FOR DJGPP2/COFF\r\n First of all, it is recommended to use UPX *instead* of strip. strip has\r\n the very bad habit of replacing your stub with its own (outdated)\r\n version. Additionally UPX corrects a bug/feature in strip v2.8.x: it\r\n will fix the 4 KiB alignment of the stub.\r\n\r\n UPX includes the full functionality of stubify. This means it will\r\n automatically stubify your COFF files. Use the option --coff to disable\r\n this functionality (see below).\r\n \r\n UPX automatically handles Allegro packfiles.\r\n \r\n The DLM format (a rather exotic shared library extension) is not\r\n supported.\r\n \r\n Packed programs will be byte-identical to the original after\r\n uncompression. All debug information and trailing garbage will be\r\n stripped, though.\r\n \r\n Extra options available for this executable format:\r\n \r\n --coff Produce COFF output instead of EXE. By default\r\n UPX keeps your current stub.\r\n \r\n --all-methods Compress the program several times, using all\r\n available compression methods. This may improve\r\n the compression ratio in some cases, but usually\r\n the default method gives the best results anyway.\r\n \r\n --all-filters Compress the program several times, using all\r\n available preprocessing filters. This may improve\r\n the compression ratio in some cases, but usually\r\n the default filter gives the best results anyway.\r\n\r\n NOTES FOR LINUX [general]\r\n Introduction\r\n\r\n Linux/386 support in UPX consists of 3 different executable formats,\r\n one optimized for ELF executables (\"linux/elf386\"), one optimized\r\n for shell scripts (\"linux/sh386\"), and one generic format\r\n (\"linux/386\").\r\n \r\n We will start with a general discussion first, but please\r\n also read the relevant docs for each of the individual formats.\r\n \r\n Also, there is special support for bootable kernels - see the\r\n description of the vmlinuz/386 format.\r\n \r\n General user's overview\r\n \r\n Running a compressed executable program trades less space on a\r\n ``permanent'' storage medium (such as a hard disk, floppy disk,\r\n CD-ROM, flash memory, EPROM, etc.) for more space in one or more\r\n ``temporary'' storage media (such as RAM, swap space, /tmp, etc.).\r\n Running a compressed executable also requires some additional CPU\r\n cycles to generate the compressed executable in the first place,\r\n and to decompress it at each invocation.\r\n \r\n How much space is traded? It depends on the executable, but many\r\n programs save 30% to 50% of permanent disk space. How much CPU\r\n overhead is there? Again, it depends on the executable, but\r\n decompression speed generally is at least many megabytes per second,\r\n and frequently is limited by the speed of the underlying disk\r\n or network I/O.\r\n \r\n Depending on the statistics of usage and access, and the relative\r\n speeds of CPU, RAM, swap space, /tmp, and file system storage, then\r\n invoking and running a compressed executable can be faster than\r\n directly running the corresponding uncompressed program.\r\n The operating system might perform fewer expensive I/O operations\r\n to invoke the compressed program. Paging to or from swap space\r\n or /tmp might be faster than paging from the general file system.\r\n ``Medium-sized'' programs which access about 1/3 to 1/2 of their\r\n stored program bytes can do particularly well with compression.\r\n Small programs tend not to benefit as much because the absolute\r\n savings is less. Big programs tend not to benefit proportionally\r\n because each invocation may use only a small fraction of the program,\r\n yet UPX decompresses the entire program before invoking it.\r\n But in environments where disk or flash memory storage is limited,\r\n then compression may win anyway.\r\n \r\n Currently, executables compressed by UPX do not share RAM at runtime\r\n in the way that executables mapped from a file system do. As a\r\n result, if the same program is run simultaneously by more than one\r\n process, then using the compressed version will require more RAM and/or\r\n swap space. So, shell programs (bash, csh, etc.) and ``make''\r\n might not be good candidates for compression.\r\n \r\n UPX recognizes three executable formats for Linux: Linux/elf386,\r\n Linux/sh386, and Linux/386. Linux/386 is the most generic format;\r\n it accommodates any file that can be executed. At runtime, the UPX\r\n decompression stub re-creates in /tmp a copy of the original file,\r\n and then the copy is (re-)executed with the same arguments.\r\n ELF binary executables prefer the Linux/elf386 format by default,\r\n because UPX decompresses them directly into RAM, uses only one\r\n exec, does not use space in /tmp, and does not use /proc.\r\n Shell scripts where the underlying shell accepts a ``-c'' argument\r\n can use the Linux/sh386 format. UPX decompresses the shell script\r\n into low memory, then maps the shell and passes the entire text of the\r\n script as an argument with a leading ``-c''.\r\n \r\n General benefits:\r\n \r\n - UPX can compress all executables, be it AOUT, ELF, libc4, libc5,\r\n libc6, Shell/Perl/Python/... scripts, standalone Java .class\r\n binaries, or whatever...\r\n All scripts and programs will work just as before.\r\n \r\n - Compressed programs are completely self-contained. No need for\r\n any external program.\r\n \r\n - UPX keeps your original program untouched. This means that\r\n after decompression you will have a byte-identical version,\r\n and you can use UPX as a file compressor just like gzip.\r\n [ Note that UPX maintains a checksum of the file internally,\r\n so it is indeed a reliable alternative. ]\r\n \r\n - As the stub only uses syscalls and isn't linked against libc it\r\n should run under any Linux configuration that can run ELF\r\n binaries.\r\n \r\n - For the same reason compressed executables should run under\r\n FreeBSD and other systems which can run Linux binaries.\r\n [ Please send feedback on this topic ]\r\n \r\n General drawbacks:\r\n \r\n - It is not advisable to compress programs which usually have many\r\n instances running (like `sh' or `make') because the common segments of\r\n compressed programs won't be shared any longer between different\r\n processes.\r\n \r\n - `ldd' and `size' won't show anything useful because all they\r\n see is the statically linked stub. Since version 0.82 the section\r\n headers are stripped from the UPX stub and `size' doesn't even\r\n recognize the file format. The file patches/patch-elfcode.h has a\r\n patch to fix this bug in `size' and other programs which use GNU BFD.\r\n \r\n General notes:\r\n \r\n - As UPX leaves your original program untouched it is advantageous\r\n to strip it before compression.\r\n \r\n - If you compress a script you will lose platform independence -\r\n this could be a problem if you are using NFS mounted disks.\r\n \r\n - Compression of suid, guid and sticky-bit programs is rejected\r\n because of possible security implications.\r\n \r\n - For the same reason there is no sense in making any compressed\r\n program suid.\r\n \r\n - Obviously UPX won't work with executables that want to read data\r\n from themselves. E.g., this might be a problem for Perl scripts\r\n which access their __DATA__ lines.\r\n \r\n - In case of internal errors the stub will abort with exitcode 127.\r\n Typical reasons for this to happen are that the program has somehow\r\n been modified after compression.\r\n Running `strace -o strace.log compressed_file' will tell you more.\r\n\r\n NOTES FOR LINUX/ELF386\r\n Please read the general Linux description first.\r\n\r\n The linux/elf386 format decompresses directly into RAM, uses only one\r\n exec, does not use space in /tmp, and does not use /proc.\r\n \r\n Linux/elf386 is automatically selected for Linux ELF executables.\r\n \r\n Packed programs will be byte-identical to the original after\r\n uncompression.\r\n \r\n How it works:\r\n \r\n For ELF executables, UPX decompresses directly to memory, simulating\r\n the mapping that the operating system kernel uses during exec(),\r\n including the PT_INTERP program interpreter (if any).\r\n The brk() is set by a special PT_LOAD segment in the compressed\r\n executable itself. UPX then wipes the stack clean except for\r\n arguments, environment variables, and Elf_auxv entries (this is\r\n required by bugs in the startup code of /lib/ld-linux.so as of\r\n May 2000), and transfers control to the program interpreter or\r\n the e_entry address of the original executable.\r\n \r\n The UPX stub is about 1700 bytes long, partly written in assembler\r\n and only uses kernel syscalls. It is not linked against any libc.\r\n \r\n Specific drawbacks:\r\n \r\n - For linux/elf386 and linux/sh386 formats, you will be relying on\r\n RAM and swap space to hold all of the decompressed program during\r\n the lifetime of the process. If you already use most of your swap\r\n space, then you may run out. A system that is \"out of memory\"\r\n can become fragile. Many programs do not react gracefully when\r\n malloc() returns 0. With newer Linux kernels, the kernel\r\n may decide to kill some processes to regain memory, and you\r\n may not like the kernel's choice of which to kill. Running\r\n /usr/bin/top is one way to check on the usage of swap space.\r\n \r\n Extra options available for this executable format:\r\n \r\n (none)\r\n\r\n NOTES FOR LINUX/SH386\r\n Please read the general Linux description first.\r\n\r\n Shell scripts where the underling shell accepts a ``-c'' argument can\r\n use the Linux/sh386 format. UPX decompresses the shell script into low\r\n memory, then maps the shell and passes the entire text of the script as\r\n an argument with a leading ``-c''. It does not use space in /tmp, and\r\n does not use /proc.\r\n \r\n Linux/sh386 is automatically selected for shell scripts that use a known\r\n shell.\r\n \r\n Packed programs will be byte-identical to the original after\r\n uncompression.\r\n \r\n How it works:\r\n \r\n For shell script executables (files beginning with \"#!/\" or \"#! /\")\r\n where the shell is known to accept \"-c \u003ccommand\u003e\", UPX decompresses\r\n the file into low memory, then maps the shell (and its PT_INTERP),\r\n and passes control to the shell with the entire decompressed file\r\n as the argument after \"-c\". Known shells are sh, ash, bash, bsh, csh,\r\n ksh, tcsh, pdksh. Restriction: UPX cannot use this method\r\n for shell scripts which use the one optional string argument after\r\n the shell name in the script (example: \"#! /bin/sh option3\\n\".)\r\n \r\n The UPX stub is about 1700 bytes long, partly written in assembler\r\n and only uses kernel syscalls. It is not linked against any libc.\r\n \r\n Specific drawbacks:\r\n \r\n - For linux/elf386 and linux/sh386 formats, you will be relying on\r\n RAM and swap space to hold all of the decompressed program during\r\n the lifetime of the process. If you already use most of your swap\r\n space, then you may run out. A system that is \"out of memory\"\r\n can become fragile. Many programs do not react gracefully when\r\n malloc() returns 0. With newer Linux kernels, the kernel\r\n may decide to kill some processes to regain memory, and you\r\n may not like the kernel's choice of which to kill. Running\r\n /usr/bin/top is one way to check on the usage of swap space.\r\n \r\n Extra options available for this executable format:\r\n \r\n (none)\r\n\r\n NOTES FOR LINUX/386\r\n Please read the general Linux description first.\r\n\r\n The generic linux/386 format decompresses to /tmp and needs /proc file\r\n system support. It starts the decompressed program via the execve()\r\n syscall.\r\n \r\n Linux/386 is only selected if the specialized linux/elf386 and\r\n linux/sh386 won't recognize a file.\r\n \r\n Packed programs will be byte-identical to the original after\r\n uncompression.\r\n \r\n How it works:\r\n \r\n For files which are not ELF and not a script for a known \"-c\" shell,\r\n UPX uses kernel execve(), which first requires decompressing to a\r\n temporary file in the file system. Interestingly -\r\n because of the good memory management of the Linux kernel - this\r\n often does not introduce a noticeable delay, and in fact there\r\n will be no disk access at all if you have enough free memory as\r\n the entire process takes places within the file system buffers.\r\n \r\n A compressed executable consists of the UPX stub and an overlay\r\n which contains the original program in a compressed form.\r\n \r\n The UPX stub is a statically linked ELF executable and does\r\n the following at program startup:\r\n \r\n 1) decompress the overlay to a temporary location in /tmp\r\n 2) open the temporary file for reading\r\n 3) try to delete the temporary file and start (execve)\r\n the uncompressed program in /tmp using /proc/\u003cpid\u003e/fd/X as\r\n attained by step 2)\r\n 4) if that fails, fork off a subprocess to clean up and\r\n start the program in /tmp in the meantime\r\n \r\n The UPX stub is about 1700 bytes long, partly written in assembler\r\n and only uses kernel syscalls. It is not linked against any libc.\r\n \r\n Specific drawbacks:\r\n \r\n - You need additional free disk space for the uncompressed program\r\n in your /tmp directory. This program is deleted immediately after\r\n decompression, but you still need it for the full execution time\r\n of the program.\r\n \r\n - You must have /proc file system support as the stub wants to open\r\n /proc/\u003cpid\u003e/exe and needs /proc/\u003cpid\u003e/fd/X. This also means that you\r\n cannot compress programs that are used during the boot sequence\r\n before /proc is mounted.\r\n \r\n - Utilities like `top' will display numerical values in the process\r\n name field. This is because Linux computes the process name from\r\n the first argument of the last execve syscall (which is typically\r\n something like /proc/\u003cpid\u003e/fd/3).\r\n \r\n - Because of temporary decompression to disk the decompression speed\r\n is not as fast as with the other executable formats. Still, I can see\r\n no noticeable delay when starting programs like my ~3 MiB emacs (which\r\n is less than 1 MiB when compressed :-).\r\n \r\n Extra options available for this executable format:\r\n \r\n --force-execve Force the use of the generic linux/386 \"execve\"\r\n format, i.e. do not try the linux/elf386 and\r\n linux/sh386 formats.\r\n\r\n NOTES FOR PS1/EXE\r\n This is the executable format used by the Sony PlayStation (PSone), a\r\n Mips R3000 based gaming console which is popular since the late '90s.\r\n Support of this format is very similar to the Atari one, because of\r\n nostalgic feelings of one of the authors.\r\n\r\n Packed programs will be byte-identical to the original after\r\n uncompression, until further notice.\r\n \r\n Maximum uncompressed size: ~1.89 / ~7.60 MiB.\r\n \r\n Notes:\r\n \r\n - UPX creates as default a suitable executable for CD-Mastering\r\n and console transfer. For a CD-Master main executable you could also try\r\n the special option \"--boot-only\" as described below.\r\n It has been reported that upx packed executables are fully compatible with\r\n the Sony PlayStation 2 (PS2, PStwo) and Sony PlayStation Portable (PSP) in\r\n Sony PlayStation (PSone) emulation mode.\r\n \r\n - Normally the packed files use the same memory areas like the uncompressed\r\n versions, so they will not override other memory areas while unpacking.\r\n If this isn't possible UPX will abort showing a 'packed data overlap'\r\n error. With the \"--force\" option UPX will relocate the loading address\r\n for the packed file, but this isn't a real problem if it is a single or\r\n the main executable.\r\n \r\n Extra options available for this executable format:\r\n \r\n --all-methods Compress the program several times, using all\r\n available compression methods. This may improve\r\n the compression ratio in some cases, but usually\r\n the default method gives the best results anyway.\r\n \r\n --8-bit Uses 8 bit size compression [default: 32 bit]\r\n \r\n --8mib-ram PSone has 8 MiB ram available [default: 2 MiB]\r\n \r\n --boot-only This format is for main exes and CD-Mastering only !\r\n It may slightly improve the compression ratio,\r\n decompression routines are faster than default ones.\r\n But it cannot be used for console transfer !\r\n \r\n --no-align This option disables CD mode 2 data sector format\r\n alignment. May slightly improves the compression ratio,\r\n but the compressed executable will not boot from a CD.\r\n Use it for console transfer only !\r\n\r\n NOTES FOR RTM32/PE and ARM/PE\r\n Same as win32/pe.\r\n\r\n NOTES FOR TMT/ADAM\r\n This format is used by the TMT Pascal compiler - see http://www.tmt.com/\r\n .\r\n\r\n Extra options available for this executable format:\r\n \r\n --all-methods Compress the program several times, using all\r\n available compression methods. This may improve\r\n the compression ratio in some cases, but usually\r\n the default method gives the best results anyway.\r\n \r\n --all-filters Compress the program several times, using all\r\n available preprocessing filters. This may improve\r\n the compression ratio in some cases, but usually\r\n the default filter gives the best results anyway.\r\n\r\n NOTES FOR VMLINUZ/386\r\n The vmlinuz/386 and bvmlinuz/386 formats take a gzip-compressed bootable\r\n Linux kernel image (\"vmlinuz\", \"zImage\", \"bzImage\"), gzip-decompress it\r\n and re-compress it with the UPX compression method.\r\n\r\n vmlinuz/386 is completely unrelated to the other Linux executable\r\n formats, and it does not share any of their drawbacks.\r\n \r\n Notes:\r\n \r\n - Be sure that \"vmlinuz/386\" or \"bvmlinuz/386\" is displayed\r\n during compression - otherwise a wrong executable format\r\n may have been used, and the kernel won't boot.\r\n \r\n Benefits:\r\n \r\n - Better compression (but note that the kernel was already compressed,\r\n so the improvement is not as large as with other formats).\r\n Still, the bytes saved may be essential for special needs like\r\n boot disks.\r\n \r\n For example, this is what I get for my 2.2.16 kernel:\r\n 1589708 vmlinux\r\n 641073 bzImage [original]\r\n 560755 bzImage.upx [compressed by \"upx -9\"]\r\n \r\n - Much faster decompression at kernel boot time (but kernel\r\n decompression speed is not really an issue these days).\r\n \r\n Drawbacks:\r\n \r\n (none)\r\n \r\n Extra options available for this executable format:\r\n \r\n --all-methods Compress the program several times, using all\r\n available compression methods. This may improve\r\n the compression ratio in some cases, but usually\r\n the default method gives the best results anyway.\r\n \r\n --all-filters Compress the program several times, using all\r\n available preprocessing filters. This may improve\r\n the compression ratio in some cases, but usually\r\n the default filter gives the best results anyway.\r\n\r\n NOTES FOR WATCOM/LE\r\n UPX has been successfully tested with the following extenders: DOS4G,\r\n DOS4GW, PMODE/W, DOS32a, CauseWay. The WDOS/X extender is partly\r\n supported (for details see the file bugs BUGS).\r\n\r\n DLLs and the LX format are not supported.\r\n \r\n Extra options available for this executable format:\r\n \r\n --le Produce an unbound LE output instead of\r\n keeping the current stub.\r\n\r\n NOTES FOR WIN32/PE\r\n The PE support in UPX is quite stable now, but probably there are still\r\n some incompatibilities with some files.\r\n\r\n Because of the way UPX (and other packers for this format) works, you\r\n can see increased memory usage of your compressed files because the\r\n whole program is loaded into memory at startup. If you start several\r\n instances of huge compressed programs you're wasting memory because the\r\n common segments of the program won't get shared across the instances. On\r\n the other hand if you're compressing only smaller programs, or running\r\n only one instance of larger programs, then this penalty is smaller, but\r\n it's still there.\r\n \r\n If you're running executables from network, then compressed programs\r\n will load faster, and require less bandwidth during execution.\r\n \r\n DLLs are supported. But UPX compressed DLLs can not share common data\r\n and code when they got used by multiple applications. So compressing\r\n msvcrt.dll is a waste of memory, but compressing the dll plugins of a\r\n particular application may be a better idea.\r\n \r\n Screensavers are supported, with the restriction that the filename must\r\n end with \".scr\" (as screensavers are handled slightly different than\r\n normal exe files).\r\n \r\n UPX compressed PE files have some minor memory overhead (usually in the\r\n 10 - 30 KiB range) which can be seen by specifying the \"-i\" command line\r\n switch during compression.\r\n \r\n Extra options available for this executable format:\r\n \r\n --compress-exports=0 Don't compress the export section.\r\n Use this if you plan to run the compressed\r\n program under Wine.\r\n --compress-exports=1 Compress the export section. [DEFAULT]\r\n Compression of the export section can improve the\r\n compression ratio quite a bit but may not work\r\n with all programs (like winword.exe).\r\n UPX never compresses the export section of a DLL\r\n regardless of this option.\r\n \r\n --compress-icons=0 Don't compress any icons.\r\n --compress-icons=1 Compress all but the first icon.\r\n --compress-icons=2 Compress all icons which are not in the\r\n first icon directory. [DEFAULT]\r\n --compress-icons=3 Compress all icons.\r\n \r\n --compress-resources=0 Don't compress any resources at all.\r\n \r\n --keep-resource=list Don't compress resources specified by the list.\r\n The members of the list are separated by commas.\r\n A list member has the following format: I\u003ctype[/name]\u003e.\r\n I\u003cType\u003e is the type of the resource. Standard types\r\n must be specified as decimal numbers, user types can be\r\n specified by decimal IDs or strings. I\u003cName\u003e is the\r\n identifier of the resource. It can be a decimal number\r\n or a string. For example:\r\n \r\n --keep-resource=2/MYBITMAP,5,6/12345\r\n \r\n UPX won't compress the named bitmap resource \"MYBITMAP\",\r\n it leaves every dialog (5) resource uncompressed, and\r\n it won't touch the string table resource with identifier\r\n 12345.\r\n \r\n --force Force compression even when there is an\r\n unexpected value in a header field.\r\n Use with care.\r\n \r\n --strip-relocs=0 Don't strip relocation records.\r\n --strip-relocs=1 Strip relocation records. [DEFAULT]\r\n This option only works on executables with base\r\n address greater or equal to 0x400000. Usually the\r\n compressed files becomes smaller, but some files\r\n may become larger. Note that the resulting file will\r\n not work under Windows 3.x (Win32s).\r\n UPX never strips relocations from a DLL\r\n regardless of this option.\r\n \r\n --all-methods Compress the program several times, using all\r\n available compression methods. This may improve\r\n the compression ratio in some cases, but usually\r\n the default method gives the best results anyway.\r\n \r\n --all-filters Compress the program several times, using all\r\n available preprocessing filters. This may improve\r\n the compression ratio in some cases, but usually\r\n the default filter gives the best results anyway.\r\n\r\nDIAGNOSTICS\r\n Exit status is normally 0; if an error occurs, exit status is 1. If a\r\n warning occurs, exit status is 2.\r\n\r\n UPX's diagnostics are intended to be self-explanatory.\r\n\r\nBUGS\r\n Please report all bugs immediately to the authors.\r\n\r\nAUTHORS\r\n Markus F.X.J. Oberhumer \u003cmarkus@oberhumer.com\u003e\r\n http://www.oberhumer.com\r\n\r\n Laszlo Molnar \u003cezerotven+github@gmail.com\u003e\r\n \r\n John F. Reiser \u003cjreiser@BitWagon.com\u003e\r\n \r\n Jens Medoch \u003cjssg@users.sourceforge.net\u003e\r\n\r\nCOPYRIGHT\r\n Copyright (C) 1996-2020 Markus Franz Xaver Johannes Oberhumer\r\n\r\n Copyright (C) 1996-2020 Laszlo Molnar\r\n \r\n Copyright (C) 2000-2020 John F. Reiser\r\n \r\n Copyright (C) 2002-2020 Jens Medoch\r\n \r\n This program may be used freely, and you are welcome to redistribute it\r\n under certain conditions.\r\n \r\n This program is distributed in the hope that it will be useful, but\r\n WITHOUT ANY WARRANTY; without even the implied warranty of\r\n MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the UPX License\r\n Agreement for more details.\r\n \r\n You should have received a copy of the UPX License Agreement along with\r\n this program; see the file LICENSE. If not, visit the UPX home page.\r\n\r\n","ImgFile":"02.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":2}},"喜欢":{"526782d548ed01b7c09009216a66c9a7":{"ID":"526782d548ed01b7c09009216a66c9a7","Item":"喜欢","Title":"我的祖国啊\r","Date":"2020-10-21","Summary":"我希望我的爱情是这样的,相濡以沫,举案齐眉,平淡如水。我在岁月中找到他,依靠他,将一生交付给他。做他的妻子,他孩子的母亲,为他做饭,洗衣服,缝一颗掉了的纽扣。然后,我们一起在时光中变老。\r","File":"----------------------------------------------------------------------------------------\r\n\r\n\r\n茫茫人海里遇见一个人有多难?有时候很难,几十亿人,一生也难见一次。有时却很容易,人群中第一眼就能把他认出来。我们总在不设防的时候喜欢上一些人。没什么原因,也许只是一个温和的笑容,一句关切的问候。可能未曾谋面,可能志趣并不相投,可能不在一个高度,却牢牢地放在心上了。冥冥中该来则来,无处可逃,就好像喜欢一首歌,往往就因为一个旋律或一句打动你的歌词。喜欢或者讨厌,是让人莫名其妙的事情。\r\naaaaa\r\n居中的图片: ![Alt](/assets/images/03.jpg)\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"03.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":1}},"常用工具":{"411eaaaa405899304e54dce3363a2baf":{"ID":"411eaaaa405899304e54dce3363a2baf","Item":"常用工具","Title":"Typora的使用\r","Date":"2020-09-29","Summary":"Thank you for choosing Typora. This document will help you to start Typora. Please note that Typora for Windows is still in beta phase, so this document may be updated in future version-ups.\r","File":"\r\n# Welcome\r\n\r\nThank you for choosing **Typora**. This document will help you to start Typora. Please note that Typora for Windows is still in beta phase, so this document may be updated in future version-ups.\r\n\r\n[TOC]\r\n\r\n## Live Preview\r\n\r\n**Typora** use the feature: *Live Preview*, meaning that you could see these inline styles after you finish typing, and see block styles when you type or after you press `Enter` key or focus to another paragraph. Just try to type some markdown in typora, and you would see how it works.\r\n\r\n**Note**: Markdown tags for inline styles, such as `**` will be hidden or displayed smartly. Markdown tags for block level styles, such as `###` or `- [x]` will be hidden once the block is rendered.\r\n\r\nYou could switch to source code mode temporary from menu bar, footer bar or short cut key (`ctrl+/`). But we only provide very basic support for source code mode and won't recommend users to do so.\r\n\r\n## Markdown For Typora\r\n\r\n**Typora** is using [GitHub Flavored Markdown](https://help.github.com/articles/github-flavored-markdown/) . \r\n\r\nTo see full markdown Syntax references and extra usage, please check `Help`-\u003e`Markdown Reference` in menu bar or `About` panel. \r\n\r\n## Shortcut Keys\r\n\r\nYou could find shortcut keys in the right side of menu items from menu bar. For custom shortcut keys, please refer [here](Custom-Key-Binding/).\r\n\r\n## Copy\r\n\r\nWe create typora and want to make it your default markdown editor, thus copy and paste means copy from another app or paste to another app, instead of *copy/paste from/to another markdown editor*. Therefore, by default, `Copy` means `Copy As HTML` ( and `Paste` means `Paste from HTML`). \r\n\r\nHowever, after click \"**Copy Markdown source by default**\", typora will copy selected text in HTML/markdown format (When pasting, rich editors will accept the HTML format, while plain text / code editor will accept the markdown source code format).\r\n\r\nTo **copy Markdown source code** explicitly, please use shortcut key `shift+cmd+c` or `Copy as Markdown` from menu. To **Copy as HTML Code**, please select `Copy as HTML Code` from menu.\r\n\r\n## Smart Paste\r\n\r\n**Typora** is able to analyze styles of the text content in your clipboard when pasting. For example, after pasting a `\u003ch1\u003eHEADING\u003c/h1\u003e` from some website, typora will keep the 'first level heading’ format instead of paste ‘heading’ as plain text. \r\n\r\nTo **paste as markdown source** or plain text, you should use `paste as plain text` or press the shortcut key: `shift+cmd+v`.\r\n\r\n## Themes\r\n\r\nPlease refer to `Help` → `Custom Themes` from menu bar.\r\n\r\n## Publish\r\n\r\nCurrently Typora only support to export as **PDF** or **HTML**. More data format support as import/export will be integrated in future.\r\n\r\n## Auto Save and File Recovery\r\n\r\nTypora support auto save feature, user could enable it from preference panel. \r\n\r\nTypora does not provide professional version control and file backup feature, but typora would backup the last file content from time to time automatically, so even when typora crashes or users forget to save the file before close, it is possible to recovery most of the work by clicking `Recovery Unsaved Drafts` from preference folder, and copy out backed-up files. The File name in this folder is consists of last saved date, originally file name and last saved timestamp.\r\n\r\n## More Useful Tips \u0026 Documents\r\n\r\n\u003chttp://support.typora.io/\u003e\r\n\r\n## And More ?\r\n\r\nFor more questions or feedbacks, please contact us by:\r\n\r\n- Home Page: http://typora.io\r\n- Email: \u003chi@typora.io\u003e\r\n- Twitter [@typora](https://twitter.com/typora)\r\n\r\nWe opened a Github issue page in case you want to start a discussion or as an alternative way to report bugs/suggestions: https://github.com/typora/typora-issues/issues","ImgFile":"03.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0}},"感悟":{"0b4a8fb92680cdce7b468b27e9f39809":{"ID":"0b4a8fb92680cdce7b468b27e9f39809","Item":"感悟","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"146ceb48c4a2d34b8e2868192908d228":{"ID":"146ceb48c4a2d34b8e2868192908d228","Item":"感悟","Title":"每个人的生命里都有一只碗\r","Date":"2020-09-22","Summary":"有一个年轻人去买碗,来到店里他顺手拿起一只碗,然后依次与其它碗轻轻碰击,碗与碗之间相碰时立即发出沉闷、浑浊的声响,他失望地摇摇头。 然后去试下一只碗……他几乎挑遍了店里所有的碗,竟然没有一只满意的,就连老板捧出的自认为是店里碗中精品也被他摇着头失望地放回去了。\r","File":"有一个年轻人去买碗,来到店里他顺手拿起一只碗,然后依次与其它碗轻轻碰击,碗与碗之间相碰时立即发出沉闷、浑浊的声响,他失望地摇摇头。 然后去试下一只碗……他几乎挑遍了店里所有的碗,竟然没有一只满意的,就连老板捧出的自认为是店里碗中精品也被他摇着头失望地放回去了。\r\n老板很是纳闷,问他老是拿手中的这只碗去碰别的碗是什么意思?他得意地告诉老板,这是一位长者告诉他的挑碗的诀窍,当一只碗与另一只碗轻轻碰撞时,发出清脆、悦耳声响的,一定是只好碗。老板恍然大悟,拿起一只碗递给他,笑着说:“小伙子,你拿这只碗去试试,保管你能挑中自己心仪的碗”。\r\n他半信半疑地依言行事。奇怪!他手里拿着的每一只碗都在轻轻地碰撞下发出清脆的声响,他不明白这是怎么回事,惊问其详。\r\n老板笑着说,道理很简单,你刚才拿来试碗的那只碗本身就是一只次品,你用它试碗那声音必然浑浊,你想得到一只好碗,首先要保证自己拿的那只也是只好碗……\r\n就像一只碗与另一只碗的碰撞一样,一颗心与另一颗心的碰撞,需要付出真诚,才能发出清脆悦耳的响声。自己带着猜忌、怀疑甚至戒备之心与人相处,就难免得到别人的猜忌与怀疑。其实每个人都可能成为自己生命中的“贵人”,前提条件是,你应该与人为善。\r\n你付出了真诚,就会得到相应的信任,你献出爱心,就会得到尊重。反之,你对别人虚伪、猜忌甚至嫉恨,别人给你的也只能是一堵厚厚的墙和一颗冷漠的心。每个人的生命里都有一只碗,碗里盛着善良、信任、宽容、真诚,也盛着虚伪、狭隘、猜忌、自私……请剔除碗里的杂质,然后微笑着迎接另一只碗的碰撞,并发出你们清脆、爽朗的笑声吧!\r\n做最好的自己,才能碰见最好的别人。","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"4c5b22f1d1840a82c4dca1e3fbe7c295":{"ID":"4c5b22f1d1840a82c4dca1e3fbe7c295","Item":"感悟","Title":"从百草园到三味书屋\r","Date":"2020-10-24","Summary":"城市,越来越大。楼层,越盖越高。时间,越过越快。新年,越来越乏味。却逐渐少了少年时幸福的感觉。嗡嗡的拖拉机声音很少听到了,一排排整齐的麦秸垛再也不见了,村里记忆中的小河早已干枯了,回忆里泥泞的小路没有了。\r","File":"\r\n\r\n城市,越来越大。楼层,越盖越高。时间,越过越快。新年,越来越乏味。\r\n\r\n却逐渐少了少年时幸福的感觉。\r\n\r\n嗡嗡的拖拉机声音很少听到了,一排排整齐的麦秸垛再也不见了,村里记忆中的小河早已干枯了,回忆里泥泞的小路没有了。\r\n\r\n村村落落整齐的水泥路,也少有了泥土的气息。\r\n\r\n很少再见到这种枯藤、老树、昏鸦,小桥、流水、人家,古道、西风、瘦马般的景象了。\r\n![Alt](/assets/images/20200609001.png)\r\n\r\n而这种感觉,只有在下雨天静静的坐在飞速的列车上,手机也没电了,只能望着窗外碧绿的麦田,金黄的油菜花,泥泞的小路,断壁残垣的小桥,涓涓的流水才能感觉到。\r\n\r\n而这种感觉,却是大多数城里人趁着春暖花开的季节出游踏青寻绿,隐匿在心底去追寻的感觉。\r\n\r\n看着现在小孩子玩腻的玩具,游乐场玩了多少遍的滑滑梯,无聊的电视动画片(动画片里才能见到或听到的鸟叫,虫鸣,蜻蜓,蝴蝶。佩奇喜欢在泥坑里跳来跳去,而没人敢在泥坑里跳来跳去),觉得他们的童年好无趣。\r\n\r\n不知道当他们读到鲁迅的《从百草园到三味书屋》是什么感觉,但肯定不会比我们能更有体会。\r\n\r\n甚至过年过节对他们来说也没有期盼,没有意义。\r\n\r\n他们没赏过花灯、打过灯笼、放过鞭炮、点过蜡烛、贴过春联。\r\n\r\n没玩过泥巴,过过家家,捉过鱼虾,逮过蚂蚱,偷过西瓜。\r\n\r\n没观赏和体验过满天浩瀚的繁星,吴刚砍桂树的月亮,虫鸣般的夜晚,电闪雷鸣般的雨夜,清风的早晨,乘凉的大树,夏夜的凉风,清脆的鸟鸣,青蛙的歌唱。炎热的午后,吱吱的蝉声。\r\n\r\n是的科技在进步,但幸福感真的没有进步。\r\n![Alt](/assets/images/20200609002.png)\r\n或许正如某人所说的,幸福如饮水,冷暖自知。\r\n\r\n幸福感跟科技进步无关,也跟拥有的多少事物不成比例。\r\n\r\n甚至有点儿成反比,拥有的越多幸福感越少很难知足。\r\n\r\n或许一个时代走一个时代的不同吧。\r\n\r\n忙碌的生活,让人们疲于奔命,却忘却了生活本来的面目。\r\n\r\n总之,生活,它是一种态度。\r\n\r\n最后,说下写作目的,想写全很难,太多了。\r\n\r\n这里只算是抛砖引玉,带领大家回忆下有趣的童年。\r\n\r\n同时引申出来一种思考,现在人们生活节奏太快了,大多数人都忙碌的生活,疲于奔命,而忘记了生活的本来面目和色彩。\r\n\r\n同时,还想表达另外一主题,乐观的面对生活吧,它的好坏取决于你的态度,在忙碌之于也要好好生活,多些家人陪伴,多注意身体。\r\n\r\n什么是最大的福?身体健康,全家人平平安安就是福。\r\n\r\n人,或许等到六十岁以后才会逐渐明白,人与人之间其实能比的,只有家人的平安健康。\r\n![Alt](/assets/images/20200609003.png)","ImgFile":"06.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":5},"5a105e8b9d40e1329780d62ea2265d8a":{"ID":"5a105e8b9d40e1329780d62ea2265d8a","Item":"感悟","Title":"Second post!\r","Date":"2020-09-09","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\naaa bbbb\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"5e40d09fa0529781afd1254a42913847":{"ID":"5e40d09fa0529781afd1254a42913847","Item":"感悟","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"60474c9c10d7142b7508ce7a50acf414":{"ID":"60474c9c10d7142b7508ce7a50acf414","Item":"感悟","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"6c4e97affe728b586468f1ecd344ceb0":{"ID":"6c4e97affe728b586468f1ecd344ceb0","Item":"感悟","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"739969b53246b2c727850dbb3490ede6":{"ID":"739969b53246b2c727850dbb3490ede6","Item":"感悟","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"86985e105f79b95d6bc918fb45ec7727":{"ID":"86985e105f79b95d6bc918fb45ec7727","Item":"感悟","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"8ad8757baa8564dc136c1e07507f4a98":{"ID":"8ad8757baa8564dc136c1e07507f4a98","Item":"感悟","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"900150983cd24fb0d6963f7d28e17f72":{"ID":"900150983cd24fb0d6963f7d28e17f72","Item":"感悟","Title":"Second abc!\r","Date":"2020-10-22","Summary":"你好aaaaaaaasssssssssssssssss! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"08.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":9},"a90f8a4cfeb6471224bf8a3458f038b0":{"ID":"a90f8a4cfeb6471224bf8a3458f038b0","Item":"感悟","Title":"张一鸣的感悟\r","Date":"2020-10-22","Summary":"2001年我考入了南开大学,起初大学的生活是让人有点失落的,但慢慢地从安静朴素的校园和踏实努力的氛围中,我还是找到了自己的节奏。大学期间我主要在做三件事情 ,一是写代码,因为我是搞技术的;二是看书,看了很多很多书;三是修电脑。基于此自己也有三点收获:耐心,知识,伙伴。\r","File":"\r\n\r\n# 大学里的三点收获\r\n\r\n2001年我考入了南开大学,起初大学的生活是让人有点失落的,但慢慢地从安静朴素的校园和踏实努力的氛围中,我还是找到了自己的节奏。大学期间我主要在做三件事情 ,一是写代码,因为我是搞技术的;二是看书,看了很多很多书;三是修电脑。基于此自己也有三点收获:耐心,知识,伙伴。\r\n![Alt](/assets/images/20200609004.jpg)\r\n\r\n第一点收获:耐心。**有耐心,能独处,并基于长期思考做判断,而不为短期因素所干扰,耐心地等待你设想和努力的事情逐步发生,这对创业来说是非常重要的事情**。事实上,你经常想象的很美好,设计的也很完整,你也很努力,但你所期待的事情,经常需要很长时间才能发生。这种耐心,绝对是在南开磨练出来的。\r\n\r\n大学的时候我是怎么面对枯燥的生活?人物传记是非常好的心灵鸡汤。我读了很多人物传记,如果说有收获,就是发现那些伟大的人,在没有成为伟大的人之前,也是过着看起来枯燥的生活,每天都在做一些微不足道的事情,但这些事情最后从点连成线,成就了他们。\r\n\r\n我毕业后参与创立了酷讯、饭否、99房、到现在的今日头条,每一段创业经历,都挺寂寞的。**现在回想,耐心非常重要,不仅是等待的耐心,还要有耐心做深入思考,还要有耐心地找到更多更好的合作伙伴**。\r\n\r\n第二点收获:看书。寂寞的大学生活,给了我人生最安静的阅读时光。**我用别人打游戏、打牌的时间,阅读了各种各样的书,或者说乱七八糟的书,包括各个专业的书,包括人物传记,也有各种境内外的报刊杂志**。\r\n\r\n当然,那时候,我也有困惑,觉得看的这些东西和思考的问题都很有意思,**但在生活中没什么用。**直到后来我进入互联网行业并开始创业,**各种各样的知识才连成线,帮我理解行业、理解管理,更快地掌握不熟悉的领域,包括如何让信息得到更有效率的组织和分发,从而改变各行各业的效率**。\r\n\r\n2011年,我观察到一个现象,地铁上读报的人、卖报的人越来越少,年初还有,年底几乎没有了, 同时,2011年是智能手机出货量的高峰,是2008年、2009年、2010年三年智能手机出货量的总和。我想,这是信息传播介质的变革,手机很可能会取代纸媒成为信息传播的最主要载体,又因为人和手机的对应关系,手机随身携带,个性化推荐的需求一定会增加,于是我创办了今日头条。\r\n\r\n第三点收获:结交了很多的伙伴。我在读大学的时候结识了很多优秀的同伴。作为一个不怎么参与集体活动的理工男,怎么保持社交呢?主要靠修电脑和编程建网站……后来,同学聚会,打招呼的方式基本是:hi,你的电脑还是我装的。我装过的电脑有几十台,当然大部分是女同学……不但要帮忙装电脑还要经常保修。没错,就像你们想象的那样,修电脑为我带来了人生重大的收获——当时的女朋友,现在的太太。\r\n\r\n在校园里,我接了不少外包的项目。包括我太太她们系的网站(当然是免费的)。因为这门手艺加上兼职,大四的时候,我每月能有超过两三千的收入,在当时,绝对是土豪。那时候,和同学一起泡实验室,熬到半夜一两点,会请大家集体去烤串。一周能吃2-3次。\r\n\r\n当时和我吃烧烤的人很多是对编程感兴趣,而且志趣相投的同学朋友,有我同一级的,微电子专业的,软件工程专业的,还有师兄师弟,后来也相继加入我创办的公司,成为了我们公司的技术骨干,也是创业伙伴。\r\n\r\n# 我的工作感悟\r\n\r\n2005 年,我从南开大学毕业,加入一家叫酷讯的公司。我是最早期加入的员工之一,一开始只是一个普通工程师,但在工作第二年,我在公司管了四五十个人的团队,负责所有后端技术,同时也负责很多产品相关的工作。\r\n\r\n有人问我:为什么你在第一份工作中就成长很快?是不是你在那个公司表现特别突出?其实不是。当时公司招聘标准很高,跟我同期入职的就有两个清华计算机系的博士。那我是不是技术最好?是不是最有经验?都不是。后来我想了想,当时自己有哪些特质。\r\n\r\n首先,我工作时,**从不分哪些工作是我该做的,哪些不是我该做的**。我做完自己的工作后,对于大部分同事的问题,只要我能帮助解决,我都去做。当时,Code Base中大部分代码我都看过。新人入职时,只要我有时间,我都给他讲解一遍。通过讲解,我自己也能得到成长。\r\n\r\n工作的前两年,我基本上每天都是十二点、一点回家,回家后也编程到挺晚。**确实是因为有兴趣**,而不是公司有要求。所以我很快从负责一个抽取爬虫的模块,到负责整个后端系统,开始带一个小组,后来带一个小部门,再后来带一个大部门。\r\n\r\n当时我负责技术,但遇到产品上有问题,也会积极地参与讨论,想产品的方案。很多人说这个不是我该做的事情。但我想说:**你的责任心,希望把事情做好的动力,会驱动你做更多事情,让你得到很大的锻炼**。\r\n\r\n我当时是工程师,但参与产品的经历,对我后来转型做产品有很大帮助。我参与商业的部分,对我现在的工作也有很大帮助。记得在2007年底,我跟公司的销售总监一起去见客户。这段经历让我知道,怎样的销售才是好的销售。当我组建今日头条招人时,这些可供参考的案例,让我在这个领域不会一无所知。\r\n\r\n# 我的创业初心\r\n\r\n我很尊敬Elon Mask ,他不仅创办了TESLA ,而且还创办了一家叫Space X的公司,目标是革新太空科技,终极目标是人类能够在其他星球生活。\r\n\r\nSpace X现在是全世界第一家私人向太空发射火箭并实现回收的公司,尽管在前沿领域里不断探索的过程非常艰难,身后甚至连跟随者都没有,但Elon Mask一直相信:**只要理论上能够成立,理论上可以做到最好,那就应该去努力实现它**。\r\n\r\n我特别欣赏这种追求卓越和领先的勇气。年轻人创业,**就是要去创造新的技术,做那些理论上存在但还没有实现的东西,给世界带来根本性的进步**。创业,有人想的是要赚笔钱,有人想的则是**要做件事**,我觉得自己是后者。\r\n\r\n如果你偶然发现青霉素能消炎,你是先考虑用它去救人还是赚钱呢?应该都是先想到救人。我也是一样。到了这个时代,有个性化的方式来推荐信息,我就想把它做出来。\r\n\r\n如果我想卖掉这家公司,现在就可以拿到一大笔钱。但我奋斗的目标不是**赚钱和享乐,支撑我的是自我实现,希望有更多的创造体验,更丰富的人生经历,希望遇到更多优秀的人。**\r\n\r\n现在的创业环境和以前相比已经非常好了,创业能取得多大的成果,最重要的是,你到底愿意做多大的事情。年轻人关键是立志高远,享受拼的过程,不自满,不懈怠。要把成功的目标,设定的尽可能远。\r\n\r\n# 优秀年轻人的五个特点\r\n\r\n后来,我陆续加入到各种创业团队。在这个过程中,我跟很多毕业生共处过,现在还和他们很多人保持联系。跟你分享一下,我看到的一些好和不好的情况。总结一下,这些优秀年轻人有哪些特点呢?\r\n\r\n第一个特点:**有好奇心,能够主动学习新事物、新知识和新技能**。我有个前同事,理论基础挺好,但每次都是把自己的工作做完就下班了。\r\n\r\n他在这家公司呆了一年多,但对网上的新技术、新工具都不去了解,非常依赖别人,当他想要实现一个功能,就需要有人帮他做后半部分,因为他自己只能做前半部分。如果是有好奇心的人,前端、后端、算法都去掌握,至少有所了解的话,那么很多调试分析,自己一个人就可以做。\r\n\r\n第二个特点:**对不确定性保持乐观**。比方说,今日头条刚开始时,我跟大家讲:我们要做1亿的日启动次数,很多人觉得,你这家小公司怎么可能做得到呢?如果对此持怀疑态度,就不敢努力去尝试。**只有乐观的人会相信,会愿意去尝试**。\r\n\r\n其实我加入酷讯时也是这样,那家公司当时想做下一代搜索引擎(最后也没有做成,只做了旅游的垂直搜索)。我不知道其他人怎么想的,我自己觉得很兴奋。我确实没有把握,也不知道怎么做,但当时就去学,就去看所有相关的东西。我觉得最后也许不一定做成,或者没有完全做到,但这个过程也会很有帮助——**只要对事情的不确定性保持乐观,你会更愿意去尝试**。\r\n\r\n第三个特点:**不甘于平庸**。走入社会后的年轻人,应该设定更高的标准。大学期间的同学、一起共事的同事中,有很多非常不错的人才,技术、成绩都比我好,但10年过去了,很多人没有达到我当初的预期。\r\n\r\n很多人毕业后,目标设定就不高。我回顾了一下,发现有同事加入银行IT部门:有的是毕业后就加入,有的是工作一段时间后加入。为什么我把这个跟「不甘于平庸」挂在一起呢?因为他们很多人加入,是为了快点解决北京户口,或者得到买经济适用房的机会。\r\n\r\n如果一个人一毕业,就把目标定在这儿:在北京五环内买一个小两居、小三居,把精力都花在这上面,那么工作就会受到很大影响,他的行为会发生变化,不愿意冒风险。\r\n\r\n如果不甘于平庸,希望做得非常好的话,其实不会为这些东西担心,这很重要。我说不平庸,并不是专指薪酬要很高或者技术很好,而是你对自己的标准一定要高。也许你前两年变化得慢,但10年后再看,肯定会非常不一样。\r\n\r\n第四个特点:**不傲娇,要能延迟满足感**。在这里举个反例:两个我印象比较深刻的年轻人,素质、技术都蛮不错,也都挺有特点。我当时是他们的主管,发现他们在工作中deliver(传递)的感觉始终不好。\r\n\r\n他们觉得其他同事做得不如他们,其实不是:他们确实可以算作在当时招的同事里面 TOP20% ,但他们觉得自己是 TOP1% 。所以很多基础一点的工作,比如要做一个调试工具,他就不愿意做,或者需要跟同事配合的工作,他就配合得不好。\r\n\r\n本来都是资质非常好的人才,人非常聪明、动手能力也强,但没有控制好自己的傲娇情绪。我觉得这和「不甘于平庸」不矛盾。**「不甘于平庸」是你目标要设得很高,「不傲娇」是你对现状要踏实**。\r\n\r\n另一个例子是,当时我们有个做产品的同事,也是应届生招进来,当时大家都觉得他不算特别聪明,就让他做一些辅助性的工作,统计一下数据,做一下用户反弹之类,但现在他已经是一家十亿美金公司的副总裁。\r\n\r\n后来我想想,他的特点就是**肯去做,负责任,从不推诿,只要有机会承担的事情,他总尽可能地做好**。每次也不算做得特别好,但我们总是给他反馈。他去了那家公司后,把一个用户量不足 10 万的边缘频道负责起来,越做越好。由于是边缘频道,没有配备完整的团队,所以他一个人承担了很多职责,也得到了很多锻炼。\r\n\r\n第五个特点:**对重要的选择要有判断力**。选什么专业、选什么公司、选什么职业、选什么发展路径,自己要有判断力,不要被短期选择所左右。比如,原先有很多人愿意去外企,不愿意去新兴公司。\r\n\r\n2006 年、2007年的时候,很多师弟、师妹问我职业选择,我都建议他们去百度,不要去IBM、微软。但实际上,很多人都是出于短期考虑:外企可能名气大、薪酬高一点。虽然这个道理,大家都听过很多遍。刚毕业时薪酬差三五千块,真的可以忽略不计。短期薪酬差别并不重要。但实际上,能摆脱这个、能有判断力的人,也不是特别多。","ImgFile":"s2.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":1},"ae2b1fca515949e5d54fb22b8ed95575":{"ID":"ae2b1fca515949e5d54fb22b8ed95575","Item":"感悟","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"b04083e53e242626595e2b8ea327e525":{"ID":"b04083e53e242626595e2b8ea327e525","Item":"感悟","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"b213d23ed7c8edd718cc2b817e0c36d5":{"ID":"b213d23ed7c8edd718cc2b817e0c36d5","Item":"感悟","Title":"思考,提高效率,做更有意义的事\r","Date":"2020-09-09","Summary":"什么是更有意义的事?就是那些让你觉得,你愿意为此付出精力和时间,值得做的事。感兴趣的事,或者是认为有价值的事。\r","File":"\r\n\r\n什么是更有意义的事?\r\n就是那些让你觉得,你愿意为此付出精力和时间,值得做的事,感兴趣的事,或者是认为有价值的事。\r\n\r\n但是倘若这件事并不容易,或者需要花大量的时间和精力投入,或者短时间内很难有成效?是不自然而然的就会消磨你的兴致,消磨你的毅力,可能最终会不了了之,没有收获或收获甚微。\r\n\r\n那么,有什么办法吗?才能使你觉得你做的事更有意义?\r\n\r\n习惯思考,提高效率,讲究方法,并融入自己的兴趣爱好或情怀沉下心来认真做事。\r\n\r\n一、习惯思考\r\n有人说这世界上有两种人,一种人是按照惯性活着,过一天是一天。根据外界的环境变化而适应着去变,去活动,也更多的是活在别人眼里。一种是主动的活着,有思考,有想法,有主见,按照自己的意愿去做事,去积极寻求改变和突破。不会人云亦云,不会随波逐流,而是特立独行的有自己的想法和意见,活在自己心中。\r\n其实这两种人并没有很大的区别。区别只在于,是否习惯了思考。人之所以高等在于人之有思想,有灵魂,会思考。然而会思考并不等于爱思考,人,习惯于懒惰。有时宁愿付诸体力也不去思考,因为动用体力仿佛比动脑筋来的更简单直接一些。体力纯属机械性的重复劳动,效率太低。而思考,则是效率上的提高。因此,人更应该去思考去解决问题。但不是人人都爱思考。有句话说习惯决定性格,性格决定命运。习惯是对人的一种潜移默化的约束,习惯成自然。所以让思考也应成为一种习惯。\r\n\r\n二、提高效率\r\n提高效率重不重要?提高效率太重要了。同样都是做一件事,如果效率不高,拖的时间太长,就会消磨你的兴致,消磨你的毅力,浪费你的时间成本。效率的提升,可以使你腾出更多的精力去做一些更有意义更有价值的事情。效率的提升,可以使你想做的事情快速落地,快速试错,快速迭代,更有生命力和活力,同时也才能更有竞争力。效率的提升需要多思考,多总结,多沉淀,多复用。站在巨人的肩膀上,复用可复用的劳动成果并不断的优化和创新。\r\n\r\n三、讲究方法\r\n同样是做一件事,方法有很多。\r\n比如先整体后局部,从内到外,由细到粗,由粗到细,由点到面,由面到点等。不同的方法,产生的影响也是不同的,即便最终都是完成了这件事。因为这里面有时间和机会成本在里面,考虑到时间和机会成本,当然是时间更短的胜出。但是也不是绝对,因为有句话叫做慢工出细活,意思是说不能太过于急躁,急于求成,应沉下心来把东西好好打磨,但这更多是是针对熟悉的事物和同等生产力的情况下,做的越细当然越好。针对不同的情况,应选择不同的方法,比如针对一个新事物,如果一下子考虑的面面俱到,很深很细,往往很难落地。因为复杂性和业务的多变性,充满太多的未知的不确定因素,往往容易让人知难而退,止步不前。俗话说万事开头难,难在迈出那一步。所以这时应当选取由粗到细的方法,先争取快速的实现业务,不要考虑的过深过细,毕竟有很多未知的变动的因素。得允许有试错和迭代的机会。否则,就是在失去先机。或许等面面俱到的实现了,也已经不再有大的价值和意义了。\r\n\r\n四、融入情怀\r\n\r\n俞敏洪说过一句话,名利和地位不是你一味的追求就能获得的,而是你坚持用心的做一件事,自然而然而来的。他就是如此,乔布斯亦是如此。之前有个访谈节目问乔布斯,为什么要创办苹果?为了钱吗?他笑了,说如果因为钱他根本没办法坚持,甚至投入精力。人,习惯于懒惰。人应该支配习惯,而决不能让习惯支配人。人的一生应该怎样的度过才有意义?《钢铁是怎样炼成的》中的保尔柯察金说:人,最宝贵的是生命,生命对于每个人只有一次。这仅有的一次生命应该怎样度过呢?每当回首往事的时候,不会因为虚度年华而悔恨,也不因碌碌无为而羞愧。\r\n\r\n网上有人说,\"俞敏洪这种公知还是算了,很多公知都有点问题,就是老想语不惊人死不休,但实际上放之四海而皆准的公理大家都懂,所以就开始搞些偷换概念的歪理,一听有点道理,一推敲就不是味儿。而且说乔布斯访谈的,估计乔布斯传都没看过,乔布斯二十出头就是亿万身家,当然不为了赚钱了,但我们是普通人。坚持做一件事真的很难,没钱就没法坚持了。\",但是话虽如此,如果没有兴趣爱好或情怀投入里面,真的能坚持吗,能做好吗?真的能挣钱吗?\r\n\r\n不是说要去崇拜谁,迷信谁,盲从谁。做好自己就行了。\r\n\r\n毕竟耳朵在自己身上,对了听,不对扔。仅此而已,一笑了之。\r\n\r\n有人说我的兴趣爱好就是打牌,打游戏。但是打游戏也有以此为职业的,这告诉我们最好是能稍微的把兴趣爱好同职业结合起来,实现个人的价值和对社会的贡献。虽然每个人对人生的意义理解不尽相同,但没准这样充实和做喜欢做的事,用心做事,不管结果如何,本身就是一种意义所在。这个社会每个人都少不了柴米油盐,少有谁能像诗仙李白那样的飘柔朗逸。但是先用心把事情做好,多少投入点儿兴趣和情怀,和你追求财富并不矛盾,并且是告诉我们一个道理,切莫因急功近利而变得浮躁沉不下心来认真做事,那样只会适得其反,欲速则不达。\r\n","ImgFile":"05.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"c1a8e059bfd1e911cf10b626340c9a54":{"ID":"c1a8e059bfd1e911cf10b626340c9a54","Item":"感悟","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"c83d66a957a5806632f43661a39f930d":{"ID":"c83d66a957a5806632f43661a39f930d","Item":"感悟","Title":"Second postaaaabbbbcccddeeff!\r","Date":"2020-10-22","Summary":"你好aaaaaaaasssssssssssssssss! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"08.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":1},"e3d704f3542b44a621ebed70dc0efe13":{"ID":"e3d704f3542b44a621ebed70dc0efe13","Item":"感悟","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"f696282aa4cd4f614aa995190cf442fe":{"ID":"f696282aa4cd4f614aa995190cf442fe","Item":"感悟","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"fd196d87b9d4752fa86a3ddf1481412a":{"ID":"fd196d87b9d4752fa86a3ddf1481412a","Item":"感悟","Title":"Second444 post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0}},"联想":{"ad0234829205b9033196ba818f7a872b":{"ID":"ad0234829205b9033196ba818f7a872b","Item":"联想","Title":"Second post!\r","Date":"2020-09-20","Summary":"你好aaaaaaaa! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r","File":"\r\n\r\nThis is the main post!\r\n\r\n# Markdown1!\r\n## Markdown2!\r\n### 欢迎使用Markdown编辑器\r\n\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"04.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0}},"随笔":{"098f6bcd4621d373cade4e832627b4f6":{"ID":"098f6bcd4621d373cade4e832627b4f6","Item":"随笔","Title":"现在,我相信爱情!\r","Date":"2020-09-29","Summary":"我希望我的爱情是这样的,相濡以沫,举案齐眉,平淡如水。我在岁月中找到他,依靠他,将一生交付给他。做他的妻子,他孩子的母亲,为他做饭,洗衣服,缝一颗掉了的纽扣。然后,我们一起在时光中变老。\r","File":"------------------------------------------------------------------------------\r\n\r\n\r\n茫茫人海里遇见一个人有多难?有时候很难,几十亿人,一生也难见一次。有时却很容易,人群中第一眼就能把他认出来。我们总在不设防的时候喜欢上一些人。没什么原因,也许只是一个温和的笑容,一句关切的问候。可能未曾谋面,可能志趣并不相投,可能不在一个高度,却牢牢地放在心上了。冥冥中该来则来,无处可逃,就好像喜欢一首歌,往往就因为一个旋律或一句打动你的歌词。喜欢或者讨厌,是让人莫名其妙的事情。\r\n\r\n测试aaaabbbbb\r\n居中的图片: ![Alt](/assets/images/03.jpg)\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"03.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"30806a8afedd87abecf1f91cb39c1a6c":{"ID":"30806a8afedd87abecf1f91cb39c1a6c","Item":"随笔","Title":"现在,我相信爱情!\r","Date":"2020-09-21","Summary":"我希望我的爱情是这样的,相濡以沫,举案齐眉,平淡如水。我在岁月中找到他,依靠他,将一生交付给他。做他的妻子,他孩子的母亲,为他做饭,洗衣服,缝一颗掉了的纽扣。然后,我们一起在时光中变老。\r","File":"----------------------------------------------------------------------------------------\r\n\r\n\r\n茫茫人海里遇见一个人有多难?有时候很难,几十亿人,一生也难见一次。有时却很容易,人群中第一眼就能把他认出来。我们总在不设防的时候喜欢上一些人。没什么原因,也许只是一个温和的笑容,一句关切的问候。可能未曾谋面,可能志趣并不相投,可能不在一个高度,却牢牢地放在心上了。冥冥中该来则来,无处可逃,就好像喜欢一首歌,往往就因为一个旋律或一句打动你的歌词。喜欢或者讨厌,是让人莫名其妙的事情。\r\n\r\naaa\r\n\r\n居中的图片: ![Alt](/assets/images/03.jpg)\r\nName | Age\r\n--------|------\r\nBob | 27\r\nAlice | 23\r\n\r\n你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。\r\n\r\n```golang\r\npackage main\r\n\r\nimport \"fmt\"\r\n\r\nfunc main() {\r\n\tfmt.Println(\"hello \")\r\n}\r\n```\r\n","ImgFile":"03.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0},"7f0200414d943bbce847db92a77d9db1":{"ID":"7f0200414d943bbce847db92a77d9db1","Item":"随笔","Title":"你是睡美人还是在等待戈多\r","Date":"2020-09-29","Summary":"睡美人与等待戈多的故事,你听过吗?世间有两种人在等待,一种是睡美人,另一种是戈多。你是睡美人还是在等待戈多?睡美人是那种知道自己想要什么,却不去行动,只会等待机会的人。睡等王子来唤醒,来垂青。戈多则是压根不知道自己想要什么,只是按照惯性活着,一年一年又一年。\r","File":"\r\n睡美人与等待戈多的故事,你听过吗?\r\n\r\n世间有两种人在等待,一种是睡美人,另一种是戈多。\r\n\r\n ![img](https://img-blog.csdnimg.cn/20190813134953786.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxODg2NA==,size_16,color_FFFFFF,t_70) \r\n\r\n你是睡美人还是在等待戈多?\r\n\r\n睡美人是那种知道自己想要什么,**却不去行动,只会等待机会的人**。睡等王子来唤醒,来垂青。\r\n\r\n戈多则是压根不知道自己想要什么,只是**按照惯性活着,一年一年又一年**。\r\n\r\n日复一日的重复,直到白了头发,老了容颜。没有意义的轮回,平淡一生。\r\n\r\n ![img](https://img-blog.csdnimg.cn/20190813135258338.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxODg2NA==,size_16,color_FFFFFF,t_70) \r\n\r\n**等待,永远没有未来**。\r\n\r\n**只有做,才会改变当下的窘境**。\r\n\r\n很显然,睡美人或等待戈多,是绝大多数人之所以终其一生都不曾有过什么改变的原因。\r\n\r\n因为**做,才会改变**。\r\n\r\n做,才能改变!\r\n\r\n ![img](https://img-blog.csdnimg.cn/20190813093728196.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxODg2NA==,size_16,color_FFFFFF,t_70) \r\n\r\n先不管结果。\r\n\r\n**用心去做一件事**的样子很迷人。应该找一件事并用心去做,至少不会是浑浑噩噩!\r\n\r\n如果只把做看做忙碌的话,那没有人没在做了。\r\n\r\n根据生活惯性去做的,不加思考的,只是一种被动的机械性,重复性。\r\n\r\n没有自主意识,当然不会看见希望,也不会有改变。\r\n\r\n甚至称不上是在做,只能算是**按惯性活着**。\r\n\r\n**如果想要你不曾拥有过的东西,就必须去做你从未做过的事情**。\r\n\r\n哪怕是出一趟远门,或走一条陌生的小路。\r\n\r\n**不同的选择,不同的路**。\r\n\r\n**不同的路,不同的景**。\r\n\r\n**不同的景,不同的人生**。\r\n\r\n做、才能改变,敢不敢为理想决绝一点儿。\r\n\r\n做,**贵在坚持**。\r\n\r\n这世上什么最难?\r\n\r\n坚持最难,十年磨一剑的坚持。最难,也最可贵。\r\n\r\n如果把人生比作一场马拉松比赛,很多人不是输在了起跑线,而是**输在了中途的坚持**。\r\n\r\n人,短暂的几十年寿命,匆匆而已。\r\n\r\n不想着变就真的老了。\r\n\r\n生命就会是条直线,毫无色彩和回忆可言。\r\n\r\n ![img](https://img-blog.csdnimg.cn/20190813093700249.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxODg2NA==,size_16,color_FFFFFF,t_70) \r\n\r\n观看电影《再见路星河》有感,“笑容”,“眼泪”,“得意”,“羞涩”,我们。\r\n\r\n**即便没人为我们喝彩,我们也要活出生命的精彩**!人海之中,喧哗至上––《再见路星河》\r\n\r\n ![img](https://img-blog.csdnimg.cn/20190813103950923.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxODg2NA==,size_16,color_FFFFFF,t_70) \r\n\r\n推荐看一看《再见路星河》,一群年经人的青春岁月与激情澎湃。\r\n\r\n**敢不敢很努力、很认真的做一件事,做成一件事**。\r\n\r\n人要有上进心,**积极进取**!\r\n\r\n不管结果如何,\r\n\r\n实践的过程是**充实的**、\r\n\r\n实践的过程是**美丽的**、\r\n\r\n实践的过程是**值得回忆的**!\r\n\r\n ![img](https://img-blog.csdnimg.cn/20190813112639392.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxODg2NA==,size_16,color_FFFFFF,t_70) \r\n\r\n成功不是追求别人眼中的最好,而是**把自己的事情做得最好**。\r\n\r\n贵在坚持,难在坚持!\r\n\r\n维克多的四种特质:\r\n\r\n一,**自信心**。\r\n\r\n二,拥有**学习的动力和决心**。\r\n\r\n三,有**独立的判断和思考能力**。\r\n\r\n四,**热爱自己的工作**。\r\n\r\n![1591836337992](/assets/images/me1.jpg)","ImgFile":"s3.jpg","Author":"yangyongzhen\r","CmtCnt":0,"VistCnt":0}}}}
Go
1
https://gitee.com/yyz116/tinybg.git
git@gitee.com:yyz116/tinybg.git
yyz116
tinybg
tinybg
master

搜索帮助