├── .editorconfig ├── .github └── workflows │ └── deploy.yml ├── .gitignore ├── .gitmodules ├── README.md ├── archetypes └── default.md ├── config.toml ├── content ├── about.md └── posts │ ├── 2021 │ ├── post-KKZ20.md │ ├── post-Maoyao233.md │ ├── post-Vaceee.md │ ├── post-juxuan27.md │ └── post-skyleaworlder.md │ ├── 2022 │ └── post-zqj2333.md │ └── test.md ├── static └── favicon.ico └── themes └── hugo-ink ├── .gitignore ├── LICENSE.md ├── README.md ├── archetypes └── default.md ├── exampleSite ├── archetypes │ └── default.md ├── config.toml ├── content │ ├── about.md │ └── posts │ │ ├── post-1.md │ │ ├── post-2.md │ │ ├── post-3.md │ │ ├── post-4.md │ │ ├── post-5.md │ │ ├── post-6.md │ │ ├── post-7.md │ │ └── post-8.md └── data │ └── month.yaml ├── images ├── screenshot.png └── tn.png ├── layouts ├── 404.html ├── _default │ ├── list.html │ ├── single.html │ ├── term.html │ └── terms.html ├── index.html └── partials │ ├── comments.html │ ├── disqus.html │ ├── footer.html │ ├── head.html │ ├── header.html │ ├── paginator.html │ └── post-preview.html ├── netlify.toml ├── static ├── css │ ├── dark.css │ ├── main.css │ └── normalize.css └── js │ ├── feather.min.js │ └── main.js └── theme.toml /.editorconfig: -------------------------------------------------------------------------------- 1 | [*.toml] 2 | indent_size = 2 3 | tab_width = 2 -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: Deploy 4 | 5 | # Controls when the workflow will run 6 | on: [ push, pull_request ] 7 | 8 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 9 | jobs: 10 | # This workflow contains a single job called "build" 11 | build: 12 | # The type of runner that the job will run on 13 | runs-on: ubuntu-latest 14 | 15 | # Steps represent a sequence of tasks that will be executed as part of the job 16 | steps: 17 | # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it 18 | - uses: actions/checkout@v2 19 | with: 20 | submodules: true # Fetch Hugo themes (true OR recursive) 21 | fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod 22 | 23 | # Runs a single command using the runners shell 24 | - name: Run a one-line script 25 | run: echo Hello, world! 26 | 27 | # Runs a set of commands using the runners shell 28 | - name: Setup Hugo 29 | uses: peaceiris/actions-hugo@v2 30 | with: 31 | hugo-version: 'latest' 32 | 33 | - name: Build 34 | run: hugo --minify 35 | 36 | - name: Deploy 37 | uses: peaceiris/actions-gh-pages@v3 38 | with: 39 | github_token: ${{ secrets.GITHUB_TOKEN }} 40 | publish_dir: ./public 41 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | public/ -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule ".\\themes\\hugo-ink\\"] 2 | path = .\\themes\\hugo-ink\\ 3 | url = https://github.com/knadh/hugo-ink 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TJCS-F2F 2 | 👊 今年下半年,F2F 即将正式开机,我继续扮演小迷弟,我会用小迷弟艺术形象努力创造一个正能量的形象,文体两开花。 3 | -------------------------------------------------------------------------------- /archetypes/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{ replace .Name "-" " " | title }}" 3 | date: {{ .Date }} 4 | draft: true 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /config.toml: -------------------------------------------------------------------------------- 1 | # common config 2 | baseURL = 'https://tj-csccg.github.io/TJCS-F2F/' 3 | copyright = 'TJ-CSCCG / Tongji Univ. CS(&IS) Curriculum Cooperation Group' 4 | languageCode = 'zh-cn' 5 | theme = 'hugo-ink' 6 | title = 'TJCS-F2F' 7 | 8 | pygmentsstyle = "vs" 9 | pygmentscodefences = true 10 | pygmentscodefencesguesssyntax = true 11 | 12 | [params] 13 | avatar = 'https://avatars.githubusercontent.com/u/67193306' 14 | subtitle = 'Face to Face, Tongji University Computer Science(&Information Security)' 15 | enableGitalk = true 16 | busuanzi = true 17 | 18 | [[params.social]] 19 | icon = 'github' 20 | name = 'Github' 21 | url = 'https://github.com/tj-csccg/TJCS-F2F' 22 | 23 | [markup] 24 | defaultMarkdownHandler = "goldmark" 25 | [markup.goldmark] 26 | [markup.goldmark.renderer] 27 | unsafe = true 28 | 29 | # Nav. 30 | [[menu.main]] 31 | name = "Home" 32 | url = "/" 33 | weight = 1 34 | [[menu.main]] 35 | name = "All posts" 36 | url = "/posts" 37 | weight = 2 38 | [[menu.main]] 39 | name = "About" 40 | url = "/about" 41 | weight = 3 42 | [[menu.main]] 43 | name = "Tags" 44 | url = "/tags" 45 | weight = 4 -------------------------------------------------------------------------------- /content/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "TJCS-F2F 直面那些伟大而平凡之人" 3 | date: 2021-10-01T00:09:01+08:00 4 | type: "page" 5 | --- 6 | 7 |
人并非是生来就伟大,而是越活越伟大。
8 | 9 | 大家好,我是 `skyleaworlder`。写下这段文字时,我还是计算机系内一名普通的 `senior undergraduate student`。不禁感叹本科前 3 年白驹过隙,忽然而已。 10 | 11 | ### 孤独论 12 | 13 | “人生在世屈指算,一共三万六千天。” 17 ~ 23 岁间的这千余日正是人类精力旺盛、思维敏捷、个人综合能力达到巅峰的一段时间,其珍贵程度不言而喻。但我认为,计算机系学生大都是走了一些弯路的——可能是没有找到自己感兴趣的方向、可能是不清楚自己的目标而浪费了时间、也可能是很晚才发觉自己并不适合计算机这个学科。 14 | 15 | 我也算是走了一些弯路。我曾有一段时间误以为自己 “保研无望”,于是开始学习应用工作相关的技术栈,将学习重点放在了某些我本不应关心的地方,以致于我浪费了珍贵的学习时间、在 8 个月中毫无寸进。究其原因,是 **信息不对称** 令我产生了 **不准确的自我评价**,我因此改变了既有的学习计划,使得我在后续需要 “计算机相关基础能力” 时远不及同龄人。 16 | 17 | 那之后,我时常幻想着:“**如果有人能带着我学习,那该多好啊……**” 可是,截止 2020 年,全国本科以上人口占比 6.27%,相当于 16 个人中仅有 1 个拥有本科学历。哪怕是一个大家庭中,可能也并没有几个大学生。由于不同专业间无法直接比较,要乘上计算机专业占比;由于大家更倾向于分类讨论,还要乘上同层次高校毕业生占比;由于中国社会变化、发展过快,还要抹去 5 年前的本科毕业生所占比例……家庭中很难存在有能力 **指出那条路最适合自己** 的人。 18 | 19 | 恰巧,大学提供了一个 “条件极佳” 的学习环境中: 20 | 21 | * 上万名同龄人齐聚一堂;(初高中的环境相较闭塞,且大家学习的内容相似。但在大学中,我们可以与各个学院的同学交流想法,丰富自己的见闻) 22 | * 上百名相同专业方向的学生与自己一同学习;(学习着相同的专业课,朝着相似的目标努力着。三人行必有我师,更不要说 “百人行” 了,我们能从身边的同学身上获得更有价值的事物) 23 | * 钻研某些领域许久的教授导师;(对于部分学生而言,本科并非最后一段校园时光,我们可以从这些深耕某些方向数十年的老师身上获得课本上未尝提及的知识,并获得学术上的指导) 24 | * …… 25 | 26 | 但很可惜,这些都是幻象。 27 | 28 | * 在社交方面,校园中每天都有上百人与我们擦肩而过,但也仅是擦肩而过,我们注定和他们毫无关联。不说其他学院的学生,就连本专业的同学,我们也有相当一部分没有搭过话。我们不仅羞于社交,同时也认为社交会浪费我们的时间。 29 | * 在学习方面,存在竞争关系的双方很难推心置腹,将所学所得倾囊相授。我们很不愿意去打扰高年级的学长学姐,因为我们心里清楚 “他们没必要搭理自己”,事实也是如此,他们有时很不好说话;我们也不想询问低年级的学弟学妹,因为这样没面子。由于众所周知的原因,从授课教师这一方得到有效信息通常并不顺利。 30 | 31 | 我们依旧孤独。 32 | 33 | ### 独木桥 34 | 35 | 学习,因人而异。 36 | 37 | 我听闻身边有些同学推荐学习方法的同时,**对某些学习方法大加批判**,并将其视为 “异端”。我没有心思剖析这类同学的内心想法,也不想去评价那些 **受这类言论影响而失去个人学习节奏** 的同学。我只想说:“学习本不是一座独木桥。” 不同人的接受能力不同,`mastery in prerequisite knowledge` 也不一样。最适合的才是最好的。 38 | 39 | 4 年的本科时光也是如此。 40 | 41 | 与前 12 年的应试教育不同,大学并没有一个标准答案。对于计算机系来说,`A` 拿了 3 年国奖、`B` 发了几篇顶会、`C` 拿了 `ssp`、`D` 去了 `CMU` 也只是诸多答案中的几个。`E` 学了德语、`F` 发现了自己的兴趣、`G` 交了很多朋友也是计算机系学生的答案。`H` 打上了钻石、`I` 在项目组中打工、`J` 准备回老家开奶茶店还是计算机系学生的答案。 42 | 43 | 人没有能力尝试所有的道路,但这并不意味着自己只能死盯着脚下这条路。脚下的路并不一定就是最正确、最适合自己的,其他人脚下的路可能更适合自己,“换一条新路” 的成本并不总是不可接受的。然而,盲目从众同样不可取。绩点 4.98 的 `K` 决定分流进入计科,绩点 4.56 的 `L` 倘若跟着 `K` 进入计科,或许会失去本可获得的资源。努力固然重要,但选择有时比努力更重要。无论身处何方,面临何种选择,最重要的一点是 **想清楚自己要什么**。这与 “选课” 相仿: 44 | 45 | * “如使人之所欲莫甚于绩点”,那应该选一位给分非常好的老师; 46 | * “如使人之所欲莫甚于知识”,那硬着头皮都要跟完所有的作业。 47 | 48 | 做选择不仅要洞察环境、了解历史,还要分析自身。但问题在于如何得知可供选择的道路。 49 | 50 | ### F2F 的组织方法 51 | 52 | 我们计划抽取若干位具有代表性的本科四年级学生作为访谈嘉宾,问大家最好奇的事、听他们最真实的想法、展现他们不为人知的一面。 53 | 54 | 综上所述,`F2F` 希望提供一个不曾存在的窗口。 55 | -------------------------------------------------------------------------------- /content/posts/2021/post-KKZ20.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "2021 专访 (I) · K" 3 | date: 2021-10-25T23:10:20+08:00 4 | description: "我们非常荣幸地邀请到了 18 级电院某不愿透露姓名的不知名同学 K。由于 K 同学比较低调,我们也是使用了最简单的标题。至于 K 同学到底是一个怎样的人,不妨点进去了解了解。" 5 | --- 6 | 7 | 十月中旬,天气突然转凉,后续又下了几阵雨,上海的天气已经让我掏出了秋裤毛衣。可没想到我今天会被太阳晒醒。在这样一个晴朗的下午,我有幸在图书馆顶楼阳台上,采访了某位电院不愿透露姓名的 K 同学。 8 | 9 | ```chinese 10 | - “自我介绍一下吧。” 11 | - “我就不自我介绍了。” 12 | - “咋就不介绍了呢?” 13 | - “你就说我是某 18 级不知名学长,渣哥课设跑路(不是),渣哥的忠实粉丝。” 14 | ``` 15 | 16 | 这并不意味着 K 同学是一个不能透露自己身份的神秘人。事实是他比较 “低调”。 17 | 18 | 我想,如果有人提前知道 K 同学的真实身份,一定会对 “低调” 这两个字表示怀疑。没错,在大家眼中,他是一个外向大方、老实坦诚的社交达人,其他人可能永远无法想象 K 同学会在面对第一个问题便面露难色。可我却十分理解这一点,正如传说中所记载的那样——“平日外向的人反而喜欢独处”。他能够接受我的采访,已经是远远超出我的意料了。 19 | 20 | 我们并非是提前约定好了采访的时间与地点,在此之前,我们一起去嘉实的黄小渝吃了顿面。在一张局促的小方桌上,我直接了当地问了他许多问题,而其中大部分有关 “国奖”。 21 | 22 | ## 10 月 8 日,打牌 23 | 24 | 按照我的感受,今年国奖的竞争肯定是比去年更为激烈的。我认识许多绩点很高的同学,他们有国奖的资格,最后却没有拿到这 “一个年级仅有的 9 个名额”。恰巧,侧坐在我旁边的这位 K 同学,就是这 9 位中的一员。 25 | 26 | ```chinese 27 | - “我想请问你是如何看待 ‘国奖’ 这个东西的呢?” 28 | - “我们做的一切的事情,都不应该仅仅为了一个国奖。 29 | 但具体到国奖这件事,我们又不可以用这种 ‘高风亮节、清净无为’ 的态度对待。” 30 | “首先,国奖只看当年的成绩。从三年的总均绩点来看,一些同学可以说是前几名, 31 | 但是国奖这种针对单年的绩点评价可能就会让这一学年并不在前三或前五的同学有些不占优势。” 32 | ``` 33 | 34 | 恰逢 2021 年学院奖学金评选制度改革,在国奖上,这体现在入围资质得到了更为严格的筛查。10% 的年级排名从 “国奖答辩” 的准入门槛,变作了 “国奖资质筛查” 的准入门槛。如果想要拿到国奖,需要在上报申请材料时详述自己在 “科学研究”、“学科竞赛”、“体育活动”、“学生工作” 等方面的材料。学院会汇总上报的材料,并作统一排名。这才是 “国奖答辩” 的门票。 35 | 36 | 答辩环节的变化反而不多,各加分项仍旧与往年的国奖答辩相仿。 37 | 38 | 也就是说,今年的国奖需要计划申请的同学能够在 “初筛” 时拿出一些 “证明自己的证书”。同时也像往届一样,需要申请者具备一定的演讲水平。 39 | 40 | ```chinese 41 | - “我觉得比较重要的是,要在不同的评价阶段有不同的准备。 42 | 一个人手里的牌,基本上已经固定了,但需要清楚自己这些牌在不同场景怎么打。” 43 | “对于哪些奖、哪类论文可以认定这件事,前面已经定下了很明确的规则。 44 | 最后的答辩却不同。我们还是应该在各个方面展现自己,打一个总分仗。” 45 | “大家经过了第一轮的筛选,相信都是在排名、竞赛、科研方面有拿得出手东西的人。 46 | 实际上最后分数出来,大家也都差不多。 47 | 那在大家都优秀的情况下,不是那么多人有的‘志愿服务’、‘学生工作’、‘社团活动’ 经历就显得十分重要了。” 48 | ``` 49 | 50 | 我和 K 同学一致认为,对于一个本科生,正确的学习毫无疑问是最重要的。 51 | 52 | 然而,学习并不应是我们的全部。在计科&信安中,有相当一部分同学对技术有极高的兴趣。但无论是谁,一天都只有 24 个小时。如若狂热追求技术,势必会舍弃一些东西。在国奖这样一个追求综合发展的评价体系下,一定是吃亏的。当然,我也相信极度追求技术的同学们早已想明白了这样的话题。 53 | 54 | ```chinese 55 | - “没错。” 56 | - “用技术作为例子不好,就比方说绩点。这个绩点只有 5,你再厉害也就是个 5。 57 | 别人再不厉害也可以拿 4.9 或者 4.95。虽然实力天差地别,但在这个评价体系看来就是差不多。 58 | 你还很有可能为了追求那个 5 而放弃了其他东西。” 59 | “我们要有那种追求极致以及提升个人技术的态度,但也要有尊重规则、适应规则的思想。” 60 | “总结起来就是 3 点。 61 | 第一,我做什么事并不是为了国奖和保研; 62 | 第二,我们尽量在国奖的标准下打好手上的牌; 63 | 第三,如果真的很想要国奖,那还是建议全面发展一下。” 64 | ``` 65 | 66 | 尽管我本人没有,今天的受访者也没有,可我也知道有许多同学看不上这些 `title` 或是 “虚名”。但我想,可能真的会有同学对 “国奖” 极其渴望。如果真的醉心于这份荣誉,在保证拥有评选资格的前提下,全面发展一定是没错的。 67 | 68 | ```chinese 69 | - “刚才说了这么多,很多都是相对的。” 70 | - “其实,人的看法也是。 71 | 你可能认为 ‘学生工作’、‘社会实践’ 都是很简单的事,相对于规划工程项目不知道轻松到哪里去了。” 72 | - “哈哈哈,有的时候或许有些吧。” 73 | - “这是因为你是写代码的人。” 74 | “你会觉得以你的水平,去做那些事情会做得很好。但事实往往并非如此。 75 | 某个人在那些方面获得了分数,或许并不比你通过写代码拿到了一个奖项要轻松得多, 76 | 他们也需要付出十分的努力。我们应该尊重每一个人的成果。” 77 | - “说得对,我们应该尊重在自己未知领域取得成果的人们。” 78 | ``` 79 | 80 | 虽说是面对面的采访,我并不需要紧盯着 K 同学。我会时不时看看天边的云。10 月 23 日,嘉定上空的云很多,但也是万里晴空。我问 K 同学,问他拿了国奖有什么感触。他说没有,内心是平静的。 81 | 82 | 我并不平静。当我看到国奖名单上有 K 同学的名字后,内心是十分喜悦的。 83 | 84 | *He Deserved it.* 85 | 86 | ## 逆风更要布视野 87 | 88 | 在我给 K 同学的采访摘要中,有这么一个问题——“大二据说是大多数本科生思想转变的开始,你在大二上那个寒假做了怎样的改变?” 89 | 90 | 据 K 同学自述,他的大一并不成功。包括学习成绩在内的许多领域,他都没有做到 “满意”。 91 | 92 | ```chinese 93 | - “如何评价 Larry 的高程和计网?” 94 | - “我也不能说 ‘选就完事儿了’,这不太负责任。 95 | 但如果你觉得你能抗住,我建议还是选。为了这样的计网和高程,放弃一些东西,我觉得还是值得。” 96 | “高程计网的好处这传得已经很广了。” 97 | - “谁都知道。” 98 | - “但我必须提醒大家的一点是,很多时候我们在课上看到的东西都很局限。 99 | 不要被一门课的东西限制了思维,要以正面的态度看待它。比如说,Larry 不让我们用库。 100 | 对很多同学来说,你在做其他作业时,会不自觉想怎么从最基础的开始实现。这是个好事。 101 | 可如果你只有三天时间交作业了,那这就是坏事。” 102 | - “还得是具体问题,具体分析。” 103 | - “Larry 的意思是,你要做一个有能力的人。 104 | 但 Larry 也很支持你在未来用一些优秀的、开源的工具,并且还要熟练地应用。 105 | 当你已经能够熟练应用之后,你再回头看,是否能够自己开发一个?这是另一个新阶段。” 106 | - “没错,但作为大学老师,Larry 肯定不能教我们浅层的——一个工具怎么用,还是要教我们 ‘另一个阶段’ 的东西。” 107 | - “Larry 对工程思维是极其重视的。 108 | 如果非常喜欢做科研,那我认为可以不选,花更多的时间在科研上。 109 | 如果对工程感兴趣,那一定要选。” 110 | “还有就是 Larry 自己也承认的一个问题: 111 | 作业与实际应用在具体的操作上有很大出入,有一定的落后。 112 | 但其中的编程、工程思想可能是超前的,甚至你未来的同事都没有接触过。” 113 | “当你学了这门课、做了大作业、拿了好成绩之后,一定要去用这门课为你培养的能力, 114 | 学习和现代开发时必须面临的业务场景有关的东西。” 115 | ``` 116 | 117 | K 同学在这里为我举了个例子。他们组听说了一个名为 [Nest.js](https://github.com/nestjs/nest) 的框架越来越火,他们马上就展开了调研。虽然当时他们并不需要改换框架,但还是派出了几位同事。`Larry` 教授的更多是快速调研的能力,也就是学习能力。作业中纵然有着千奇百怪的环境限制、语言限制和用法限制,但这并不代表着未来还必须被限制。主动、快速地反应,是每个上过 `Larry` 课的学生该做到的事情。 118 | 119 | ```chinese 120 | - “毫不避讳地讲,截止大二上学期,我的总均绩就是 4.5。” 121 | “当时我有这么一个心态:我以前没有学过计算机,我必然学不会。 122 | 周围的环境也在暗示我,因为我本身不够强,现在条件也不好,所以我无论怎样都学不好。 123 | 我不能变强,这又导致我学不好。” 124 | - “属于是循环论证了。” 125 | - “但这个逻辑有很多漏洞。自己能否变强,这和环境并没有太大关系,和自己却有很大关系。 126 | 没人教可以自己看书,没书就到网上找。只要投入精力,你就一定会有收获。” 127 | ``` 128 | 129 | 我想,2018 级的 “大二上寒假” 是最为特殊的。2020 年初,`COVID-19` 席卷全球,“疫情” 带走了无数生命,改变了人类的生活方式,甚至成为了我们这一代学生灵魂中的烙印。K 同学的转变从第三学期开始,在那个学期,他认识了许多 2017 级优秀的学长学姐。当他收集到了更多的信息时,这样一种感觉油然而生——仿佛在不久的将来,很多曾经遥不可及的星辰都会变得触手可及。 130 | 131 | ```chinese 132 | - “在那个寒假之前,你是怎样的状态?” 133 | - “说实话,大二了,我当时连 Python 与 anaconda 的区别都不清楚。” 134 | - “哈哈哈。” 135 | - “我这个人很喜欢放假,因为这会让我有许多可供支配的时间。” 136 | “那之后我确实转变了很多,不仅是知识上的,更是见识上的。” 137 | “大二下,还有整个大三,我都一直处于比较不错的状态。” 138 | - “而且非常稳定。” 139 | - “对,非常稳定。” 140 | ``` 141 | 142 | (场外:此后 K 同学便是 3 学期 5.0。) 143 | 144 | 那究竟怎样才能转变? 145 | 146 | 这个问题,不同的人有不同的答案。对于 K 同学,他的答案就是 “获取更多的信息”。当只看到了一个成功或失败的案例时,会做出一些错误的判断,这些判断会让人误入歧途。 147 | 148 | ```chinese 149 | - “能细说下吗?” 150 | - “看到一个成功的人,你会误以为一切都应该如他那样顺风顺水。” 151 | “看到一个失败的人,你会误以为面前摆着的就是一盘死棋。” 152 | “当我了解到更多学长学姐的经历后,我才明白到处都是 ‘路’。” 153 | “你说咱们这个专业,保研就是人上人?出国就是人上人?难道考研或者本科就业就相对不好? 154 | 每个人情况不同,会做出不同的选择,可这些选择都是好选。” 155 | - “没错。” 156 | - “我就了解到有的学长,人家拿到了保研名额,甚至是综排的前 3 名。人家最后去工作了。 157 | 如果只是为了逃避而选择保研,3 年之后还会面临和你现在一样的困难。 158 | 而他有了 3 年的工作经验,到时候面试你的很可能就是他。” 159 | “学长学姐们的经历让我有了更好的心态。我发现我也能做到。” 160 | ``` 161 | 162 | 计科&信安专业都属于新工科,学科发展时间较短,变化十分迅速。别说 10 年前了,连 3 年前的经验都不一定管用。因此,我才认为 “前一届学长学姐们的经历” 格外重要。 163 | 164 | 在我本人的角度看 K 同学,他前三个学期与后三个学期的表现截然不同。前面略显迷茫,后面像是 “开了全图”,对局势有了清晰的判断,对自己有了明确的定位。这只能用 “他掌握了更多的信息” 来解释。哪条路是适合自己的、什么是可以复制的、何时何地办何事,这些都需要信息。 165 | 166 | 这让我不禁感慨:“前人走过的路,便是后人渡河的桥”。 167 | 168 | ## E · 推荐 | 偏见或是利剑 169 | 170 | 电院学生会经历过多次重大改制。据我所知,曾经学生会分为 “秘书处”、“外联部”、“文艺部”、“体育部”、“实践部”、“组织部”、“志愿服务中心”、“技宣部”、“网宣部” 九个部门。随着 “网宣部” 归入学院;“实践部”、“组织部” 和 “志愿服务中心” 划入团委。剩下的 5 个部门经过不断地重组,成为目前院会的 “校园文化建设中心”、“青年发展中心” 和 “办公室”。 171 | 172 | 我想,会有相当一部分同学缺少 K 同学拥有的 “学长学姐资源”。我无意将 “学长学姐的经历” 捧为无价之宝,与之相比,院内同年级的同学在某种程度上更为珍贵。大一结束后,刚刚分流不久、来到新专业的同学或许并不清楚周围的环境,因此很难找到自己的位置。而每年的 [院会招新推送](https://mp.weixin.qq.com/s/GE0iEDKAi1JMeQqmzlgfBg) 都会在这时进入你的视野。在院会中,我们可以结识来自院内各个专业的同学。 173 | 174 | 恰巧,坐在我对面的 K 同学正是上一任院学生会主席。 175 | 176 | ```chinese 177 | - “那就介绍一下现在院会的日常工作吧。” 178 | - “我们学生会现在主要是 ‘文体’、‘青年发展’、‘文秘办公室’ 这三个部分。” 179 | “文体最好理解了,平常看的晚会、篮球赛、迷你奥运会都是文体主办的。” 180 | “我们现在非常好的一个部门就是青年发展中心。 181 | 创立这个组织的初衷之一是:我们希望提供一个学长学姐和学弟学妹们交流的平台。 182 | 我们会定期举办 ‘圆桌讨论’ 活动,而且这个活动请到的学长学姐都是我们征集了许多同学的意见才选择出来的。 183 | 如果某个学长学姐在某一方面有非常独到的经验,或者这种经历是具有可复制性的,那么我们才会请过来。” 184 | ``` 185 | 186 | * [还记得 2020 年的 “嘉有本色,济遇研华” 吗?](https://mp.weixin.qq.com/s/Huidhjfs00wZ6HIQXhf_VA) 187 | * [还记得上周二下午的足球场吗?](https://mp.weixin.qq.com/s/9J0AZDUypX3xnD45UY2Asw) 188 | 189 | ```chinese 190 | - “第二个初衷是关心就业。” 191 | “大二大三的学弟学妹们可能并不了解,其实企业是一直在招聘。 192 | 到大四你们可能看到班群里多了一堆宣讲会安排和招聘信息。” 193 | “其实我们这个行业的供需比,还是需大于供的。” 194 | - “哦?这样吗?” 195 | - “我们还是不愁找不到工作的。只是我们给自己的定位都是定在最好的那一档,也只知道最好的那一档。” 196 | “那如何组织更多的企业宣讲,以及我们如何了解到更多的企业,这些就是我们做的事情了。” 197 | ``` 198 | 199 | * [这里有你的提案吗?(这个链接在这篇采访稿发出时可访问)](https://tongjiceie.wjx.cn/user/loginForm.aspx?activity=114901259&returnUrl=%2fvm%2fwI5UIUU.aspx) 200 | 201 | ```chinese 202 | - “第三,我们开设了一些定期的权益反馈通道,比如我们的宿舍、教学楼的事情。” 203 | “但这些事情,院会是肯定做不到的。那我们会通过学院,以学院的身份反馈给学校或者公寓部。 204 | 我们也会在校学代会上反馈我们在院学代会上征集的很多提案。” 205 | “我还想说一句,大家不要觉得工作做完了,就是石沉大海。我们也会认真地给大家反馈。 206 | 可确实有些事的难度比较高,我们给大家的反馈也不尽人意。 207 | 然而,这并不代表,你提一个其他问题我们还是解决不了。不是每个问题都这样。 208 | 我们有许多能做到的事。” 209 | ``` 210 | 211 | * [暑期实践动员稿](https://mp.weixin.qq.com/s/POJA5o2R7n9HZNht0nxDtw) 212 | * [暑期实践访谈录](https://mp.weixin.qq.com/s/QjuPlwA3OhrVeweYIixyEg) 213 | 214 | ```chinese 215 | - “团委部门主要是 ‘志愿服务’、‘社会实践’ 等方面。” 216 | “绕回国奖那个话题,这些也是非常重要的。也希望大家多多关注。” 217 | “还有其他一些大家平时注意不到的。 218 | 比如你去办一些手续,那些流程是怎么走下来的;交了很多材料,这些材料是谁来整理管理的呢。 219 | 除了办公室助管,就是学生会的同学。” 220 | “这就是我们院学生会的日常。” 221 | ``` 222 | 223 | 院会是一个非常好的平台。院会每年都会举办许多活动。在这个过程中,参与者会得到不少的经验。这种经验不是 “学了一个黑魔法”、“研读了一个框架” 那样的硬知识,而是在沟通方面的成长。以最近开展的 “迷你奥运会” 为例:会有与 “其他学院” 沟通的负责人,会有与院会其他部门商讨的负责人,也会有与各班班长对接的负责人。说话是社交的第一门必修课。 224 | 225 | ```chinese 226 | - “并不是每一个人天生就会与他人沟通。大家都是慢慢锻炼出来的。” 227 | “已经有过实习经验的同学肯定会知道,这是很重要的。” 228 | - “啊,对对,是的。” 229 | - “只会写代码还是差了一点东西。除非你是极强,让别人必须主动找你。 230 | 可对于咱们大多数人来说,还是需要与他人沟通。” 231 | - “能够理解,我有非常深刻的体会。” 232 | - “一句话该怎么说?如果我想请求,那我如何才能成功请求? 233 | 如果我想拒绝,我怎样才能让对方听到我的拒绝比听到我答应了还高兴?” 234 | “这个可能太离谱了,但就是那个意思。” 235 | ``` 236 | 237 | 不少同学对 “学生会” 这类组织有天然的抵触情绪,持有许多刻板印象——它一定是 “上下级分明” 的、“勾心斗角” 的、“过家家式” 的。院会实际上是一个不小的团体,我想,学院整体是怎样的,院会就是怎样的。院会中有保研清北的神仙,有自称蒟蒻的竞赛爷,也有我们这样的普通人。院会中的干事,首先是电院人,“院会” 只是我们其中一个 “标签”。以我在院会混了三年的个人经历为据,我所认识的院会是纯洁的,这是因为电院的同学们心灵明净。院会里可能正有你想认识的人。 238 | 239 | ```chinese 240 | - “电信学院学生会,不管是你还是我们,都知道一件事——院会一定不是一个强迫人工作的组织。” 241 | “至少在我做主席的时候,你打比赛也好、准备考试也好、陪 npy 也好,我们都没有一个人强迫你干活。这是事实。” 242 | ``` 243 | 244 | 提到任职期间令 K 同学印象最为深刻的一次活动,“[晚会](https://mp.weixin.qq.com/s/Huidhjfs00wZ6HIQXhf_VA)” 是他不需思考便可得出的答案。为了 2020 年 12 月 1 日新年晚会的成功举办,K 同学从 2019 年的晚会现场便开始暗自筹划。走路时会想新节目,听到一首好歌便想将它用成某个板块的 BGM,看综艺节目的舞台就思考我们的舞美能做什么。 245 | 246 | ```chinese 247 | - “而且节目的每一个细节,道具有几个,哪边上几个下几个。整个一张大表就在我心里。” 248 | “和大家一起办晚会是很高兴的。” 249 | - “而且熬了很多夜。” 250 | - “我们当时都是两三点回宿舍,三四点才睡觉,早上九点就要洗漱去国会 101。这也是很辛苦。” 251 | - “最后效果很好,说明一切都值得。” 252 | - “确实,晚会是 0 bug(s)。对于我们程序员来说,这是件值得自豪的事。” 253 | ``` 254 | 255 | ## 鹅,鹅,鹅 256 | 257 | K 同学在刚刚过去的暑假中在腾讯 `CSIG` 实习了一个暑假,主要职位是前端开发。可能你会觉得 K 同学也是一个进入大学就很快开始接触前端的人,但事实是 K 同学在第四学期之前都没有接触过 “前端开发”。短短一年时间,他就是在兼顾课业与学生工作的同时,从零基础成长到了拿 “鹅厂 offer” 的水平。 258 | 259 | ```chinese 260 | - “我们有时会对找工作感到迷茫。 261 | 好像哪怕从大一开始学,学到大四都不得方法,还是很难找到好工作。 262 | 那么你是如何在前端开发这条道路上走得又快又好的呢?” 263 | - “大二下的时候,与我关系最好的学长找到了实习。我就觉得我也该找实习了。” 264 | - “哈哈哈。” 265 | - “而且当时是疫情。你说我直接投一个是不是也行?” 266 | - “其实也可以,有这么做的。” 267 | - “然后我就开始了解,了解了解着我就发现我好菜。 268 | 我们 18 级大一花时间最多的地方在高程,但我们未来靠 C++ 吃饭的人又不多。 269 | 这是一定的。由于之前的编程水平不高,眼界也比较狭窄,学了一年也达不到工作的标准。” 270 | “就像 Larry 说的那样:‘会用 C++ 的简单语法写一些简单的 C++ 程序’。” 271 | “其实我们也学了很多,我们也不要妄自菲薄。我们就差一个 ‘转身’。 272 | 我们要把学习到的东西转化到工作需要的东西。” 273 | ``` 274 | 275 | 诚哉 K 言,我们会的东西不少。一次次作业,让我们逐渐熟悉了如何发现问题、提出问题、解决问题。相较于高中,我们的学习劲头儿可能稍显不足,但学习能力一定强盛许多。找到一条路,运用在大学学到的学习方法,就能有所收获。 276 | 277 | ```chinese 278 | - “为什么选择了前端?” 279 | - “当时摆在我面前的有两条路。一个是开发,一个是卷 AI 科研。 280 | 我对后者有兴趣,可我也不清楚那种兴趣是否仅是 ‘三分钟热度’。 281 | 我可能更喜欢开发一个应用,我享受代码跑出来的那瞬间给我带来的愉悦感。于是我选择了开发。” 282 | “开发也有好多路,最笼统也最常见的划分就是前后端。 283 | 但我们在大二下,操作系统、计网、数据库都没学过。 284 | 前端的 ‘切入学习成本’ 相对于后端是较低的。在你入手的时候,是不需要这些理论知识的。” 285 | “当然了,在实习的时候,编译原理、计网这些东西不会肯定是不行的。 286 | 只是说在我没有专业核心课基础时,学习前端是我认为比较好的选择。” 287 | - “嗯。” 288 | ``` 289 | 290 | K 同学的前端学习之路也并非一帆风顺。现在前端不再是手写原生 `html/css/js` 的时代,组件化是一个非常适合开发大型前端应用的解决方案。K 同学也因此决定从 “框架” 入手,可据他所说,“把 `Vue` 的文档前前后后读了两遍还不知道它在干什么”。所以 K 同学非常建议从原生 `html/css/js` 开始,从最基础的地方入手。 291 | 292 | ```chinese 293 | - “能介绍下你的前端学习之路吗?” 294 | - “我的道路是错误的道路。我推荐先学 html/css/js 的语法。熟悉之后就可以用框架。 295 | 当你用框架写了一个应用后,你会发现框架帮你隐藏了很多。这时候你再去研究框架,再去看更多东西。 296 | 比如 webpack,去了解你的项目是如何构建和打包的;比如一个 node 包是如何发布的; 297 | 比如 npm 的机制、浏览器的机制等等。” 298 | - “如何学习 js?” 299 | - “一开始不了解 js 如何与页面配合是正常的。 300 | 你可以用 js 写写算法题,熟悉下语法,实现一些数据结构,比如链表这一类数据结构。 301 | 这时候你再去读 Vue 这一类文档,你就全明白了。至少明白在什么地方写那些代码了。” 302 | - “我能理解。” 303 | - “至少你要知道框架解决了什么问题。它帮你办了哪些代码的事儿。多说一句,Vue 核心就一件事,就是数据绑定…… 304 | 这么通俗易懂的功能,这样一个容易上手的框架,我一开始却读不明白文档。” 305 | “回学校后,我就开始学操作系统、数据库这些课。这些课让我理解了那些东西是怎么回事儿。 306 | 再到寒假,说白了,想投大三下的暑期实习,如果菜的话,这个年别想好好过了。 307 | 大年三十的上午我在做算法题,下午我还在看文档。” 308 | “当然,厉害的话另说。某位大神三月份才开始准备,但别人不还是拿了最好的 offer。人与人还是不一样。” 309 | ``` 310 | 311 | 在准备实习面试的过程中,让 K 同学比较伤心的一件事是,与他最熟悉的学长问他:“为什么这一年我感觉你什么长进都没有?” 这让 K 同学奋发图强。最后,前端相关的面试问题 K 同学大都能说得清楚明白。 312 | 313 | ```chinese 314 | - “还有就是手不要停下来,现在的公司真的不缺八股文背诵选手。人家很可能不问你八股文。 315 | 在我二面的时候,一个基础常识都没问。别人通过一面都知道我的八股文背诵水平了,直接让写题。” 316 | “让写一个大数相加,我当时手都是抖的。” 317 | - “一来就让写题吗?” 318 | ``` 319 | 320 | K 同学的二面是压力面,面试官首先 `diss` 了一顿他的项目,此后让他写一个词法分析器。在承认现场写不出来后,面试官退一步让他写 “大数相加”。面试官的 “退” 让 K 同学退无可退。再加上 K 同学当时有些紧张,程序最终还是没调出来。 321 | 322 | 但由于腾讯面试机制,K 同学的简历被捞了出来。第二次二面,K 同学摆正心态成功通过。 323 | 324 | ```chinese 325 | - “第二次让我写一个快排,那我真是三分钟秒写。” 326 | ``` 327 | 328 | K 同学拿到 “鹅厂 offer” 在我意料之中。还记得今年 4 月份的某一天,我刚写了一天的 `go`,在回寝室的路上碰到了他。我对他说:“我真的不想写 `go` 了,感觉写反胃了。” 他却说:“我最近一直在写 `js`,我巴不得所有程序都用 `js` 重写一遍。” 329 | 330 | ```chinese 331 | - “拿到 offer 之后你还做了其他事情吗?” 332 | - “这个时候我知道了我要去做前端。除了操作系统我必须要写 C++,大三下半学期的计网大作业、编译原理、数据库我都用 js/ts 写的。” 333 | “我还提前知道了我们组用 React。其实数据库课设当时用 Vue 写了一大半了,但我还是删掉项目、清空回收站,用 React 重新写了一遍。” 334 | “对于咱们专业的同学,前端最好的练兵场就是数据库课设、Web 开发、Larry 的计网作业。 335 | 只要这三个好好写一遍前端,你就能达到一个面试拿很好 offer 的水平。” 336 | - “这里就体现出差距了。” 337 | - “因为我知道这个事情该怎么做。我只需要去做,逼自己做。这相比于 ‘盲打’,没有方向地乱跑要容易太多了。” 338 | ``` 339 | 340 | ```chinese 341 | - “下一个问题是……能否描述下你的实习生活?” 342 | - “这个不太好讲。我在组里更多做的是全栈开发。虽然我是 ‘前端开发’,但我一个页面都没写过。” 343 | - “这还叫前端吗?” 344 | - “这也体现出一种发展趋势。前端现在逐渐与服务端融合,为中台服务。 345 | 现在写前端还要去了解服务端框架,比如 Express、Koa 这些。” 346 | “我也在这里宣传一下前端。大家不要觉得前端就是写页面,背后还有很多门道,编译、构建、打包上线这些都要会。” 347 | ``` 348 | 349 | ## 恒常问题 350 | 351 | (注:下面三问是今年的常驻问题,我会向每一位受访者提出这三个问题,并将问题和他们的回答附在每一次访谈录的后面) 352 | 353 | ```chinese 354 | - “那么你如何评价自己的这三年本科经历?” 355 | - “评价……就是 ‘输了不亏,赢了血赚’ 这么一段经历吧。” 356 | “每个人在进入大学的时候,都会觉得自己要做一个优秀的学生。” 357 | “但客观分析,相对其他人,每个人都没有什么一定会成为优秀学生的理由。” 358 | “以咱们专业为例,很多同学之前自学了很久,或者初高中就是搞竞赛的,别人还有老师。” 359 | “但是,每个人也都没有阻拦自己成为优秀学生的理由。” 360 | 361 | “放平自己的心态。” 362 | 363 | “我想引用一位学姐的话:‘我做了很多快乐的新鲜事’。 364 | 平心而论,我们从高考,到分流,再到专业保研,一直处于狂热的内卷。 365 | 那么回首本科,纵观人生,这只是很小的一部分。” 366 | “我在大学交了很多朋友,要去谈恋爱,要去参加很多活动,要去做学生工作,做一些志愿服务,参加一些比赛,提升自己的技术,进行体育锻炼……这些都是很有意思的事。” 367 | ``` 368 | 369 | ```chinese 370 | - “如果给你一次大学重来的机会,你会在哪些地方做出不一样的抉择?” 371 | - “……” 372 | - “这个问题很广泛,你只要说一个地方就行了。” 373 | - “我不想重来。” 374 | “我如果做了一个不一样的抉择,我就会成为另一个人。 375 | 但我并不知道那条路上的自己会不会更好。既然已经发生,那我不想重来。 376 | 我不会去想过去我没有获得的东西,我会珍惜已有的事物。” 377 | “一切都是最好的安排。” 378 | ``` 379 | 380 | ```chinese 381 | - “能否站在大四学生的角度,为大一、大二、大三的同学各说一句话呢?” 382 | - “无论是大一上的寒假,还是大二上的寒假,抑或是大三上的寒假。只要你想准备一下东西,这都不晚。” 383 | “举个例子,大一上之后,如果你的目标是清华,那你就冲全系第一; 384 | 大二上之后,如果你的目标是保研,那就好好整理一下思路,适应所在专业的路数; 385 | 大三上之后,你可能保不上了,那你的路更多了,可以秋招、可以春招、可以考研、可以留学等等等等。 386 | 这些都不晚,而且这都是好路。” 387 | - “说得对。能否再具体一点呢?” 388 | - “大一,保证自己能选到心仪专业的同时,一定要多交朋友,多收集信息。这会让你更加快乐。你认识的人越多,路走的越宽。” 389 | “大二,就是尽快找到自己的方向。” 390 | - “大三呢?” 391 | “快速反应,适应规则。因为你们即将面临许多选择。 392 | 研究透那些规则,将已有的东西在规则下向你的目标转化,赢下你的这场 ‘比赛’。” 393 | ``` 394 | 395 | ## 开放问题 396 | 397 | (注:该板块问题主要由两部分组成:“其他受访者向该受访者提出的问题” 和 “与学习生活毫无关联的问题”。先前的问题可能会围绕受访者在本科前三年所获得的展开提问,我希望在访谈录的最后,通过这个板块展现受访者的另一面) 398 | 399 | ```chinese 400 | - “下一个问题,最近喜欢看什么综艺节……” 401 | - “不看!” 402 | - “不看?那我换一个问题?” 403 | - “……” 404 | “中国有嘻哈!中国新说唱!好吧,大家多听听说唱。” 405 | ``` 406 | -------------------------------------------------------------------------------- /content/posts/2021/post-Maoyao233.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "2021 专访 (III) · Maoyao233" 3 | date: 2021-11-13T21:35:12+08:00 4 | description: "你可能不熟悉这个昵称,但你一定熟悉 \"叶神\"。\"要参加算法竞赛吗\"、\"量化是在做什么\"、\"本科就业好吗\",本栏目可是邀请到了如此重量级的嘉宾专门解答这三个问题。" 5 | --- 6 | 7 | ```chinese 8 | - “那我们就简单聊聊。” 9 | - “没错,我们简单聊聊就可以。” 10 | ``` 11 | 12 | 现在,我坐在惟新馆二楼的平台上。 13 | 14 | ```chinese 15 | - “那么就请先做个自我介绍。” 16 | - “我是 2018 级计算机科学与技术专业的叶茂尧,也是我校 ACM/ICPC 程序设计竞赛集训队前队长。 17 | 目前在幻方量化工作,做互联网和金融的交叉行业,也就是所谓的量化投资。” 18 | ``` 19 | 20 | 各位可能很难体会我目前的心情。 21 | 22 | 第一次了解到叶神,还是在三年前的电院年级群里。那时的学院年级群还不是 “死群”,隔十几分钟就能 99+。记得第一学期的某一天,我躺在宿舍床上,看着叶神在群里尝试解答其他同学的疑惑,其在谈吐中展露的知识面对当时的我造成了极大的冲击。我不知道多少人被叶神这样帮助过,但至少我受过叶神的点拨;我也不知道多少人将叶神作为心中偶像,但至少我这么做。 23 | 24 | 所以,今天能够邀请到 “叶神”,我是感到十分的荣幸。 25 | 26 | ## “算法” 意味着什么? 27 | 28 | ```chinese 29 | - “第一组问题是和算法竞赛有关。” 30 | “叶神是从什么时候打 OI 的,高中?” 31 | - “高中。” 32 | - “那是因为什么接触了编程,又是因为什么接触了 OI?” 33 | ``` 34 | 35 | 叶神很早就接触了编程。小学时,他在家中互联网从业者亲属的指点下,使用家中闲置的电脑学习起了 `C/C++`。但你我都清楚,基本的语法并不能带来什么。从零开始创造一个有趣的应用,更重要的并非编程能力。所以即便是叶神,也很难一直低着头面向 “黑框框” 编程。 36 | 37 | ```chinese 38 | - “这种情况一直持续到高中。高中信息老师说:‘这里有一个比赛,有兴趣的同学可以参加一下’。” 39 | “那我就参加了。后来才知道这个比赛叫 NOIP。” 40 | ``` 41 | 42 | 据叶神所说,他本人生性不愿循规蹈矩,喜欢整活儿,对高中沉闷压抑的学习氛围更是无感。当时正巧是高一的第一个学期,叶神听到这消息后便报名参加。这个比赛就是大家熟知的 [NOIP](https://baike.baidu.com/item/全国青少年信息学奥林匹克联赛),而叶神的 `OI` 之路也是从这里开始的。 43 | 44 | ```chinese 45 | - “第一年,我虽然只学了一个月多一点,结果我却拿了 200 分。这还是因为我丢掉了一些本能稳拿的分。” 46 | “而我们湖北省一等奖线大概是 230 左右,所以说我学了一个月就拿了省二。” 47 | “现在回想起来,当时的我很菜,只是刚好那一年运气特别特别好。” 48 | - “遇到了一些会做的题。” 49 | - “对,但这些就让我对此产生了兴趣。” 50 | ``` 51 | 52 | 可能很多同学不能理解叶神所说的 “兴趣” 究竟从何而来,也或许会产生 “是否误将 `AC` 带来的满足感误认为 ‘兴趣’” 这样的想法。叶神以为,如果我们不以功利心衡量算法题的话,算法题背后的求解方法本身就是巧妙且有趣的。我们在生活中也可能经常有这样的体会——眼前的道理如此巧妙,却又十分自然,但自己却想不到。 53 | 54 | 举个例子,二分法是一个非常基本的算法,我们一提到二分法,首先想到的可能是 “二分查找”。然而,其思想衍生出来的 [二分答案](https://www.luogu.com.cn/training/111) 算法却可以用来解决一种优化问题,将数值上的 “优化” 转为二分法中的 “判断”。叶神在第一次学习到 “二分答案” 时,就被这个算法的精妙感染了。那之后不久开展的 `NOIP` 也是考到了 “二分答案”,叶神自然是顺利拿下。这里我也给大家找了一道可以利用 “二分答案” 求解的题目,大家可以打开编辑器试一试: 55 | 56 | ```chinese 57 | AcWing-730 机器人跳跃问题 58 | 机器人正在玩一个古老的基于 DOS 的游戏。 59 | 游戏中有 N+1 座建筑——从 0 到 N 编号,从左到右排列。 60 | 编号为 0 的建筑高度为 0 个单位,编号为 i 的建筑高度为 H(i) 个单位。 61 | 起初,机器人在编号为 0 的建筑处。每一步,它跳到下一个(右边)建筑。 62 | 假设机器人在第 k 个建筑,且它现在的能量值是 E,下一步它将跳到第 k+1 个建筑。 63 | 如果 H(k+1)>E,那么机器人就失去 H(k+1)−E 的能量值,否则它将得到 E−H(k+1) 的能量值。 64 | 游戏目标是到达第 N 个建筑,在这个过程中能量值不能为负数个单位。 65 | 现在的问题是机器人至少以多少能量值开始游戏,才可以保证成功完成游戏? 66 | 67 | 输入格式 68 | 第一行输入整数 N。 69 | 第二行是 N 个空格分隔的整数,H(1),H(2),…,H(N) 代表建筑物的高度。 70 | 71 | 输出格式 72 | 输出一个整数,表示所需的最少单位的初始能量值上取整后的结果。 73 | 74 | 输入样例: 75 | 5 76 | 3 4 3 2 4 77 | 输出样例: 78 | 4 79 | ``` 80 | 81 | 尽管第一个月的成绩非常不错,可这并不代表叶神一开始就是为了升学才选择了竞赛。让叶神想法发生改变的是 2016 年 `NOIP`,这一年叶神拿到了湖北省的第 9 名。在当时,若是能顺利进入省集训队,那至少可以保证武大、华科的名额。如果更进一步,拿到了银牌或者金牌,甚至还有机会冲击更好的学校。虽然最后省选没有成功,但 `NOIP` 省一也足够拿到同济大学的自主招生资格。 82 | 83 | ```chinese 84 | - “所以这也是一个挺不错的一个经历,并且带来了一些收获吧。” 85 | - “但更多的收获是这个经历的副产品:我去做了这些事情,我在过程中学到了东西、得到了快乐。” 86 | “当然它给我带来了现实上的利益,这是让我非常开心的事情,但这并不应该是我们的出发点。” 87 | - “嗯,一开始就是因为兴趣,是想要了解未知事物的冲动。” 88 | - “是的。” 89 | ``` 90 | 91 | 回想大一,那时我自己还是个什么都不懂的新生。我也听过我校 `ACM` 队的宣讲,但最后却没有逼自己走出那一步,这让我在过去的一段时间非常后悔。而现在,坐在我对面的正是我校 `ACM/ICPC` 队的前队长,同时他也有着两次大规模招新宣讲经验。在这里,我也斗胆请叶神在 `TJCS-F2F` 中宣传一下算法竞赛的积极影响,我想叶神的 “招新思路” 肯定与众不同: 92 | 93 | ```chinese 94 | - “我宣讲时一般会讲两个方面。” 95 | “一方面,我会从比较功利的角度。 96 | 虽然我们学习是为了学习本身,但万一在最后,这件你要付出大量心血的事没有为你带来收益,那我相信,在如今这个压力日益增加的大环境下,ACM 不会吸引到很多人。” 97 | “另一方面,我会强调算法竞赛的趣味性,讲一些介于智力题和算法题之间的东西。 98 | 此外还会讲一些比赛中的花絮,比如神奇的队名、快乐的旅游等等。” 99 | ``` 100 | 101 | 每年都会有许多同学到我校 `ACM` 集训队中学习算法与数据结构的知识。实际上,这里面有很大一部分同学并不以 “获奖” 为目的,仅仅只是想学习一些知识,为以后的学习甚至企业面试打基础。对此,叶神也表示十分的欢迎。 102 | 103 | ```chinese 104 | - “我们会开一些公开课、出一些题单。 105 | 我们希望不仅是打竞赛的人,还有希望学习的人,都能够有一些收获。” 106 | “这是一个在大学中比较值得去做的事情。” 107 | ``` 108 | 109 | 诚然,如果想要参加 `ACM` 竞赛,在高中阶段有 `OI` 基础自然是最好的。对于零基础同学而言,通过 `ACM` 竞赛获奖并不是 “性价比” 最高的。(在保研竞赛加分方面,`ACM` 竞赛毫无疑问是最硬核的几项之一)但我相信还有很多同学虽然进入大学前没有接触过,但也很想在 `ACM` 比赛中获奖。于是我问了叶神这么一个问题:“对于一个没有 `OI` 经历,但非常想在 `ACM` 比赛中获奖的同学,有没有什么方法能迅速找到方向,走得又快又好?” 110 | 111 | 听到这个问题,叶神立刻吸了一口气,坐直了一些: 112 | 113 | ```chinese 114 | - “ACM 竞赛虽说是思维的考验。本质上还是竞赛、做题。做题量是肯定绕不过的。” 115 | “也就是说,如果想在竞赛中获奖,是要做好放弃很多东西的觉悟的。” 116 | “它可能真的需要投入很多时间,去刷大量的题,去做大量的训练。” 117 | “如果不是真的热爱的话,不一定会在这条路上走得很远。” 118 | - “哦……也就是要付出巨大的努力。” 119 | - “是的。” 120 | ``` 121 | 122 | 正如叶神所说:“大学在很多时候都是要去做抉择的。不可能有人把所有事都做好。” 123 | 124 | ## “量化” 意味着什么? 125 | 126 | 今年上半年的某个周末,我心情格外烦躁,闭馆前就离开了图书馆。在回寝室的路上,我看到少作、昊龙站在一起,好像在聊些什么。我走过去和他们聊了几句才知道叶神拿了幻方量化的实习 `offer`,但我当时并不知道什么是 “量化”。我觉得对于大多数计算机专业的同学来说,“量化” 并不是一个足够熟悉的名词。同时,我也认为存在一部分同学对计算机金融的交叉方向感兴趣。那么今天我也是向叶神问了几个相关的基本问题。 127 | 128 | ```chinese 129 | - “叶神能否为我们简单介绍一下,‘量化’ 是什么概念吗?它和传统互联网行业做的业务又有多少区别?” 130 | - “简单来说,‘量化交易’ 就是计算机炒股。” 131 | “认真说的话,量化是要比炒股范围更广的,包括了在二级证券市场的交易。” 132 | “但国内大部分相关行业都是在 A 股这个市场进行交易。” 133 | “量化交易和普通交易本质上是一回事,仍然是赚市场波动的钱。” 134 | ``` 135 | 136 | 在炒股这方面,计算机和人是有很多相似之处的。如果你真的对 “量化交易” 感兴趣,不如读一读这篇幻方量化公众号的科普推送:[量化投资 18 问](https://mp.weixin.qq.com/s?__biz=MzIyODEyNDYzMw==&mid=2652893372&idx=1&sn=a065e8235205a461ac6a8d92d0b67e96&chksm=f3bde20ac4ca6b1c1c5d9d63899e511fe6e62a0ef08e7783d0e8082a7a7e5dd66e94a3740c96&mpshare=1&scene=22&srcid=1022uLUp0xIbPHsLrkic0kBe&sharer_sharetime=1635148808415&sharer_shareid=5dd560ab57feb9c08ed46268ae9ba223#rd)。 137 | 138 | ```chinese 139 | - “我还想问一个比较简单的问题。” 140 | “我想可能有一些同学不希望未来自己成为一个 ‘搬砖码农’,更希望自己朝一些交叉领域发展。 141 | 对于量化这个领域,一个计算机专业的学生,应该学习哪些东西才能胜任这个方向的工作吗?” 142 | - “我觉得计算机科学作为一个工具性的学科。不管你拿计算机做什么,很多事情都是统一的。” 143 | “它有一些最本质的东西——比如你会不会写代码。” 144 | - “哦——” 145 | - “‘会写代码’ 这四个字虽然说起来简单,但并不是每个人都能达到的事情。 146 | 写代码更像是描述自己的逻辑思维。将一个问题的解法转换成一个富有逻辑的表述。(也就是代码) 147 | 具体用什么语言、什么框架,并不是一个超出大多数人智力范围的事情。 148 | 而如何分析问题、如何组织表述,是计算机专业方面工作的一切的核心。” 149 | 150 | “量化交易也有很多方向,如果是交易系统的开发,那和做其他系统也没有什么区别,也要考虑高并发、低延迟等特性。” 151 | “当然,它可能也有一些展现行业特色的地方,比如数据的格式。 152 | 但处理数据的工具是可以快速掌握的,归根结底还是要求对数据结构、操作系统这些东西的理解。” 153 | 154 | “如果去做策略上的研究,那计算机就变成了一种工具。这个方向就要看对行业的理解。这就不是几句话能概括的了。” 155 | ``` 156 | 157 | 在叶神拿了 `offer` 之后,我也或多或少听过周围的同学聊到量化 / 计算机炒股。它好像非常看重信息的时效性,晚了一时半刻就会带来极大的损失,传说有的公司甚至要抢占交易所附近的地段,从交易所直接连光纤。 158 | 159 | 股票的价格是由交易来定价的,股票价格不可能完全等于股票应该具有的价值,这就让部分股票的 “当前价格” 与 “实际价值” 存在相当差距。 160 | 161 | 散户的行为可以用 “追涨杀跌” 四个字来大致形容,这种行为可能令原本就存在的差距变得更为明显。而 “量化” 会根据模型 “理性” 地估算股票价值,捕捉股票非理性波动。 162 | 163 | ```chinese 164 | - “‘量化’ 这种手段其实也是修复定价的过程,让价格更快地到达平衡点,到达更理性的位置。” 165 | ``` 166 | 167 | 然而今天叶神告诉我,这种高频量化交易只是很小一部分。 168 | 169 | ```chinese 170 | - “‘量化’ 赚的钱由几个方面组成。一方面是通过大家熟知的交易,另一个比较大的方面是 ‘持有’。” 171 | ``` 172 | 173 | 大部分的量化交易并不从微小的时间差上赚钱,而是像人类一样,从 “持有” 这个角度,用计算机程序预测未来股票的涨跌。 174 | 175 | ```chinese 176 | - “‘持有’?这是什么意思?” 177 | - “就是你拿着这个股票,之后这个股票涨了,那你就赚钱了。” 178 | - “哦,没错没错。” 179 | - “这是很大一部分收益来源。‘量化’ 会用它的模型选出更有可能涨的公司。” 180 | ``` 181 | 182 | 除此之外,“量化” 还可以扮演证券市场中的 “做市商”。“做市商” 是为股票提供报价 / 买卖价格的特殊交易商。 183 | 184 | ```chinese 185 | - “当市场比较小,哪怕一个股票具备很高的价值,也可能因为没有对手方而无法售出高价。 186 | 而做市商就会来购入这些股票,也算是提高了股票的流动性吧。” 187 | “做市商具有这样的权利,也要承担相应的义务—— 188 | 有股票按照报价卖给我,我必须买; 189 | 有人按照报价买我持有的股票,我必须卖。 190 | 但 ‘量化’ 就不需要像这样享受权利、承担义务。” 191 | “这并不意味着 ‘量化’ 只会赚钱,‘量化’ 因为与人一样持有股票,所以也会承担风险。” 192 | ``` 193 | 194 | 我本人是完全没有这方面的知识,听了叶神的介绍,我逐渐理解 “量化”。 195 | 196 | ## “就业” 意味着什么? 197 | 198 | 我相信,有不少同学不会把 “本科就业” 当作第一选择,其中原因可能五花八门。叶神属于选择 “本科就业” 的一方,我十分好奇这背后的原因。 199 | 200 | ```chinese 201 | - “下一个问题是……想问下你为什么选择了 ‘本科就业’?” 202 | - “让我下定决心的肯定是我拿到了一个待遇优厚的 offer,我觉得我读完研究生出来,都不一定还能拿到同样级别的 offer 了。” 203 | - “哈哈哈哈哈。” 204 | - “但早在我拿到 offer 之前,我对我自己的定位就更倾向于工作。” 205 | ``` 206 | 207 | 据叶神所说,卷绩点保研这件事并非他想要的。为了保研名额,需要每天奔波于寝室—食堂—图书馆之间,这件事是非常消耗一个人对计算机的激情与能量的。(事实上叶神握着竞赛加分,从结果上看,若想保研也是能够拿到资格的) 208 | 209 | ```chinese 210 | - “另一方面,如果说你有着足够的能力,在本科阶段进入大厂。 211 | 在我看来,在这个行业中,比起研究生是没有劣势的。” 212 | “很多大厂本硕是同职同薪,进厂后做的事情也是一样的。” 213 | “放眼整个人生,你在研究生阶段受科研培训,和你在大厂内收到工程方面的训练,也是没有一个优劣之分的。 214 | 如果你在大厂做一些高技术的工作,可能比读研成长更快。那样的话,直接就业会是个好的选择。” 215 | ``` 216 | 217 | 这点我有同感,进公司实习的第一天,小组 `leader` 就告诉我组里基本上都是 985 研究生,这一度让我感到压力山大。但工作一段时间后,我发现我们的工作并非只有研究生才能胜任,它实际上没有要求什么科研能力。虽然 “读研或是工作”,往往不是一道选择题。但我作为这次采访的发起者,更何况这次采访的嘉宾还是叶神,我很难不夹带一点私货——希望有选择余地的各位好好考虑。 218 | 219 | 抱歉,话题突然有些沉重了。话说 “一面”、“二面”、“三面” 的面试官就坐在我工位不远处。作为一个没有丰富互联网企业面试经验的学生,我一直好奇 “业内人士” 是如何看待 “求职面试” 的。如今,叶神已经在公司进行过一段时间的工作了。无论是身份,还是视角,都从曾经的应届求职生,变成了基金公司的一名在职员工。那我必然要问问这个问题: 220 | 221 | ```chinese 222 | - “以在职员工的角度看曾经的面试,可能有不同的感受。那公司里面是更希望看到前来面试的同学有哪些品质呢?” 223 | - “其实我觉得,大部分公司具有很大相似性。基本功扎实,有一定的创造能力、学习能力比较强。” 224 | - “那这些该如何在我们的简历体现出来呢?我们平时应该怎样在这几个方面提升自己呢?” 225 | - “……” 226 | ``` 227 | 228 | 以 “基本功” 为例,大家都会把面试分成两个部分,一个是算法,另外一部分是所谓的 “八股”。 229 | 230 | 任何面试都会让人写代码。“写代码” 这三个字并不简单,短短 50 行到 80 行的算法题,也能包括代码风格、思考方式、边界情况、逻辑组织等等方面。可惜的是,这些东西并不是临时突击训练可以培养的。毫无疑问,有经验的面试官能看出来一个人到底是经常写代码的,还是临考背模版的。 231 | 232 | ```chinese 233 | - “算法这个东西对于非竞赛出身的同学,确实是需要花时间做题,这是没办法的。” 234 | “但我个人觉得,学算法的时候,我们可以争取把思路给讲清楚,不止停留在 ‘把代码写出来’ 的程度。” 235 | ``` 236 | 237 | 据叶神说,他听说过很多参与企业面试的同学由于 “闷头写代码没调出来” 挂了。 238 | 239 | ```chinese 240 | - “我可能更倾向于一边写,一边给面试官解释自己为什么这么写。我是从哪里出发的,从哪里考虑的。 241 | 当我遇到问题时,我也会说:‘它出了一些问题,它的问题可能出在某某地方,我现在来排查一下’,时刻把自己的想法说出来。” 242 | “我觉得这有两方面作用,首先是这肯定不会你哪里一个 bug 调不出来直接挂掉; 243 | 另外一点就是能把一个知识给别人讲懂,和把知识背下来是两个不同的理解层次。” 244 | “能讲出来,说明你对这个知识的来龙去脉有一定理解。 245 | 不管这理解是自己悟出来的,还是从别人那里来的,反正你是知道它是怎么来的。” 246 | “我个人觉得,这种思维是一个很好的加分项。这表明你的学习不是机械的。” 247 | ``` 248 | 249 | 我深以为然。不仅是我,叶神也觉得 “表达” 是一个非常重要的能力。“表达” 的形式有很多,可能是通过文档,也可能是面对面直接交流。能否把 “自己的需求”、“未来将要做的事”、“目前遇到的问题” 说清楚,决定了能否减少许多不必要的重复劳动。 250 | 251 | ```chinese 252 | - “我是不是还有 ‘八股’ 没说。” 253 | - “嗯。” 254 | - “其实我个人不喜欢 ‘八股’ 这个叫法。” 255 | - “那是因为?……” 256 | ``` 257 | 258 | 叶神的答案是:计算机是一个复杂系统,前人为了解决一些问题,引入了对应的设计,这些是有必要弄懂的。 259 | 260 | 它们被很多人称作 “八股”,并且这个名号能够逐渐传开,肯定是有一定道理的。它们有时就是死板的、无用的、纯记忆性的。考前看面经、背面经,拿到 `offer` 就可以把它们全部抛开,反正工作也用不到。然而,也有很多知识被归为 “八股” 是冤枉的。 261 | 262 | ```chinese 263 | - “如果要去问操作系统和计算机网络中某个变量该在什么赋成什么值,这确实是无聊的。” 264 | “但为什么要设置这些变量、为什么要根据书上的步骤运行、不这么做会出什么问题,这些是值得学习的。” 265 | “我对 ‘八股’ 的理解是,你可以背细节,但要弄懂背后的原理。” 266 | ``` 267 | 268 | 与算法题相似,我相信有水平的面试官也能看出面试者的 “八股” 是背的还是真正理解了。所以我还问了叶神 “一般面试官是如何考察 ‘八股’ 的”。 269 | 270 | ```chinese 271 | - “有的是直接问。也可能在面试的时候给你一个开放的场景,让你根据场景设计。” 272 | “如果知识积累到了,你确实见过那个场景,自然可以很顺利地作答。” 273 | “但很多场面试给出的常见场景我都没见过。” 274 | “可这没关系,我会去问面试官,为什么要我设计这个?这里是出了什么问题吗?或者直接问我要解决什么问题。” 275 | “总之我会在与面试官的沟通中找到这个设计是需要我做什么,是优化性能还是避免极端情况。 276 | 我会首先把问题分解,接着我会去尝试给出一些解法。 277 | 当然我给出的解法多少存在一些问题,我也会把它们说出来。” 278 | “我会尽力把自己分析问题、看待问题的思路给面试官。” 279 | ``` 280 | 281 | 听叶神聊面试,我感到了 “表达” 的重要性。无论对错与否,大胆地说出自己的答案。如果对了,说出标准答案有什么尴尬的呢?如果错了,反正之后也见不到面试官了,那又有什么害怕的呢? 282 | 283 | ```chinese 284 | - “其实我觉得这个是比你会多少知识更重要的。” 285 | “大部分面试官其实不一定……除非他在刷 KPI,他真的不一定在意你背没背过 ‘八股’。” 286 | “但如果你面对一个问题,能够分析掉、解决掉,这个能力表现出来了,那面试官当然会觉得你不错。” 287 | - “嗯嗯,重要的不是结果,而是思维过程和表达。” 288 | ``` 289 | 290 | ## “学习” 意味着什么? 291 | 292 | 本科前三年要学习一些专业课,比如数据结构、计算机组成原理、操作系统、计算机网络等等。这些专业课中或多或少会布置一些大作业,有的还存在课程设计。对于叶神这样的选手,我想肯定有一些独到的看法。 293 | 294 | ```chinese 295 | - “我想问下叶神是如何对待咱们专业的大作业和课设的。” 296 | - “我这个人……其实我之前说了……有个特点,不是特别喜欢和大家一样,我喜欢整活。” 297 | “当然这个可能不一定是好事,我也因为整活吃了不少亏。” 298 | “有些整活成功了,但有些……” 299 | - “哈哈哈,那先说下不太成功的。” 300 | ``` 301 | 302 | 一直以来,操作系统课设的题目都是实现一个 “文件系统”。大家会实现一个能够挂在到 `Unix-V6++` 上的文件系统。而叶神完成了一个能运行在 `Linux` 操作系统上的用户态文件系统(`FUSE`)。 303 | 304 | ```chinese 305 | - “从成绩上来看,我这是很失败的。我可能花费了正常做文件系统 2~3 倍的精力,却没有拿到优。我走了很多弯路。” 306 | “但是我很快乐。你能看到它在 Linux 上跑起来了,能正常地写入文件了,g++ 能在上面运行了,我真的很开心。” 307 | “我觉得这种成就感对于计算机漫长而枯燥的学习,是一个很好的驱动。” 308 | “我不是很在意我拿到的成绩,我是想做一些好玩的事。当然,如果能学到东西就更好了。” 309 | ``` 310 | 311 | 回想自己这三年,不少大作业和课设都是糊弄过去的。可能我一开始有一个非常宏伟的构想,但事情总会慢慢不受我控制。而叶神则不同,给我印象最为深刻的,莫过于他的编译原理大作业。相较于我们一个学期只做到 “语法分析”、“`IR` 生成”,他最终生成了 `LLVM IR`,并接入了 `LLVM` 的后端,直接编译出了可以在计算机上运行的程序。 312 | 313 | 在作业上整活,不局限于某些枯燥乏味的要求,在项目上增添属于自己的色彩,是我特别佩服叶神的一点。 314 | 315 | ```chinese 316 | - “我们课上讲词法分析会讲到自动机理论,讲语法分析会讲 LL(1) / LR(0) / LR(1)。” 317 | “但我的词法分析器就是一个 switch,我的语法分析就是递归向下。” 318 | - “哦,没错,本来就是这样。” 319 | - “但通过那次大作业,我读了许多 clang 的源代码,研究了 LLVM 框架。” 320 | “我对编译器做了什么有了更深的理解,而不止停留在了课本上。” 321 | “相比于你去做一个可视化界面来把语法树展示出来,写了编译器把自己的代码编译成 exe,这是更令人兴奋的。” 322 | ``` 323 | 324 | (PS:不瞒大家,我们组的编译原理大作业就是写了个可视化界面把语法树展示出来。谢谢叶神,有被骂到) 325 | 326 | ## 恒常问题 327 | 328 | ```chinese 329 | - “如果给你一次大学重来的机会,你会在哪些地方做出不一样的抉择?” 330 | - “如果说那种小细节,赶 ddl、该学但没好好学之类的,每个人都有很多后悔的点。” 331 | “但大方向的抉择,我重来一遍也没什么区别。” 332 | 333 | “怎样的一个人才算活得比较通透、比较开心的呢?” 334 | “那应该是明知这样做会怎样,但却不会改变选择的人。” 335 | 336 | “虽然说我不能说自己有了这样的心境。但我觉得我在大学做的事情就是我想做的事。我想做我就去做。 337 | 不管最后带来的收益值不值,可它最初是符合我出发点的,重来一遍我还是会那样选择。” 338 | ``` 339 | 340 | ```chinese 341 | - “那么你如何评价自己的这三年本科经历?” 342 | - “嗯……我本科……学到了很多,收获了很多,最后给出了一个超出自己预期的答卷,我还是很有满足感的。” 343 | ``` 344 | 345 | ```chinese 346 | - “能否站在大四学生的角度,为大一、大二、大三的同学各说一句话呢?” 347 | - “大一的同学,一入学最沉重的压力就是专业分流。 348 | 这个问题过于现实、压抑,以至于我前面比较轻松的语调不太好继续下去了。” 349 | “我想说的是,不要被这种沉重的压力压迫,以致于忘记了自己来大学学习的初心。” 350 | “虽然说现实很苦涩,但不要被这个蒙住了所有的视野。 351 | 在分流之余,还是尽力调整一下心情,多看看周围精彩的世界。” 352 | “有很多可以做的,不必太焦虑。” 353 | 354 | - “那对于一个完成专业分流的大二学生呢?” 355 | - “大二其实是大学的一个转折点。 356 | 以我和很多大二学生打交道的经验,我发现他们很多时候还是被大一拼命拿绩点的惯性席卷着,大多时候不知道为何而学。” 357 | “当然,保研需要高绩点。但很多人没有想清楚自己要不要保研,为什么保研。” 358 | “我对大二同学的建议是,多看看、多想想。” 359 | “未来有很多方向,保研也有很多方向。去哪里、做什么事情,都是应该去了解的。要去了解科研是怎样的,你要接受怎样的训练。” 360 | “搞清楚每个选择需要什么能力,不要被大流裹挟着前进,不要每天不知目的地疲惫地学习。” 361 | 362 | - “那么对于大三的同学呢,也就是 19 级的同学了哈哈。” 363 | - “现在,已经到了十字路口。不管是保研、考验、出国、就业,早做决定,然后朝着自己的目标一路前进。” 364 | “选定自己要做什么,不要为别的事分心。” 365 | “如果你明确要考研,那你就没必要为一个优、一个良斤斤计较;” 366 | “要出国的话,你就去刷英语、出一点论文;” 367 | “如果要保研,那就把其他事情放一放,专心刷绩点。” 368 | “总之是朝着自己的目标专心做事。” 369 | ``` 370 | 371 | ## 开放问题 372 | 373 | ```chinese 374 | - “最后一个问题了,也是比较轻松愉快。能否为我们推荐一本最近在读的书。” 375 | - “……” (叶神作思考状,我生怕他说出一堆书) 376 | - “一本就够了。” 377 | 378 | (十秒钟过去了) 379 | 380 | - “这种问题肯定是不希望我推荐专业书的。” 381 | - “啊,也没那么多限制哈哈哈哈哈哈哈。” 382 | - “既然这个项目是给计算机同学看的,那我还是再来推一本大家喜闻乐见的专业书了。” 383 | - “可以可以。” 384 | - “《深入理解计算机系统》,也就是 CSAPP。” 385 | “很多同学学了两三年计算机,但对计算机科学是没有一个整体架构的。 386 | 那这类书,能为你建立起你对计算机的整体认识。这是千金不换的。” 387 | “但我们还是回到这个问题的本源,推荐点轻松的书。” 388 | “我最近在读一本长篇小说,马识途的《夜谭十记》。” 389 | “我说这个名字大家肯定不太熟,但我说《让子弹飞》大家肯定都听说过。” 390 | “《让子弹飞》是改编自《夜谭十记》中的一篇《盗官记》。” 391 | “马识途是现代作家,《夜谭十记》由书中 10 个小科员轮流讲的故事汇编而成的。” 392 | “语言是生动活泼的,整体带着浓厚的川渝方言特色。 393 | 但同时,由于故事都是民国时期的,所以也能感受到沉重和厚度。” 394 | ``` 395 | -------------------------------------------------------------------------------- /content/posts/2021/post-Vaceee.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "2021 专访 (V) · Vace" 3 | date: 2021-12-27T16:33:40+08:00 4 | description: "认识 Vace 对我来说是一件非常幸运的事,他拥有我难以想象的执行力,是我眼中的时间管理大师。今天我十分荣幸能邀请到 Vace 同学聊一聊他的项目合作与保研经历。" 5 | --- 6 | 7 | 这次采访我预谋已久,但我却并没有准备——没有预定好的问题、没有期望的答案,有的只是一些自然的杂谈。 8 | 9 | 有的时候我会想,想起去年、前年以及大前年的 12 月。它们毫无疑问都是关键的时间点,但我却在那些时间里过得浑浑噩噩。如果能有人在那些时刻给予我一些关键的建议,我想我会走上完全不一样的道路。 10 | 11 | 2021 年 12 月 25 日,是圣诞节,也是上海初雪的一天。气温骤降了十余度,`Vace` 在通达馆(交通运输工程学院大楼)的一楼对我讲起了他的本科四年。 12 | 13 | ## 在那个时代 14 | 15 | 我和 `Vace` 是在 2019 年寒假认识的,当时我们在一个 “临时项目组” 中一起写后端代码。但这个问题我却是今天第一次问得这么清楚: 16 | 17 | ```chinese 18 | - “话说你之前是哪个专业的?” 19 | - “工程力学,工力。” 20 | - “这是哪个学院的专业呀?” 21 | - “航力学院的。” 22 | ``` 23 | 24 | 没错,`Vace` 同学是 17 降转 18 的。由于那个时代的专业级差制度,`Vace` 连续与计科、软工擦肩而过,被第四专业志愿接住了。本来 `Vace` 的想法就是去计科或是软院,大一上的机械制图更是坚定了他这种想法。但 17 级工力专业在第一学期没有 “大学计算机基础” 这门课,反倒是他们培养方案中在第三学期放了一门 `C++ 程序设计基础`。此前,`Vace` 也在自学 `C/C++`,可是进度并不快。于是他提前一年选了一位当时还在 “基础教研室” 的电信学院老师开的 `C++` 课。听了这位老师的课后,他觉得这比自己看的网课好太多了。 25 | 26 | ```chinese 27 | - “当时选了 C++ 的,基本都上过大学计算机基础这门课。 28 | 那门课最后几周教 C++ 前几章。” 29 | “所以这门 C++ 上去第一周就是数组。我就有点懵。” 30 | - “那怎么办。” 31 | - “就自己看了一下前面的,老师讲的很好,我最后都听会了。” 32 | ``` 33 | 34 | 虽然距离学号 175 开头的 `Vace` 转专业已经过去了将近 4 年,而且那个时代还没有学堂制、没有大类招生,但 `Vace` 转专业前所做的工作却应该是始终通用的。 35 | 36 | ```chinese 37 | - “那你在转专业前做了什么准备吗?” 38 | - “转专业之前我问了下学长学姐,他们说最好有一些做过的项目。 39 | 比如一个小游戏呀,一个管理系统。” 40 | - “那你当时有这方面准备吗?” 41 | - “我就用了一个可以当作一般 C++ 大作业的学生管理系统。 42 | 还做了一个……当时我是根本不懂的……五子棋的 AI。C++ 写的 alpha-beta 剪枝。” 43 | “当时我根本看不懂,但我就是强行理解。” 44 | ``` 45 | 46 | 在大一下学期转专业的活动中,他凭借自己半年多的自学成果拿到了转专业资格。此后,`Vace` 在计算机类开始了新的大学生活。我问他真正到了计算机类学习,会不会有一些意料之外的事。`Vace` 大一双 `Larry`,那对于这个问题,`Vace` 想都没想就说出了他的答案——教做人的高程。 47 | 48 | ```chinese 49 | - “上 Larry Shen 的课印象最深的是什么?” 50 | - “……” 51 | - “也不是说具体某个内容啊,就是整体有什么深刻的感觉。” 52 | - “反正我就记得他说我们做的都是小儿科。” 53 | “我当时觉得自己学过 C++,但是去听他的课,他是从最基础的开始讲,从计算机的内存开始讲。 54 | 这对于理解计算机是很有帮助的。” 55 | “我觉得 ‘编程习惯’ 与 ‘工程思维’ 非常重要,在高程课上能学到这个就可以了。” 56 | “不要妄图学会 C++。” 57 | ``` 58 | 59 | `Larry Shen` 的高程大家都清楚。依我看来,`Vace` 后面的经历与他第一个大一、第二个大一所学内容脱不开干系。 60 | 61 | ## 在那个学期 62 | 63 | `Vace` 让我最为敬佩的是他的 “时间管理” 能力。第六学期中期,恰是各校夏令营报名的时间,我在去教务处盖 “院长章” 时偶遇了要盖 “学院章” 的 `Vace`。“学院章” 需要去三楼盖,所以我就留在教务处看管他的书包和其他资料。当时,我的眼神不由自主地瞟向了他 “北叉夏令营申请表” 中的 “个人陈述” 部分。我大受震撼,因为直到那时,我才知道他原来做了那么多工作。 64 | 65 | 由于他大部分项目经历都是在 2020 年春季学期,所以为了下文表述顺畅,我统称 `Vace` 的大二下学期为 “**那个学期**”,还请大家注意。 66 | 67 | ```chinese 68 | - “Vace,其实我一直很想问一个问题,就是你好像和很多学院的同学或者老师做过项目。” 69 | - “哈哈哈,有的时候我也会有这样的错觉,但细想的话也没做过几个。” 70 | - “我感觉很多呀,电院、交运、海洋、环境、设创、经管……” 71 | - “我觉得经管那个不算,只是和同学合作过两个大作业。” 72 | - “还是很多的,我想问你是怎么了解到这些项目的,又是如何联系老师的呢?” 73 | - “那我一个一个给你讲。” 74 | ``` 75 | 76 | 可能是因为我们坐在通达馆,所以 `Vace` 首先提到了与交运学院合作的项目。与他同一小组的,是他在校学生会认识的 18 级交运同学。交运学院每年都会举办名为 “交通科技大赛” 的赛事。这个比赛会吸引数百名学生参加,从数据来看,可以称得上是交运学院无人不知了。 77 | 78 | 在 “那个学期”,`Vace` 所在的组使用了一些机器学习的方法解决交通大数据问题——通过 `GPS` 轨迹识别车道的渠化信息以及路网的连接状况等等。 79 | 80 | ```chinese 81 | - “那你在这个项目里面负责什么呢?” 82 | - “当时我看了几篇论文,汇总了几类可能用到的方法,并且把它们的优缺点列了出来。” 83 | “我以为通过将整个项目划分成几个阶段,再用适当的算法解决对应问题就可以了。” 84 | “但像 ‘如何切分项目’,还是得依靠交运的同学来做。” 85 | ``` 86 | 87 | 在 “那个学期”,我仅仅是完成课程必要的作业就已经左支右绌了。反观 `Vace` 当时与就读于海洋学院的高中同学一起参加了 “中国大学生计算机设计大赛”。这个比赛不是计算机专业的学生才会参加的比赛,有许多非计算机专业的同学会拉几个相关专业的学生 “入伙” 一起参加。 88 | 89 | ```chinese 90 | - “大一那一年我高数和大物都修过了,所以第二个大一那一年我没事干。但为了凑够 18 个学分,我就去修各种各样的课,其中就包括一门经管学院的 ‘数据库’。” 91 | (P.S. 凑够 18 个学分自然是有用的,Vace 同学拿到了 2018-2019 学年度的国奖) 92 | “那个老师非常好,恰巧我的两个队友都上过那门课,所以我们就找了那位老师。这位老师每年还会带学生参加比赛。” 93 | “老师特别懂比赛该怎么打,在答辩方面提供了很有价值的改进意见。” 94 | - “我觉得对于拿奖的话,这些指导是非常有用的。” 95 | ``` 96 | 97 | `Vace` 的这个项目主要围绕 “海洋大数据” 与 “可视化分析” 展开。而要说到 “可视化”,就必须要提到 `Vace` 参加的另一个组——他几乎同时期在一位设创学院的教授手下学习 “可视化”。也是在这个时候,他开始了解图形学和可视化,尽管时间比较短,但整个聊天聊下来,我觉得这对他未来的影响不可估量。 98 | 99 | ```chinese 100 | - “当时我正在学习可视化分析,并且先前也学了数据库,所以很多事情是不能孤立来看的。” 101 | “记得是用了一个 SQL Server 和一个 MongoDB 来存储数据。” 102 | - “一个关系型一个非关系型?” 103 | - “其实就是乱搞讲真的。但是看起来用的东西很多很丰富。” 104 | ``` 105 | 106 | 我虽然视这种比赛为 “套壳比赛”,但哪怕是从这个角度来看,`Vace` 也套了足够多的内容:他用 `C# WinForm` 开发窗体;用 `CefSharp` 在里面嵌入了 `Chrome`、嵌入了可进行交互操作的地图;还写了点 `js`;写了点 `Python`;嵌入了 `MATLAB` 做数据分析。 107 | 108 | ```chinese 109 | - “我觉得我大一大二就是这样的,每方面都学了一点,但每方面都学得不精。” 110 | “最后就是乱搞。” 111 | - “哈哈哈哈哈哈哈哈。” 112 | ``` 113 | 114 | 虽然过程有些曲折,但他所在小组的作品还是有惊无险地进入了国赛,并且拿到了一等奖。 115 | 116 | 在 “那个学期”,我和 `Vace` 还在一个项目组中一起写前端。这是一位电院老师接到的项目,那个时候我抱着 “准备就业,学习前端” 的想法参与了这个项目组,而他比我稍稍晚了三四个月进组。由于我在此之前就曾在那位老师的另外一个项目中待过一段时间,所以我是被老师拉进去的。但 `Vace` 之前并没有与那位老师有什么联系,我也非常好奇他为何 “阴差阳错” 地进组。 117 | 118 | ```chinese 119 | - “当时我本来想选 Web 开发,但我最后还是没选。因为那个课是周五早八。” 120 | - “啊对对对!我选了也起不来。” 121 | - “但我还留在课程群里。暑假的时候,老师就在群里发消息,我看到就去了。” 122 | “一开始是写 Qt 的,写得很无聊。后面就跑到你那儿去写 js 了。” 123 | “再后面你也跑路了,我就开始另外一个项目。” 124 | ``` 125 | 126 | 也还是在 “那个学期”,`Vace` 受先前在校学生会认识的朋友邀请,加入了环境科学学院的一个准备参加 “环科赛” / “互联网+” 的创业项目组。 127 | 128 | ```chinese 129 | - “那个时候我本来就有海洋、交运两个项目,加了这个之后我的日程表都是满的了。” 130 | “到了期末的时候我快炸了。” 131 | ``` 132 | 133 | `Vace` 后面也拉了我进组。我对这个组印象极为深刻,因为我与这个组后面的领队产生了一些不愉快,所以中途退组了。但 `Vace` 还是留在组里干了比较长的一段时间,原本两个人的工作量这下全落到了他一个人身上,说老实话我现在回想起还是觉得有点不好意思。 134 | 135 | ```chinese 136 | - “后面我想那应该是老师的任务。” 137 | - “确实是。” 138 | ``` 139 | 140 | 一开始我们的领队是一位 17 级环科专业的学生,那位学生比较理解和尊重我们这些鼓弄工具的人,但可惜的是中途易帅,项目 `leader` 换成了一个博士研究生。那之后这位博士生拉了一些环科学院比较活跃的本科生,再之后又骗了几个经管的、计算机的,最可气的是还带了一堆沾亲带故的人。最后,`Vace` 的名字都快排到第十了,而前面的一些人甚至从来没有出现在项目讨论当中,更不要说论贡献超过 `Vace` 了。这件事是让我对组队比赛心灰意冷的最关键因素,在这里我夹带一点私货,希望各位在组队时擦亮眼睛。 141 | 142 | ```chinese 143 | - “我觉得这个项目没有什么可以拿出来说的。唯一有点用的就是发表了一项 ‘软著’。” 144 | - “哈哈哈哈哈哈。” 145 | ``` 146 | 147 | 在 “那个学期” 后的暑假,`Vace` 身上的项目都进行得差不多了,突然觉得闲下来了的他又找起了事情做。2019 年秋季学期,我和他以及其他一些降转的同学都提前选修了计算机类的 “数据库系统理论”。那门课的任课教师告诉我们,说是实验室新成立了一个 “量化交易协会”,可以提供一个学习 “量化” 的平台。我对此印象比较深刻,因为我还参加了实验室中一位博士生的线下讲座,我现在还对他所讲的 “海龟交易法则”、“`K` 线图” 有些许记忆。对于学院做量化的老师,`Vace` 左思右想能想到的只有那个老师。 148 | 149 | 那位老师让他实现一个策略,并在某个量化交易平台上模拟操作。 150 | 151 | ```chinese 152 | - “我最后都不知道我那个算成功了还是失败了,虽然说收益率有 60% 多嘛。” 153 | ``` 154 | 155 | 大三上学期,`Vace` 从计科转入了信安,所以他还必须补 “信息安全数学基础” 这门课。于是这个期末也是让他过得很煎熬,没有多少时间花在 “量化” 上。但不管怎么说,他都实现了一些策略,这为他后面得夏令营面试创造了不小的优势。 156 | 157 | ```chinese 158 | - “我大三上还选了 ‘数据挖掘’,那次期末是让我们炒股。我就用一个 LSTM 炒,自己都觉得很离谱。” 159 | “但后面参加北大夏令营的时候,有老师还认真地和我讨论了一下,虽然说我用的技术很落后,但还是有一定合理性的。” 160 | “这段经历加起来还勉强算得上是一个项目吧。” 161 | ``` 162 | 163 | ## 在那个夏天 164 | 165 | 参加夏令营 / 预推免估计是那年每一位保外生的共同记忆。在我看来,2021 年 5 月 27 日,清华交叉信息研究院的报名截止,宣告着保外生的角逐正式开始。 166 | 167 | 其实夏令营报名是很早就开放了的,但我不知为何,那段时间总是提不起兴致,以至于到了 5 月末才开始狼狈地准备各种材料。这种忙左忙右兜兜转转的生活从 5 月 28 号持续到 9 月 28 号。`Vace` 说他也很狼狈——清叉是最先截至并且材料较为复杂的一个营,成绩单、中英文个人陈述、奖项复印件都是在那个时候第一次准备——“但只是去做好手上的事”。 168 | 169 | 这里简单说下故事背景,`Vace` 和我都是 18 级信安专业的学生,仅仅从绩点上来看,我算是所谓的 `rk1`,而他紧随其后,绩点上我们相差的并不多,填报夏令营时仅有 0.04。但我们的填报策略迥然不同——我没有报清北属下的任何夏令营,而 `Vace` 填报的大部分是清北营。最后他拿到了清华叉院、清深大数据、北大信科、北大未来技术学院、复旦计算机、密院科研实习、南大 `LAMDA`、南大人工智能、计算所的入营资格。而我虽然报的都是华五及以下,但只入营了两三个。这件事充分说明了 “只有绩点啥用没有”,不要因为自己排名靠前就觉得初筛必过,还是要 `Experience` 的。 170 | 171 | `Vace` 实际上还投了清华软件学院、北大叉院、人大信院、南大软院、清深计算机、清深人工智能、交大等夏令营。但由于某些学校的特殊制度与其他原因(比如南大的人工智能、计算机、软院在 2021 年只能入一个,清深的三个项目也是只能入营一个),导致可能没投报过夏令营的同学觉得 `Vace` 的入营情况很一般。依我看来,`Vace` 这样已经非常强了。在那个夏天,相信院内也不会有几个人比他入的营还多。当我问他是按照什么策略报夏令营时,他告诉我:“我报的营只要给我发了 `offer` 那我都愿意去,因为我是按照自己的兴趣报的。我最想去的是交大,但它连营都没让入。” 172 | 173 | ```chinese 174 | - “那么在你参加的这么多夏令营中,你印象最深的是哪个?” 175 | - “肯定还是清深大数据。” 176 | ``` 177 | 178 | 清深大数据开营后,把所有人拉到了一个微信群,并让学生三三组队做项目。于是这时,就会有一堆简历刺眼的人在群里进行自我介绍。但最后简历出色的人可能没有拿到 “优营”,拿到 “优营” 的人也不是都拿到了 “预录取”。(清深大数据就是经典的 “优营不等于录取”,拿到了 “优营” 后还需要面试一轮) 179 | 180 | `Vace` 的清深项目经历并不顺利,因为他组到了一个很划水的队友,那个人干过的事包括但不限于 “不干活玩失踪”、“服务器画饼”、“抢占报告时间” 等等。但好消息是最后 `Vace` 和另外一个干活的队友拿到了 “优营”。 181 | 182 | ```chinese 183 | - “中午结束,下午答辩,结束后就拿到了优营,第二天上午又开始面试。” 184 | “那个面试是我夏令营发挥最好的一次。因为我觉得这辈子上清华的机会就这一次了。” 185 | ``` 186 | 187 | 面试反而没有前面的组队项目那么煎熬——通过阅读论文片段并翻译考察英语水平,通过一道简单的概率论题目考数学功底,接着就是对着 `ppt` 自我介绍。面试老师看到了 `Vace` 来自信安专业,就问了下 “公钥密码体制”。好在 `Vace` 在刚刚过去的那个学期中学了 “密码学”,这个问题自然不在话下。此后,老师还问了 “椭圆曲线” 的相关问题,恰巧在 2019 年和 2020 年的寒假,我、`Vace` 与另一位志向读信安专业的 `Eol` 一起写项目。在那个项目中,我和 `Vace` 都负责后端,而他选择 `ECDSA` 作为我们项目中 `JWT` 使用的摘要算法。 188 | 189 | 面试过后一周,`Vace` 在焦急中等到了清深大数据的 `offer`。但他最后却没有选择清深作为最终去处,这是为什么呢? 190 | 191 | 2021 年北大信科将夏令营时间一拖再拖,前后整整拖了一个月。这之中的原因有很多,但在我看来最重要的原因应该是北大信科拆院。`Vace` 在北大夏令营中报的是直博,所以面试时间相当之久,算上 `ppt` 自我介绍,总共有半个小时。面试中,老师特别感兴趣他的量化策略: 192 | 193 | ```chinese 194 | - “老师问我:‘你这个现实吗,能达到 80% 的准确率吗’。” 195 | “我当时就很诚恳,涨跌本身就是个二分类问题,乱选都有 50%。” 196 | “因为只是在局部数据上训练模型,总会有局部适应性。它只是在这个数据上表现得比较好,但实际上没这么好。” 197 | - “太老实了。” 198 | - “对对对,反正我就是立正挨打。” 199 | ``` 200 | 201 | 最后,坐在屏幕对面的北大老师们反复确认给 `Vace` 发了 `offer` 会不会来。这里再夹带一点私货,无论如何,遇到这个问题都要说 “会来”,而且不要有一丝犹豫。 202 | 203 | ```chinese 204 | - “我说,我既然报了就说明我愿意来。” 205 | - “然后就发了?” 206 | - “对,过了三天就收到了。” 207 | ``` 208 | 209 | 但实际上,在这之前 `Vace` 已经收到了清深的 `offer`。 210 | 211 | ```chinese 212 | - “我就很纠结。” 213 | - “那你怎么办?” 214 | - “我麻了,过了几天就回家去想。想了差不多一个月。” 215 | “最后解决办法就是再报一个。” 216 | - “嗯?啊?” 217 | - “解决办法就是报一个更想去的。” 218 | ``` 219 | 220 | `Vace` 在想,要不要冲 “贵系”,要不要冲清软。但 “贵系” 四个小时机试确实顶不住,清软后面思考再三也没有动心。最后 `Vace` 想到了 “贵系” 与美院联培的一个交叉项目。如果有能力选择的话,那么需要考虑的方面就会有很多——地域、导师、研究方向、职业发展等等。在 `Vace` 看来这个项目综合考虑下来是最完美的,但问题是要过清华美院那一关——作品集。 221 | 222 | 我从座位上站起来,坐到了 `Vace` 旁边。由于 `2021 · TJCS-F2F` 在我心中主打的是 “文字”,所以就不放图片了。我只能说 `Vace` 的作品集非常美: 223 | 224 | ```chinese 225 | - “我之前在学生会的时候,碰巧是学生会百周年。那个纪念刊的美术设计就有我。” 226 | …… 227 | “这个是企业形象设计,那个课上我做过一个 logo。当时做了也没想到有什么用。” 228 | …… 229 | “我把党建平台的 UI 放上去了。” 230 | “这个是数据库的课设。” 231 | …… 232 | “还有一个就是可视化的嘛,而可视化本身就有设计。” 233 | “这个是海洋的项目,这个是交运的项目。” 234 | …… 235 | “就是很巧,上周我给学弟分享,就说到这一点: 236 | ‘你在大学中做过的每一件事,都会在将来成为你与众不同的原因’。” 237 | “我当时就觉得,我在大学里做的事情,就是为了这个交叉项目来的。” 238 | …… 239 | “缘分还是很奇妙的。” 240 | ``` 241 | 242 | ## 恒常问题 243 | 244 | ```chinese 245 | - “其实感觉前面说了挺久的,最后我再问三个问题。” 246 | “首先第一个问题,如何评价自己的三年本科学习经历?” 247 | - “学习经历吗?” 248 | - “呃……经历吧。” 249 | - “哈哈哈。” 250 | - “哈哈哈,我知道,就说经历吧。” 251 | - “大学三年……或者说四年吗,不完全是为了学习。 252 | 我自己就是各方面都涉猎了一点,但都不深。 253 | 我现在就是 ‘上了操作系统还不知道怎么写操作系统’,就是你骂的那种。 254 | ‘学完计组还不知道 PCI bus 是什么’。” 255 | - “哈哈哈。” 256 | - “但我觉得,让我搭一个小网站我还是可以搭的。” 257 | - “哈哈哈。” 258 | - “让我快速学习一项技术、实现个算法或者搞点科研还是可以的。” 259 | “我觉得还是考验缘分。你与其他人的缘分,与自己的缘分——现在自己与未来自己的缘分,你能达到哪一步…… 260 | 就比如大一的时候,我是不会想到现在我是一个怎样的人。 261 | 但中间会经历很多事——有些是自己去找,有些是找上门来自己抓住了。” 262 | “总之各个方面,包括在学生会,我有一段很美好的经历; 263 | 志愿活动与社会实践,也做过一些有价值的东西; 264 | 在专业领域或业余方向,也能找到一个怡然自得的状态; 265 | 在个人感情上,也去主动追求、主动把握; 266 | 在内心成长,价值观、世界观、人生观,思考的方式,涉猎过的文化……” 267 | “虽然不可能每一方面都做得很完美,甚至在一两个方面做到完美也很难, 268 | 但我每个方面都顾及了一些。” 269 | “我对我前三年,或者前四年的经历是很满意的。” 270 | ``` 271 | 272 | ```chinese 273 | - “好的,那下一个问题:如果给你一次大学重来的机会,你会在哪些地方做出不一样的抉择?” 274 | - “嗯……就像我说的,大学的成长既要考虑历史的进程,也有个人的努力,还有一些阴差阳错的缘分。我觉得在哪一个节点做改变,都不一定会带来更 ‘好’ 的结果。 275 | 这个 ‘好’ 可能是个人评价,也可能是世俗标准。” 276 | “我觉得我这一遍已经很好了。” 277 | ``` 278 | 279 | ```chinese 280 | - “能否站在大四学生的角度,为大一、大二、大三的同学各说一句话呢?” 281 | “首先对大三的学生吧。” 282 | - “我觉得大三相对来说是比较难的,因为形态已经相对固定在一个范围了,但还是有机会去提升一下自己。 283 | 大三最重要的就是确定自己的目标,确定自己今后一两年甚至三五年想要做什么。” 284 | “我觉得做决定是一个比较奇妙的事情,一旦你认定了要做什么,至少未来一两年就会比较明朗。 285 | 大话上说起来是这样,但具体的操作肯定很煎熬。” 286 | “专业知识可能很多人在大三才开始学,但是大三的时候或许有些怠惰了,一摸就摸过去了。 287 | 如果基础不够好,那还是可以提升自己的基础。 288 | 专业课不一定每门都精通,但要精通自己需要的那一两门。” 289 | - “接下来就对大二吧。” 290 | - “我觉得大二要有很强的抗压能力。大二是最容易一下子过去的。 291 | 如果仅仅针对济勤学堂,课比我们当时还多。” 292 | (P.S. 我在这里给 Vace 盘点了一下 20 级信安第三学期的专业课表,Vace 听后是这么说的) 293 | “那麻了,大二上就基本毁了。 294 | 但还是得讲点。 295 | 大二是可以用来尽情拓宽自己可能性的一年。 296 | 如果你主动去尝试的话,你的未来都会发生大的转向。 297 | 如果你按部就班地走,你可能会收到好的绩点。” 298 | - “也不一定。” 299 | - “他们太难了。大二不管是竞赛、科研、实习,还是各种方面的学生工作或是实践,都放手去尝试。 300 | 大二主要要有雄心壮志。课再多能有别人 ganler 大佬多吗?” 301 | (P.S. ganler 大佬来自 17 计科,是我眼中的神) 302 | “反正大二这一年一定要做一点与别人不一样的事。得有一点追求极致的想法,去向更优秀更好的地方尝试。” 303 | - “接下来说说对大一的吧。” 304 | - “大一就太多了,想干什么都行。” 305 | “不光是绩点,大一学的课很多,也很必要。 306 | 就比如数学,你学得普通和学得不太好可能没什么区别,但如果你学得好,那未来可选择的就更多。 307 | 好的数学和编程基础会让未来轻松很多。 308 | 绩点当然也很重要,要是绩点崩了后面压力就很大。” 309 | “其实大一和大二一定程度上一样的,要大胆去尝试。但大一更大胆,可能你会得不多。 310 | 但你各个感兴趣的领域都要去尝试。 311 | 你也可以四年都搞学生工作,毕业走选调,或者留校做行政。” 312 | “尝试的同时,尽量在一两个地方找到能够深入下去的点。 313 | 不管什么时候,都要去了解、主动把握机会、获取信息。” 314 | ``` 315 | 316 | ## 开放问题 317 | 318 | ```chinese 319 | - “其实那不是最后三个问题,我还有一个问题。” 320 | “但这个问题刚才你说的时候我就一直在想,可怎么也没想好。” 321 | “我想问一下,有没有去过哪些好玩的地方。” 322 | - “周边的商场不外乎南翔印象城和万达。但我可以给你推荐几个地方看展。” 323 | “PSA。” 324 | - “PSK?Pre-shared Key?” 325 | - “是上海当代艺术博物馆。还有新开的浦东美术馆也不错” 326 | “有一个 APP,叫 iMuseum,你可以看同城的博物馆、展览有哪些。” 327 | ``` 328 | -------------------------------------------------------------------------------- /content/posts/2021/post-juxuan27.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "2021 专访 (II) · juxuan" 3 | date: 2021-11-11T21:46:40+08:00 4 | description: "我认识鞠大佬很久了,算起来她还是我进大学后认识的第一个女同学。数强出身、4 学期满绩、2 年国奖、国创大挑特奖、港校提前批,她的简历让我知道了什么是残忍。" 5 | --- 6 | 7 | 我本人非常荣幸能够邀请到鞠璇同学。 8 | 9 | 9 月 20 号,我向鞠大佬阐述了 `TJCS-F2F` 这个想法,说起来那其实是我第一次向其他人征询关于这个项目的意见。而鞠大佬在认同我想法的同时,还提出了一些建设性的意见,并且表示支持。我当时格外感动。我想我还算是一个容易放弃的人,倘若当时她觉得这个想法并不成熟,那可能我就要再筹划其他形式了(哈哈哈)。 10 | 11 | 令我更为感动的是,在我将拟好的问题发给她后,鞠大佬说: 12 | 13 | ```chinese 14 | - “但是十几个人都这样子会不会比较花时间?” 15 | “其实我感觉我先写个草稿出来,会不会更高效一点?主要也是聊天的时候很容易会漏一些点。” 16 | ``` 17 | 18 | 整理录音并以文字形式输出是一件比较费神的事。没有什么比 “受访者” 自己打字更令 “采访者” 高兴的了。那么话不多说,进入正题。 19 | 20 | ## Biography 21 | 22 | Q: 简单介绍一下自己吧。 23 | 24 | A: Hello~我是鞠璇,来自 18 级数理强化班 [[1]](#18-shuliqianghuaban)。后续的安排是到香港中文大学读 cv 方向的 PhD(非强组),大概的背景: 25 | 26 | * 排名 10 左右; 27 | * 国奖 × 2; 28 | * 极水论文二三作者 × 2; 29 | * 国创负责人; 30 | * 英语六级550+; 31 | * 挑战杯上海市特等奖以及一些没什么用的奖项…… 32 | 33 | A: [简历](https://github.com/juxuan27/juxuan27/blob/main/CV-Xuan-Ju.pdf) 放在这里方便有想来香港读书的学弟学妹们做参考,整体水平自我感觉在港校提前批的同学里面算中下吧 hh(提前批整体质量都比较好),大学这三年感觉自己也过的不算很成功但也不算太差,学弟学妹们也马上到了要做选择的阶段了,所以还是有挺多想分享的东西的,当然我的想法很大程度上只是个人主观观点,大家还是要多听听多看看看,然后最后再听自己的做决定。 34 | 35 | Q: 最近在忙什么? 36 | 37 | A: 主要在享受生活(笑),外加进组干干活,考些杂七杂八的考试,整体来说大四其实是一个 “想紧张充实也可以,想摸鱼闲游也可以” 的时间段,大部分同学这段时间会选择去外面的公司实习,或者跟着后续研究生 or 博士阶段的老师做课题,我目前处于一种游离的科研实习状态(再次笑),因为后面 12 月打算去香港做 RA[[2]](#ra),想抓住最后的摸鱼时光。 38 | 39 | A: 目前这个阶段,身边的同学的主要出路就是几种:准备出国、已保研、已上岸香港或新加坡(有提前批,时间与保研基本相同)、工作、考研,每条路都有各自的优劣,也决非考研或者工作就不如保研,也许几个月后考研人会上岸清北(18届计算机 + 信安保研清北的好像有三个),也许保研人毕业后起薪还没有本科就业的同学高(甚至是本科就业的同学的起薪 hh)。总之,想跟学弟学妹们说,不管是保研边缘、保外边缘还是考研,都不要太过焦虑,向着自己的目标踏实努力远比陷入压力怪圈要来的实在,只要有付出一定会看到结果~ 40 | 41 | ## Education 42 | 43 | Q: 为什么选择了数学强化班这条路?这个选择对于当时的你来说意味着什么?中途后悔过吗? 44 | 45 | A: 当时大一刚入学,听信了数理强化班很牛的宣传,自我感觉数学又还不错,就没多想直接报名了。 46 | 47 | A: 其实在当时这个选择并没有太多的 “含义”,但是经过这三年,我对数理强化班的态度大概是:这个班听说很厉害 --> 后悔 --> 感恩的心hh 48 | 49 | A: 最开始后悔是第一学期成绩出来的时候,绩点很低,所以略有怨念,但随后就意识到如果别人可以在数强拿到高绩点而我没有,那就应该从自己身上找问题,而不是从环境中找问题(然后就在卷绩点中度过了剩下的一年)(PS: 鞠璇同学 4 学期 5.0 的壮举令我将其 QQ 备注设置为 “武陵人”) 50 | 51 | A: 离开数理强化班之后更多的就是感恩了,虽然很多时候会觉得多出来的数学课没学到脑子里也没用,但其实知识更多的在于潜移默化的影响一个人的学习态度和习惯,而且在数强小班的环境下遇到一群彼此熟悉和了解的朋友也是大学中极其幸运的事(数强大家最后出路也都很不错,13 个人有 2 个保外,2 or 3 个港校,5 个保本校) 52 | 53 | PS: 数理强化班作为转专业的途径来说,个人认为是一个非常好的选择,听说最近新出了一个换了名字的数理强化班,如果是刚入学的学弟学妹可以关注一下。(PS: 这段 PS 是鞠璇同学本人的 PS) 54 | 55 | Q: 作为数分高代高程一起上的人,有没有什么对选报荣誉课程的学弟学妹们的建议? 56 | 57 | A: 大概建议如下: 58 | 59 | * 如果在各种评优分流分数计算博弈中可以快速胜出,或者真的有兴趣,建议选报; 60 | * 如果是报不报都行而且感觉自己有能力学好,建议选报; 61 | * 如果是“别人报了我也报吧”,建议再多考虑考虑; 62 | * 如果有自己的专业兴趣点,比如 ACM[[3]](#acm)、CTF[[4]](#ctf)、学术等等,建议不报。 63 | 64 | A: 至于上课,我不确定目前荣誉课改成什么样子了,但总的评分标准肯定是考试 + 报告,学荣誉课程肯定要比其他同学多付出一些时间和精力,但一定要想清楚这些付出的收获是什么,拿优和竞赛 / 论文哪个对未来发展更重要,一定不要(像我一样)盲目地卷绩点,保研要看竞赛论文加分,工作要看刷题和代码能力,出国绩点 4.7+ 就完全足够,想清楚自己要什么,出的力才能转化成有用功。 65 | 66 | Q: 在大二大三领悟了怎样的学习考试精髓呢?有没有什么拿优的独门经验? 67 | 68 | A: 其实讲真吧,我觉得拿优是一件并不那么考验学习水平,更多考验技巧的事情,我的策略是想好好学的课会认真做作业学每节课的知识,不想好好学的课就以拿优为目的学习。 69 | 70 | A: 以下所有言论为拿优导向而非学习知识导向,且不适用于渣系课程[[5]](#sj-course): 71 | 72 | * 大作业:对拿优来说卷报告和做加分题必然不可或缺,代码可以多参考一些网上或者学长学姐已经实现好的,会节省很多时间并且意识到思维上的不足(但是不要抄hhh),报告用 Latex 写可以占页数更多,更快且好看(排版比较整洁和分散),多画一些流程图和参考一下学长学姐的也可以在同等花费时间获得更长的报告,没用的废话多 cv[[6]](#cv),有用的部分自己好好思考,认认真真做了分数一定不会差~ 73 | * 小作业:动辄十几页报告的小作业我个人感觉是大可不必,作业都是助教看,认真做了且结果正确基本都是给满。小作业不管是编程还是习题基本网上都能找到答案,做完之后对一下(还是不要抄hhh),把结果改正确,分数也基本就满了。 74 | * 平时分:靠谱的舍友 + 不太过分的逃课,签到必然不出大问题(斜眼笑) 75 | * 考试:考试应该是最能拉开差距也最能反应平时 / 应激学习水平的了,理想的状态是每节课都好好学,课后习题好好做,最后按照老师画的重点好好复习,如果做不到的话,那期末一定一定要好好复习,把课后习题做一遍(非常可能考原题),如果可以找一找学长学姐的考试题(非常非常可能考原题),还有时间做一做重点相关的考研题(某些科目很有可能考原题,如计组、计网),考试的时候即使有大题不会也多写一些字,尽人事听天命。个人认为复习重点应该是:平时作业 > 老师讲义 > 课本 > 其他材料。 76 | * 学长学姐 and 同学:在自己不够强又想拿优的时候学长学姐和同学的作用是可以非常大的,但需要脸皮够厚,具体操作就是要参考作业,找大佬带hhhh? 77 | 78 | ## Experience 79 | 80 | Q: 本科 3 年里有没有和其他同学合作过一些项目? 81 | 82 | A: 真正可以算上合作的大概就是挑战杯的比赛了,大概是所有项目合作中最愉快和分工明确的了,我负责的是文书整理、海报 ppt 制作(老画图人报告人了),另外两个学术 dl 负责技术,还有一个同学负责答辩、视频制作以及整体安排,还有另外几名项目的奠基人,做的大概是计算机视觉农业病虫害的识别。 83 | 84 | A: 因为我负责的不是技术位,感觉最主要的就是耐心和时间吧,整个过程中一遍遍修改文书海报有的时候真的会烦,但是看到团队每个成员都在努力做好自己的工作,于是耐着性子做过来,最终也收获很大。(当然咱是计算机的,学弟学妹以后还是要尽量提升代码能力学术能力,少干这种写文案的面子工程) 85 | 86 | Q: 当时是如何准备申请国创的?比如怎么找的指导老师?怎么确定的题目?后续怎么利用这份国创的? 87 | 88 | A: 国创做的不太好,就不细说前面这三个问题了hhh讲讲可以怎么利用国创,大概有几点: 89 | 90 | * 写论文:很多带国创的老师是有自己的科研课题的,如果觉得适合自己可以进到老师的实验室,跟着一起写写 paper,做的好了可以发个不错的一作,做的不好也能混个二三作撑简历的门面(我属于混的不好的); 91 | * 发专利:如果有成果的话写起来很快,但审核周期比较长; 92 | * 进创业谷:我们这一年创业谷入谷和出谷都会发钱,总额一万左右; 93 | * 梦想助力基金:我们这一年答辩答得好有 2w-6w 不等; 94 | * 用国创成果参加各类比赛混奖:大小挑战杯、互联网+、知行杯、早为杯.... 95 | 96 | A: 总之不要把国创只当成国创,多发展副业顺便结题才是正道。 97 | 98 | ## Research Interest 99 | 100 | Q: 本科阶段有过科研经历吗?具体是怎样的? 101 | 102 | A: 真实的科研经历其实只有一段,在刘儿兀老师实验室[[7]](#pai)做了些有关隐私保护的工作,大概就是看论文、写代码、写论文这么一个流程吧,并没有做很有创造性的工作所以感觉没资格回答这个问题T_T。 103 | 104 | (PS:当时是第五学期末的寒假,我想的是自己努努力、然后抱抱鞠大佬的大腿,为了保研更有材料去水一水这方面的经历。但由于本人极其不扎实的数学基础、拉跨的编程水平和基本为零的文献阅读能力,白天干活完全提不起劲。于是只能回到自己看书写代码的生活当中,错失抱鞠大佬大腿的机会) 105 | 106 | Q: 能否简单介绍一下未来的科研方向? 107 | 108 | A: 目前我们组主要有两个研究方向,一个是动作分析,另一个是可信 AI,我现在做的是动作分析这边的~欢迎学弟学妹咨询 hh 109 | 110 | ## About HK 111 | 112 | Q: 你是通过一件什么事或者哪个人注意到港中文的呢? 113 | 114 | A: 最初了解到是学长推荐的,其实很多人都不知道港中文有提前批的选项,默认把港中文和留学申请画上了等号,但其实港中文提前批是类似保研,甚至比保研流程[[8]](#baoyan)更为简单的,今年整个时间线: 115 | 116 | * 1 月初 —— 3 月 30 日 / 3 月 31 日 —— 5 月 28 日(分两轮):填写报名表格(只有填空,不需要大段描述),上传英文简历和成绩单; 117 | * 4 月 —— 6 月:委员会面试,20 分钟的线上英文面试,问我的问题是如何求一串不断变化的数组的中位数和平均数; 118 | * 5 月 —— 7 月(其实一直到第二年 4 月左右都有可能):联系老师,或者等老师来联系你(我主动联系的老师都没要我呜呜呜,最后是现在老板被别人鸽了之后找的我)。 119 | 120 | A: 然后又一个硬广,香港提前批的 PhD 有什么优势: 121 | 122 | * 对比国内: 123 | 124 | * 福利好,每年 20w 左右的工资,港中文大部分 PhD 除去学费(4w)每月会剩下 3-5k 左右,剩下的可能和国内研究生/博士的生活费一样了,如果很强申请到了 HKFPS(更高的奖学金)就是免学费 + 包住宿 + 30w /年; 125 | * 算海外 PhD,如果回国不管拿教职还是进企业都有优势; 126 | * 时间短,只有 4 年; 127 | * 课少且没有思政课程,大部分时间用于科研; 128 | * 教授平均水平 > 国内,教授平均带的学生数 < 国内。 129 | 130 | * 对比国外: 131 | 132 | * 相对美国安全一些,也离家近一些; 133 | * 申请更早,流程更简单,不要求托福雅思成绩。 134 | 135 | * 几所学校的计算机排名: 136 | 137 | QS2021:清华 13、北大 20、上交 29、港科 30、港中文 31、港大 43。 138 | 139 | 泰晤士:清华 12、北大 28、香港科技大学 31、上海交通大学 35、香港大学 39、浙江大学 40、香港中文大学 43。 140 | 141 | 虽然追溯到 2015 年港三所都是排前 20 的 T_T,在衰落了 142 | 143 | 当然也有一些劣势,比如政局不如内地稳定,本地人歧视,读出来之后既不在国内圈子也不在北美圈子,香港本地计算机产业较差等等等,但整体来说是对我最好的选择了(在内地我必然去不了好学校或者强组呜呜呜),欢迎有想法的学弟学妹联系我呀~ 144 | 145 | (PS: 但我觉得必然能去) 146 | 147 | ## Others 148 | 149 | Q: 如果给你一次大学重来的机会,你会在哪些地方做出不一样的抉择? 150 | 151 | A: 可能会在做国创的时候多花一些时间和精力好好做,做久一点出一些成果;可能会在寒暑假去大厂实习,体验一下工业界;可能会好好学英语,这样在未来选择就不会太过被动;可能会早一点加入飞盘社,在大一时间还多的时候多参加一些活动。前段时间朋友跟我说了一段话:“你看到的都是别人最优秀的地方,因此会希望自己当时也做了同样的选择,但其实每个人的精力都有限,也不可能放弃自己的即得利益去做其他的人选择”,所以做好当下情景下的最好选择其实已经足够了~ 152 | 153 | A: 感觉这四年中自己的一项不足就是有机会到来的时候因为觉得自己不行就不去尝试,但能力都是锻炼出来的,只要做事情其实就有收获(当然在精力有限的情况下肯定是优先自己更有把握且更重要的事情啦)。 154 | 155 | Q: 能否站在大四学生的角度,为大一、大二、大三的同学各说一句话呢? 156 | 157 | A: 大概如下: 158 | 159 | * 大一:大部分人的大一应该都是时间最多的了,所以完全有时间多尝试一些新的事物或者培养一项兴趣爱好。大一的绩点也很重要,千万不要相信高考完就轻松了的鬼话(所以学会混绩点的方法也很重要)。另外如果这个阶段有人愿意带你入门科研/竞赛,一定要抓住机会~ 160 | * 大二:这个阶段应该是比较舒服的了,基本熟悉了大学生活,有了一些基本的专业知识,没有下一步选择的压力,可以放手做一些自己感兴趣的事情~(这个阶段打算保研的同学可以把竞赛/论文加分搞定一下) 161 | * 大三:大三更多就是不要焦虑叭,只要一直努力最后总会有一个不错的结果的,更何况还有一年时间用来丰富个人背景和考虑各种选择~ 162 | 163 | Q: 平常喜欢什么运动?到大学来有没有培养出什么运动方面的新爱好? 164 | 165 | A: 硬广:飞盘,一项狗都不玩我们玩的运动;同济大学飞盘社,一个以快乐为主导却有高强度健身功能的社团;同济大学飞盘队,一支拥有上海高校飞盘队伍第一称号和极高包容能力的竞技队伍。 166 | 167 | A: 大一大二断断续续有一些不成体系的运动,大三因为身边朋友的推荐正式加入了飞盘社,之前也非常浅显的接触过各种运动,飞盘的运动精神(男女共同参与、无肢体接触、自行商讨是否犯规等等)、运动量(跟足球差不多甚至更大)、同济飞盘的氛围(轻松愉快,愿意带新人,活动大家都很积极)非常适合我,所以越来越多的参与到了这项运动中。 168 | 169 | A: 个人认为运动对学习和个人成长都是正面的作用,在运动上花费的时间可以转化为学习的效率,在运动上收获的快乐也可以促进内心的平衡,而且还可以认识一群有趣的人~ 170 | 171 | ## Reference 172 | 173 |
174 | 175 | * [1] 18 级数理强化班:简称 “数强”,前一年半是计算机+数学课程,后两年半回到计算机系,可以在 “计算机科学与技术” 与 “信息安全” 两个方向中自选分流。和某些大学的尖子班 / 创新实验班不同,由于我校曾经的数强在第三学期末会转回计算机系,因此最后计算绩点时仍算在整个计算机系下。 176 | 177 |
178 | 179 | * [2] RA:全称 Research Assistant,详见 https://en.wikipedia.org/wiki/Research_assistant 。 180 | 181 |
182 | 183 | * [3] ACM:详情可见 [百度百科](https://baike.baidu.com/item/ACM国际大学生程序设计竞赛/3652262)。 184 | 185 |
186 | 187 | * [4] CTF:详情可见 [百度百科](https://baike.baidu.com/item/CTF/9548546),同时也非常欢迎加入 “同济信安爱好者社团”。 188 | 189 |
190 | 191 | * [5] 渣系课程:特指电院名师 Larry Shen 手下的专业课及其课程设计。 192 | 193 |
194 | 195 | * [6] cv:此指 ctrl-c + ctrl-v,并非计算机视觉。 196 | 197 |
198 | 199 | * [7] 刘儿兀老师实验室:指 PAI 研究中心,P 代表定位导航实验室 PNL、A 代表人工智能与区块链实验室 AIBI、I 代表物联网与无线通信实验室 IoT-NG。 200 | 201 |
202 | 203 | * [8] 保研流程:这里推荐三个仓库,有关 [保研流程](https://github.com/richardodliu/CS-BAOYAN)、[夏令营](https://github.com/hit-thusz-RookieCJ/CSSummerCamp2021) 和 [预推免](https://github.com/hit-thusz-RookieCJ/CSYuTuiMian2021)。 204 | 205 | ## Correspondence 206 | 207 | * Email:[juxuan.27@gmail.com](mailto:juxuan.27@gmail.com) 208 | -------------------------------------------------------------------------------- /content/posts/2021/post-skyleaworlder.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "2021 专访 (IV) · skyleaworlder" 3 | date: 2021-12-04T22:44:21+08:00 4 | description: "先前我们采访了年级中的三位计科名宿。而今天我们邀请到了一位普通人,大学前零基础的他在本科前三年也没有竞赛、科研、学工背景,你难道不好奇他是怎么活下来的吗?" 5 | --- 6 | 7 | ## 与那个普通人的邂逅 8 | 9 | 还记得是 2021 年 10 月 1 日,“他” 在我印象中久违地回了学校。当我向 “他” 阐述 “TJCS-F2F” 的构思后,“他” 立刻明白了我的意思。 10 | 11 | ```chinese 12 | - “那么,我能采访你吗?” 13 | - “可以。” 14 | - “你什么时间方便呢?” 15 | - “今晚。” 16 | - “那……在什么地方见面呢……” 17 | - “梦里。” 18 | ``` 19 | 20 | 就这样,“他” 和我约好在当天晚上见面。但我等了很久,直到第二天的凌晨 4 点 “他” 才露面。 21 | 22 | ```chinese 23 | - “你迟到了。” 24 | - “非常抱歉,今天难得回一趟学校,和几位同学们玩牌玩到了 1 点多。” 25 | - “好吧,我首先做几点要求:” 26 | “第一,采访以文字形式呈现给他人。因此,采访过程中我会录音,以便后续转成文字。” 27 | “第二,访谈稿撰写完成后,我会交予你审查,你可以提出修改意见,我会酌情修改。” 28 | “第三,采访过程当中不许有一点假话。” 29 | “还希望你能理解我的这三点要求。” 30 | - “没问题。” 31 | ``` 32 | 33 | 我与 “他” 并非第一次于梦中相遇,但此次不同以往——“TJCS-F2F” 是我于今年 “劳动节” 就开始筹划的活动,旨在向有这方面需要的同学提供 “历史” 上的经验。 起初,我邀请了年级中部分 “无人不知、无人不晓” 的同学作为访谈嘉宾。但后续有同学反馈道:“这样的访谈没有参考价值,描述的终究是 ‘别人的故事’,而非我自己的故事。” 于是我打算采访这样一位普通人。 34 | 35 | ```chinese 36 | - “录音开始了,在采访之初,还希望你进行一个简短的自我介绍。” 37 | - “好的。” 38 | “大家好,我叫 skyleaworlder,来自我校电子与信息工程学院信息安全专业。 39 | 在过去三年中,我学习还算刻苦认真,分别取得了……” 40 | ``` 41 | 42 | ## 空白画布上的一颗墨点 43 | 44 | 看着 `skyleaworlder` 一边自我介绍,一边在我面前挥动着他的手臂,我不免觉得有些滑稽。这是他在今年 4 月份花了一个下午的时间写出来的。原文是英文,没有华丽的辞藻,也没有复杂的句式,只是在平淡地叙述着这三年来在他眼里足以称道的所作所为。 45 | 46 | ```chinese 47 | - “我听到你的自我介绍中,只是在说本科三年以来的事情。那么你在初高中接触过计算机吗?” 48 | ``` 49 | 50 | 这个问题的答案是 `False`。`skyleaworlder` 在步入大学校门前的半个月才拿到他这辈子第一台笔记本电脑。正如他高中班主任所说的那样:“竞赛是一把双刃剑。很多学校搞不起来竞赛,拿不了成绩,但是学生还投入了大量的时间,最后只能害了学生。” 也因此,他所在的高中并不看重竞赛,高中酷爱刷题的 `skyleaworlder` 也没有接触过编程。但到了大学,`skyleaworlder` 开始后悔高中时的选择。 51 | 52 | ```chinese 53 | - “初高中时的你那么喜欢刷题,你如果当时参加 OI,会不会大杀四方呢?” 54 | - “哈哈哈哈,那还真说不定哦。” 55 | ``` 56 | 57 | `skyleaworlder` 先前没有一点点基础,他家中也没有从事程序员工作的亲属,他的家人也不认识什么程序员。插一句题外话,据我了解,他现在还是家族这一系中学历最高的(指高中学历)。我开始好奇 `skyleaworlder` 大一的经历,因为我好奇一个零基础零资源的学生如何看待我校计算机类的大一。 58 | 59 | ```chinese 60 | - “让我们从大一入校开始谈。” 61 | - “好的。” 62 | - “那我们就说说 ‘计算机科学导论’ 这门课。” 63 | - “……这就很难说了。” 64 | ``` 65 | 66 | 我院的培养方案 3 年一大修,2018 级正是 2016-2018 的最后一年。相比于 2019 级的新生院、学堂班,2018 级名义上虽同为 “大类”,但这个 “类” 却要小上很多。众所周知,2019 级的济勤学堂是原本 “电子与信息工程学院 + 软件学院 + 测绘学院 + 物理学院.光电专业” 的统合体。而 2018 级的 “计算机类” 等价于 “计算机科学与技术系”,还只是 “计算机科学与技术 + 信息安全” 两个方向的总称。因此,2018 级一进校就需要学习《计算机科学导论》这门课。 67 | 68 | `skyleaworlder` 所在的班级总共分为 9 个小组,每个小组大约 5~7 个人。这门课一开始,任课教师向全班发放了一张问卷。据 `skyleaworlder` 所述,问题其实很简单,比如 “了解二进制吗”、“之前写过程序吗,规模最庞大的写了多少行”、“会几门编程语言”、“会使用什么软件” 之类的。 69 | 70 | ```chinese 71 | - “我听说你莫名其妙当上了第 2 组的小组长。” 72 | - “哎,别提了,我都不知道为什么。” 73 | “当时我和我室友坐在一起,他照着我写的填自己的问卷。” 74 | - “那为什么不是他当上小组长?” 75 | - “不知道啊,他还有一项填的比我的 ‘positive’。 76 | 有一个问题是 ‘会使用哪些软件’,我填的 ‘会一点 excel / ppt’,他填的 ‘能够熟练使用 excel / ppt’。” 77 | - “哈哈哈哈哈哈哈。” 78 | ``` 79 | 80 | 与 `skyleaworlder` 同为小组长的,有对计算机具备一定了解的爱好者、有高中便具备一定前端开发能力的同学、有因为 `OI` 而在自主招生中降分的同学、也有在大学已经有过一年学习经验的降转生、还有课代表……这么一看,老师仿佛在捉弄我们的 `skyleaworlder`。那个时候,`skyleaworlder` 还是个很要面子的人,与这么多在各方面有着一定基础的同学竞争,压力不可谓不大。 81 | 82 | “计算机科学导论” 总共有 5 个大作业,其中第 2 个是 “专题报告”。全班 9 个组需要从老师给定的 9 个方向中抽取自己上台介绍的专业领域。不知道是幸运还是不幸,连线性代数都一无所知的 `skyleaworlder` 抽到了 “人工智能”。 83 | 84 | ```chinese 85 | - “那你岂不是狠狠地卷了一波?” 86 | - “还行吧,这个没怎么卷。当时介绍的就是最简单的 CNN,本来想用搭一个 CNN 做点力所能及的事情,但是还要做高程作业,于是就搁置了。 87 | 当然,了解一个完全陌生的事物总是困难的。这个时候就需要不断地搜集信息,解决一个个小问题。 88 | 以让我介绍 CNN 为例,那我就先去看下科普视频、补补线代、学一学下 Python 之类的。” 89 | “其实我觉得我高数还是蛮卷的。高数上对应的那部分吉米多维奇我刷了一遍,期末的时候也把往年题刷穿了,思修和近纲都是往死里复习。” 90 | 但出分后,觉得自己成绩并不理想。” 91 | - “你想拿多少?” 92 | - “我觉得怎么也得 4.7 往上吧,但我并没有拿到那么高的绩点。所以后面就没卷了。” 93 | - “哈哈哈,真没卷了?” 94 | - “好吧,还是卷了一小下,但分流后我肯定没卷了。” 95 | ``` 96 | 97 | 5 个大作业过后,零基础的 `skyleaworlder` 所在的小组却是 9 个组中均分最高的。我倒吸了一口凉气,卷王形态的 `skyleaworlder` 竟恐怖如斯? 98 | 99 | ## 夜里会为自己的抉择失眠吗 100 | 101 | 翻着我手中关于对面这位受访者的信息,我在他 “大一下” 的这段经历上画了个圈,`skyleaworlder` 在那个寒假,于一片混沌中做出了一个选择。 102 | 103 | ```chinese 104 | - “我有些好奇,为什么你不在第二学期继续选 Larry Shen 的高程呢?” 105 | - “这个问题很刁钻,我也很不好回答,但我会尽最大可能回答好这个问题。” 106 | ``` 107 | 108 | `skyleaworlder` 眼睛瞥向左上角,尽力回忆着过去发生的事情。那还是将近三年前,2019 年的 1 月 12 日,家人为了迎接他从上海返回,专门到楼下的一家小餐馆和他一起吃晚饭。饭桌上,他迫不及待地打开电脑,向家里人展示自己这一学期的学习成果——汉诺塔和另一个小游戏。很可惜的是,他的家人并不理解他在做什么,并问:“这学期还有其他作品吗?” 109 | 110 | 那一刻,`skyleaworlder` 非常落寞。那明明是自己肝了很久的,但在家人眼里却显得十分单薄。就这样,`skyleaworlder` 跳出了自己围成的圈子,使用另一个视角审视自己的第一学期。他开始反思自己一个学期到底学了些什么。诚然,他在 `Larry Shen` 的悉心指导下从无到有打下了一些基础,但他希望自己能成长得更迅速。 111 | 112 | 在那之前,也就是第一学期末,`Larry Shen` 按照惯例发放了一张问卷,其中有这样一个问题:“你有哪些改进意见?” 而 `skyleaworlder` 的回答是:“群里大佬太多,有些非常好的问题却因群佬太能水,所以并没有受到重视。如果能搭建一个论坛,把问题都放在上面,这样老师也方便了,学生也轻松了。” 不知道是不是还有其他人提出了这个意见,`Larry Shen` 在寒假真的布置了这样一项作业——“写个论坛”。这个作业的布置令连 C 语言都用不利索的 `skyleaworlder` 感到自己太过渺小。于是他抱住了 `Eol` 的大腿,并与另一位同学 `Vace` 一起在组中负责论坛的后端。至于三人计划用这个项目申国 / 上创这件事就是后话了。 113 | 114 | 以上种种,让他花一整个寒假的时间做了这么一个决定。而这也是令 `skyleaworlder` 感到后悔的诸多选择之一。 115 | 116 | ```chinese 117 | - “那效果怎么样?” 118 | - “事实证明我并不适合自学。我确实看了一些入门级别的书, 119 | 比如介绍数据库、分布式系统、前后端开发、软工、计网这些方面的,也学了一些常用的编程语言,但都是雁过无痕。” 120 | ``` 121 | 122 | 可之后,`skyleaworlder` 非但不思悔改,还选择一条路走到黑。如果说放弃 `Larry Shen` 干货满满的高程勉强算是一件对错难以评述的事,那么 `skyleaworlder` 那段 “前端开发经历” 应该他最为 “后悔” 的了。由于他在大一的均绩排名 9%(未计算平转),在班主任的 “平转恐吓” 下,他一时竟感到自己保研无望。于是在第三学期中,他认为是时候考虑本科就业的事情了。 123 | 124 | ```chinese 125 | - “如何评价前端开发?” 126 | - “前端太难了。我从今往后再也不碰前端。” 127 | ``` 128 | 129 | `skyleaworlder` 在第三学期进了本院的一个项目组。一开始他什么都不会,并且也无法参与其中(连仓库权限都没有),只能看着学长们交流项目进度。一周无休的同时,每周日还会在组会中空耗时间,这着实令人焦虑,`skyleaworlder` 在这之中甚至有了一丝休学的想法。但紧跟着的大作业和考试让他连休学都来不及考虑。 130 | 131 | 到了寒假,项目组老师突然给 `skyleaworlder` 打了个电话,说是有了个新项目,要不要试试前端。当时的 `skyleaworlder` 还是个热衷于学习新事物的新青年,前端什么的直接答应了下来。从那时开始,之后将近一年的时间,他都投入到了这个项目(具体来说是 2 月份到 12 月初)。在项目中,他表现得很烂。 132 | 133 | ```chinese 134 | - “我相信,每个人一开始都是想做好一个项目的。” 135 | “但是慢慢地,会感到无能为力。” 136 | - “为什么?” 137 | - “原因有很多。” 138 | “首先是合作,我不是说与我合作的学长怎样,他们都是水平很高的人。 139 | 但我这个人在表达方面有些缺陷,这让我很难快速响应一些问题。” 140 | “然后就是业务本身,我觉得很繁琐,并且没什么意思,就是纯搬砖。” 141 | “最后是整个前端,我那时对它的设计方法甚至说是编程者应该具备的基本设计思想都是一无所知的。这让我在后期改一个地方就要花进去几个小时。” 142 | “最根本的还是我个人水平问题。我看待问题的方式比较任性、比较感性,大多数时刻甚至不像一个计算机专业的学生。 143 | 真的要拥有一些基本素养,抽象、函数拆解、OOP 下的设计模式、代码规范、开发流程、工具…… 144 | 我真情建议找个好心人带自己。” 145 | ``` 146 | 147 | 我听了 `skyleaworlder` 本人叙述他 2019 年的经历,只能哈哈大笑。 148 | 149 | ## 那天清晨落叶满地 150 | 151 | 与先前三位受访者不同,`skyleaworlder` 来自信安专业。18 级还是第三学期末专业分流,而他那时也面临着艰难的抉择。 152 | 153 | 为何艰难? 154 | 155 | ```chinese 156 | - “我也不知道我喜欢什么,我也不知道我讨厌什么。” 157 | “我对这两个事物的了解太少了,但我却要决定自己走向哪边,我太无奈了。” 158 | “当时我问了很多人。我的家人,我爸爸我奶奶,后面我爸还问了他的朋友; 159 | 我的高中同学们,当时我大概问了 10 个左右,就是问他们的意见和想法; 160 | 还有大学同学,我一直对他们说我很犹豫,我不知道如何选择,他们这时也会说出自己的观点。” 161 | “可能你无法相信,上面提到的所有人都给出了一致的答案——去计科。 162 | 给出的原因很简单,计科牌子响,大家都在计科。” 163 | - “那你还问他们干什么?” 164 | - “在面临重要抉择时,其他人的话我始终只是当作一种参考。最后做决断的还是我自己。” 165 | “但这种参考是必要的。” 166 | ``` 167 | 168 | 包括我在内,也只是简单地知道他跑到了信安,但却不知内情。专业分流诚然让他拥有了一个好看的名次,但从结果来看,`skyleaworlder` 即使在计科也还是能拿到推免资格。况且平心而论,放眼未来数十年人生,他的未来真的会比留在计科来得好吗?这将是一个无法解开的谜。 169 | 170 | ```chinese 171 | - “所以为什么选择信安?” 172 | - “主要原因有三点。” 173 | “首先是我对信安有向往之情。我所就读的高中,每周日都会播放《新闻周刊》。 174 | 高二的时候,‘永恒之蓝’ 通过这个 ‘窗口’ 进入了我的视线,那时的我觉得信息安全是件有趣的事。” 175 | “其次是 Eol 打算去信安。他在我眼里就是神,我自然追随神的脚步。” 176 | “最后是绩点因素。但这个原因的分量很轻。 177 | 我说 ‘很轻’ 你肯定不信。可你想想 ‘我前面有多少人去信安’ 这件事根本没法估量。 178 | 大家只是知道往届信安绩点比较低,但是谁又知道 18 级会不会反常呢? 179 | 虽然但是,我觉得这并不能是我最后做抉择的一个理由,我在这里加上这一点只是为了让你写访谈录的时候不那么容易受人质疑。” 180 | “欸,话说现在是真 · 大类招生了,信安专业的分数在未来应该更高了,毕竟都是算在 ‘计算机科学与技术系’ 下的。我很伤心。” 181 | ``` 182 | 183 | 虽然这么解释了,但我对 `skyleaworlder` 的话仍持怀疑态度。依他所说,既然是因为喜欢信安而做出的选择,那为何后面匆匆放弃了这一领域的探索呢?对此,他向我分享了 `Eol` 的一个看法:“现代信息安全是建立在工程上的学科。” `skyleaworlder` 自认为没有足够强大的工程能力——做不到熟背常见语言 / 框架的 `CHANGELOG`,在实践时很少考虑安全要素,缺乏恒心处理 `dirty work` 和学习某些工具用法等等。总的来说,他的回答是 “我不够聪明,学不会信安。我称不上一个合格的信息安全专业的学生。” 184 | 185 | ```chinese 186 | - “相比于我,我了解到很多不是信安,甚至不是电院的同学对信息安全有相当的兴趣。” 187 | “每到那时,我便有一种 ‘在其位不司其职’ 的忧伤,感觉愧对自己专业的名字。” 188 | “我觉得我更适合去 ‘服务端软件开发专业’,但很可惜咱们学校没这个专业。” 189 | ``` 190 | 191 | 对此我也司空见惯,我还算比较熟悉 `skyleaworlder`,他总是热衷于错误地估计自己。虽然他在一霎那便清楚了自己并不适合,可仍旧将更换方向的时间拖到了大三寒假。 192 | 193 | ```chinese 194 | - “是啊,我第五学期还在联系复旦学密码学的学长。” 195 | - “但你后面换了想法,又觉得自己不是 ‘信安’ 人了,这个契机是什么?” 196 | ``` 197 | 198 | `skyleaworlder` 打开了电脑,点开了 `GitHub` 上某仓库的 `Pull Request` 界面,指着其中的一条 `PR` 说道:“这位 `Contributor` 是复旦软工实验室的学长(`kagaya85`),当天晚上我把他的 `commit` 过了一遍,发现了他正在研究的方向,我觉得很有趣,于是联系了他。我接着问他之后有没有深入联系,他摇了摇头。 199 | 200 | ```chinese 201 | - “再之后就是寒假了,我在另一位学长(stream2000)的博客中看到了他大四一年的经历,那篇回忆录点燃了我学习的欲望。 202 | ``` 203 | 204 | `skyleaworlder` 并不擅长记忆遥远的事情。很明显,在谈到大一、大二时的一些事时,他总是要花很长时间回忆。随着时间逐渐接近当下,他的话也多了起来。 205 | 206 | 在这件事之后,他略略读了几本书,但也只是浅尝辄止,没有什么深度和见识。而这自然是因为 `skyleaworlder` 本身基础不好,知识面比较窄。人们常说 “好书是常读常新”,一本好书通常饱含着作者对某一事物的思考,而这只有当读者有过相似经历后,才能被读者体会。再看看我面前这位受访者,他并没有深厚的基础,读完大三了,在程序设计、编程水平上还不如一些初高中生。当然,他对此也并不忌讳,在参访中更是多次嘲讽自己的水平又被 “哪位哪位” 完爆。他是这么解释的: 207 | 208 | ```chinese 209 | - “你也是咱们学院计算机的,学了三年应该有些体会吧?” 210 | - “嗯。” 211 | - “如果让你以现在的水平回到大一,你的未来会怎么样?我想是一片光明的。 212 | 很多人之所以直上青云,是因为他的起点比较高,亦或是他在最初狠狠地 ‘卷’ 了一大波,导致他的水平高于同侪,此后滚了雪球。‘名校、奖金、lab,吃香喝辣都是他们的’。” 213 | “这里说的 ‘起点’ 并不是指学科基础。降转的同学一般表现得更好,我猜这与他们比我们多待了一年有关。 214 | 当然了,他们有心思做出 ‘降转’ 这个决策,某种程度上已经是拥有更广阔视野的表现了。” 215 | “我是零基础,学了半年,卷了一年,混了一年半。日子是这么过的,所以我并不觉得 ‘自己菜’ 这件事需要遮遮掩掩。 216 | 我想我是一个能接纳自己失败和不足的人。这种心态让我能正视自己与他人的差异,而不是较真。” 217 | - “不如说是一个能暴露自己不足的人。” 218 | ``` 219 | 220 | 我问他:如果你没有选择信安,可能不会混那个 “一年半”,你后悔吗?他只是说我提问题像 `CNN`。看来,这个问题并非没有答案,只是 `skyleaworder` 并不配说出那份答案。 221 | 222 | ## 如果人类的能力真的可以量化 223 | 224 | 在谈话中我了解到,他一直都很自信,甚至自信到用 “普信男” 来形容自己。但自信如 `skyleaworlder` 也有怀疑人生的时候。第六学期中,和其他意欲保外的同学一样,他也投了几家夏令营,比如交大、中科大、南大、人大、哈工大、华师等等,但这些连初筛都没过。七月份他参加的所有夏令营也都没有拿到令他满意的 `offer`,这让 `skyleaworlder` 开始重新审视自己:“我一直尽可能低估自己的水平,但现实告诉我,我的水平比我所能低估的下界还要低得多。” 225 | 226 | ```chinese 227 | - “你能接受夏令营的失败吗?” 228 | - “很明显不能。这并不是我面试水平不够。 229 | 相反,如果我在那个阶段能进入某些学校的面试,我相信我能有些表现的。 230 | 可惜的是不少学校并没有给我机会。” 231 | - “那么,你觉得你是为什么没有过那些学校的初筛?” 232 | - “这个问题很好回答。我没奖,也没有科研经历,并且绩点也不高。 233 | 相比于那些有奖、有科研,并且绩点排名位于前列的同学,我确乎没什么能入营的资格。我心服口服。” 234 | “还有一点就是我投的太少了,而且投了很多 ‘卡xx’ 的学校。 235 | 相反,有人投了 20 多处,并且每一家都细细研究过其录取历史,还处处套瓷老师。 236 | 我相比之下,显得一点求生欲都没有。” 237 | - “在此之后,你是如何调整的呢?” 238 | - “找了份实习。” 239 | - “???” 240 | ``` 241 | 242 | 全国保研群中有过一小段对 “企业面试” 与 “推免面试” 的比较,参与讨论的学生一致认为 “企业面试” 要难于 “推免面试”。我想,其原因不外乎 “时间长” 这一点。对于推免面试,不同学校采用的形式各不相同,但时间都差不多——15 分钟 \~ 20 分钟(如果需要讲 `PPT`,可能整体时长会加到 25 \~ 30 分钟)。就在这短暂的时间中,多少学生的命运被决定了。 243 | 244 | ```chinese 245 | - “实习意味着没有那么多时间准备九推,这对一个保外人来说,无异于等死。你当时是怎么想的?” 246 | - “没错,我就是摆了。热切保外的不会选择实习,除非他已经拿到 offer。 247 | 我打心里没想着九推上岸,特别是咱们学院一位很好的老师与我达成双选之后。” 248 | - “但你……” 249 | - “时间快到了,咱们就不继续这个话题了吧。” 250 | ``` 251 | 252 | 他虽然不说,但我也有所了解,`skyleaworlder` 报名了一些九推,这一次他几乎全部入营。浙大、南大、软件所、华师都给了他机会,但的确如他所说,他已经摆了。浙大排在 `waiting list 104`,南大连候补都没进,软件所 3 个人选 1 个都没他,华师则是他直接鸽了面试。但九推的结果却比精心准备的夏令营好太多——`waiting list 104` 也等到了招生办的电话,软件所也被顺利鸽穿。三四个月的准备,九门专业课的复习,最后还不如 9 月 28 号晚上的补录。 253 | 254 | ```chinese 255 | - “有时就会感叹命运无常。” 256 | - “哦?为什么。” 257 | - “我其实不止一次向软件所的老师表示我非常想去,但她们不为所动。 258 | 她们难道就想不明白吗,我前面的人是不会去的。她们肯定明白,只是想赌。 259 | 老师想要更好的学生,学生想找更好的老师。 260 | 于是全天下保研人合伙打造了一个 ‘只有最强的学生与综合评分最高的老师不会受伤的世界’。 261 | 所有老师都想赌,所有学生也都想赌。于是 9 月 28 号那天鸽子满天飞。” 262 | “如果大家都坦诚一点,事情远没有那么复杂。只是大家都太贪。 263 | 而贪起来就会有一种情况发生:大家想不清自己要什么。” 264 | “所以要学硕还是专硕?能否接受直博?选 AI 还是其他?只认计科还是其他也可? 265 | 这些问题如果在夏令营之前想好,那会在无形中带来巨大的优势。” 266 | ``` 267 | 268 | ```chinese 269 | - “其实我是一个很不喜欢提保研的人,你发现了吗?” 270 | - “有些,这让我很难办。skyleaworlder,这是为什么?” 271 | - “高中的时候,我们 99% 的人只有一条路,那就是高考。但路还有很多条,有条件的可以出国,有资源的可以参与竞赛,等等等等。 272 | 大学则更不必说,并没有一个用来考量本科生 ‘成功’ 与否的指标。” 273 | “该保研的人保了,那他就成功了;不该保研的人保了,那他就失败了。很难说一个人怎样算是 ‘成功’ 的。” 274 | - “我觉得国奖的考核就什么都考虑到了,比较均衡,拿国奖就算成功。” 275 | - “国奖的评价指标又能说明什么问题呢?本科生真的必须在排名、科研、竞赛、学工、社团、志服等一系列方面都有所涉猎才好吗? 276 | 如果心力不够,在繁杂的生活下,人是很难有大的进步的。” 277 | “而你在采访中用一系列 tag 刻画我,这对撰稿有利,但实际上那些 tag 是无用的。 278 | 撇开你眼中强加在别人身上的光环,他还剩下什么?他剩下的那些东西才是更应该被关注的。” 279 | - “那感觉也没什么能问的。” 280 | - “确实,我非常认同。” 281 | ``` 282 | 283 | 到这里,我终于懂了。在发现自己不但卷不过,而且卷了也没用,卷了也还是什么都不会之后,见识到了太多成功人士,同时觉察到自己实力上限的 `skyleaworlder` 倍感挫折。“绩点无用论”、“摆烂躺平学” 和 “岁月静好” 构成了 `skyleaworlder` 的 “精神内核”。所以各位读者还是注意谨守本心,这只是 `skyleaworlder` 的一家之言,并不一定适合 “全年龄段” 观看。是非对错、可取与否需要根据个人情况具体分析。 284 | 285 | ## TJ-CSCCG 286 | 287 | 看到这个小标题,可能会有同学感到疑惑,因为并没有很多人关注 `TJ-CSCCG`。但如果我说到 `Course` / `Assignment` 这两个双周浏览平均破千的仓库,有反应的人或许多一些。`TJ-CSCCG` 是 `GitHub` 上目前唯一一个以我校计科&信安专业为主要受众的 `organization`。而今天受访的 `skyleaworlder` 恰巧是 `TJ-CSCCG` 目前的 `Owner`。这里也是受 `skyleaworlder` 之托打个广告。 288 | 289 | 我问他究竟是什么让他 `New an Organization`,他是这么回答的: 290 | 291 | ```chinese 292 | - “与其说 TJ-CSCCG 的动机,不如先讲下 TJCS-Course 的动机。” 293 | “我的第四学期一直在家上网课。那一学期正好学计组,做计组作业自然是要登 `mips246` 的。 294 | 可我却怎么都访问不了,折腾了好几天才在一个寂静的夜晚完成了资料的下载,当时我觉得太难受了。 295 | 所以我当时的想法很简单——如果有一个稳定的平台可以提供这方面资料的下载,那该多好。 296 | 这大概是其中一个原因。” 297 | 298 | “我对专业里面这么多课一无所知,这种无知令我耗费了大量无谓的时间。 299 | 如果有人能够让我在初期就有一个整体的认识,那我或许可以用节省下了的时间学更重要的东西。 300 | 这大概是另外一个原因。” 301 | 302 | “还有一种原因便是模仿,我看 PKU / SJTU / ZJU 都有这种课程资源共享仓库。 303 | 那我身为我校学生,这种体现 ‘同济精神’ 的事没人做那就我来做吧。 304 | 而且我还要做得更大,我希望 TJ-CSCCG 能囊括一个计科&信安学生需要的所有信息, 305 | 这也就是我 New an Organization,并且 Transfer Ownership,接着创建 Assignment / Interview / F2F 这些仓库的动机。” 306 | “当然还有一些胎死腹中了,比如 Book / Memorabilia / Relay / Survive / Teacher 等等。” 307 | ``` 308 | 309 | 在这之后,我又问了他一些对于 `TJCS-F2F` 的期望,他说: 310 | 311 | ```chinese 312 | - “咱们是计算机科学与技术系。但由于各种原因,困扰大家的八成不是 ‘如何成为计算机科学家’。 313 | 再由于各种原因,比如 Owner 见识短浅、人力不足、考虑到受众群体的特征等等, 314 | TJ-CSCCG 没有涵盖一些话题,TJCS-F2F 也是一样。” 315 | “可能有人会说了,也就科研和计算机科学有关系,就业打工什么的根本没有啊,更别提学生会了。你一个以 ‘TJCS’ 冠名的仓库,怎么能放这种东西? 316 | 但我要说的是,正如不是所有人都有资质成为讲师,也不是所有人都有资质成为计算机科学家。 317 | 我希望 TJCS-F2F 能够用尽可能少的访谈录,涵盖尽可能多的方面, 318 | 关心咱们这个年龄段、咱们这个实力该关心的、有能力关心的问题。” 319 | “但是吧,有些话不方便直接说出来。而且受限于篇幅,我们不可能给每个人充足的时间表达自己的思想。 320 | 如果各位在阅读时发现了一大段格格不入、十分古怪的文字,那一定在字里行间埋了一些观点。” 321 | ``` 322 | 323 | 但很明显,如今的 `TJ-CSCCG` 并不完美,甚至称不上完善。无论是 `Course` 还是 `Assignment`,都是毁誉参半。于是我们二人展开了一场快问快答: 324 | 325 | ```chinese 326 | - “为什么我觉得 Course 只是看似全面,但实际没用?” 327 | - “因为绝大部分 README 出自我一人之手,可我能力不够,很难提供有效建议。” 328 | - “为什么大多是你一个人写的,你不欢迎其他 Contributors 吗?” 329 | - “我很欢迎,可能是仓库太大了,clone 下来很麻烦。 330 | GitHub 是软件托管平台,搞这种东西是投机行为,可能也有人这样看我,耻与我为伍。” 331 | - “为什么 Course 要提供对老师的评价,你知道这可能导致选课出现尴尬情况吗?” 332 | - “无论是 Course 还是我校的 ‘评教’,它们最初的意义都是令自己失去意义。” 333 | - “为什么要创建 Assignment,你难道不知道这会助长不良风气吗?” 334 | - “工具没有好坏,只是遵从使用者的意志。” 335 | - “共享资源丰富,岂不会带来更恐怖更严重的内卷?” 336 | - “见仁见智。” 337 | - “你是否动机不纯,从未想过造福谁,只是一心想着出名?” 338 | - “确实动机不纯,当时还为了学习 GitHub 使用; 339 | 确实从未想过造福谁,我没那么伟大,也没那么高高在上; 340 | 确实想过出名,受到认可是我一直追求的目标,但我将用我的代码而不是这个。” 341 | - “你不觉得这是一件没有意义且浪费时间的事吗?” 342 | - “还好。多少有点作用。” 343 | - “毕业之后,TJ-CSCCG 将何去何从?” 344 | - “希望我能顺利毕业。有人接盘最好,没人的话也不可惜。 345 | 至少未来人在 GitHub 上搜索时会知道它曾经存在,而不是像我当时一样失望。” 346 | - “觉得现在的 TJ-CSCCG 有哪些缺陷?” 347 | - “内容上,竞赛、科研两块是非常欠缺的,因为我对这些完全不了解。 348 | 组织上,缺少一个能够持续为之付出、不求回报的团队。这个很困难,专业性质决定了这个专业的人都认为提升自我是最重要的。而且我也认为自己不是一个能够全身心为之付出的 leader。 349 | 情感上,我太爹了,很多文字我自己不敢读第二次。” 350 | - “哈哈哈哈。” 351 | ``` 352 | 353 | ## 恒常问题 354 | 355 | ```chinese 356 | - “好啦好啦,缓和一下刚才针锋相对的气氛,问几个轻松愉快的问题。” 357 | - “好的,请。” 358 | - “如何评价自己的这三年本科经历?” 359 | - “我并不满意。我只是学会了应用一些工具。坦白说,我还没有入门计算机科学,现在正在努力寻找入门计算机科学和软件工程的道路。” 360 | “如何写出更好的程序、如何构造一个简单的系统、如何与他人更好地合作,我都还没有能力给出一个简单朴素的答案。” 361 | 362 | - “既然有些遗憾,那么如果给你一次大学重来的机会,你会在哪些地方做出不一样的抉择?” 363 | - “我不会说我要放弃什么,不会说我在某时某地该选择哪个。 364 | 相反,我认为我还需要加强时间管理,同一时间段揽很多项目。时间总是会有的。” 365 | “我会学习客户端开发,我会学习 SystemVerilog, 366 | 我会学习 CV 和 NLP,我会学习更多的现代化工具, 367 | 我会联系老师进实验室做本科生科研,我会好好打竞赛…… 368 | 人的欲望是无穷无尽的,那就要利用这种无穷无尽。” 369 | “之前接受采访的同学都说没什么后悔的,我就有很多后悔的。 370 | 如果可以,我不会满足于重来一次,我会一次又一次重来,我会体验所有的生活,直到天空坠落、大地崩陷。” 371 | 372 | - “能否站在大四学生的角度,为大一、大二、大三的同学各说一句话呢?” 373 | - “你这个问题问得不好,刚才我那些话都可以作为这个问题的答案。” 374 | “对大一的话,应该还是会有相当一部分同学和我一样,在大学前没接触过计算机。 375 | 要是像我这种零基础的话,多读书多求人,多看那些大佬聊天。别觉得他们很装,他们愿意在群里聊天就是很亲民的表现了233,我这种凡人从中可以学会不少东西。 376 | 对于大佬,我没能力提建议。” 377 | “大二了应该要明确自己的定位,看清楚本科结束之后自己究竟何去何从,早做打算。 378 | 但对于信安的同学来说,这一年应该是格外痛苦的。有很多的作业与考试,令自己无暇探索自我。如果可能的话,多学一点。 379 | 对于大佬,我觉得也该想想过去这一年到底有没有什么长进,有没有什么拿得出手的作品和工作。” 380 | “大三应该要好好努力,我系操作系统、编译原理、数据库、计算机网络、体系结构、软件工程都排在大三,这些课非常重要,但是我不建议局限于课件和作业。我在这里打一个地图炮(当然这个地图炮也把自己打成重伤了): 381 | 大三都过去了,能写迷你 os 吗?能自己写 CPU 吗?能自己搬砖吗?能 hold 住 20k LoC 的仓库吗?能写 Hard 吗?八股文背得咋样了?了解某一方向的前沿研究吗?简历能编多少?…… 382 | 上面说的这些不代表本人观点。 383 | 所以说,课很多,时间很少,一晃就马上要毕业了,人也很容易焦虑。 384 | 我们没有必要凡事都要求自己做到最好,够用就行,做好自己需要的就够了。” 385 | “总的来说,做个好人。” 386 | 387 | - “skyleaworlder,接下来也是最后一个问题,你最近在看什么动漫?” 388 | - “近两年岁数上来了,我开始变得喜欢看 ‘异世界’ | ‘种田养老’ | ‘凤傲天’ 题材。 389 | 我是比较推荐《熊熊勇闯异世界》、《我不是说了能力要平均值么》、《因为太怕痛就全点防御力了》、《打了三百年的史莱姆,不知不觉就练成了满级》这四部。 390 | 很可惜的是同时满足的番剧并不多见。于是这个季度我一直在追 ‘异世界’ & ‘种田养老’ 的《我被逐出队伍后过上慢生活》。” 391 | “可能是越来越想躺平,过简单的生活了。” 392 | ``` 393 | -------------------------------------------------------------------------------- /content/posts/2022/post-zqj2333.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "2021 专访 (VI) · zjq2333" 3 | date: 2022-04-04T11:25:07+08:00 4 | description: "2021 年的 5 月,还在准备投夏令营的我突然得知一位同学已经确定了上交体系结构直博的去向。他的经历以及非 AI 直博的选择让我不得不苦苦寻觅采访他的机会。" 5 | --- 6 | 7 | 2022 年 4 月 3 号,是清明节假期第一天,同时也是全校抗原检测、图书馆提前闭馆、春禾苑暂停堂食的一天。在这样一个特殊的日子里,我来到了一位不愿透露姓名的同学寝室中。 8 | 9 | Q: 简单自我介绍一下吧。 10 | 11 | A: 大家好,我是一名转专业的学生。入学时并没有进入计算机专业,首先是从工科试验班转入大飞机实验班,在大一下学期时本来想转到电信,但没转成,结果来到了计算机。这几年里没有参加过很多的比赛和科研项目,没有非常 “哇塞” 的竞赛或科研经历,大四才真正接触到科研。接下来一段时间,会到上海交通大学攻读计算机体系结构方向的博士学位。 12 | 13 | Q: 其实第一个问题主要围绕自我介绍中的一点——你的大方向是 “体系结构”,但我想问下具体的方向是什么。 14 | 15 | A: 现在还没有特别确定小方向。目前主要做一些有关 GPU 的工作,包括单 GPU 的微架构设计、多 GPU 间的互联、AI 编译以及分布式机器学习。与 GPU 相关的软硬件多少可能会涉及到一些。 16 | 17 | Q: 实际上一年前 QQ 聊天的时候就听说过这个 “微架构”,但当时也不知道这个 “微架构” 究竟是什么。刚刚说在大二、大三没有什么科研经历,那一年前为什么选择了这个方向?现在 AI 可以说是占据了保研界的大半壁江山,你又是怎么了解到这样一个领域呢? 18 | 19 | A: 首先,选择处理器微架构主要是觉得国内这个方向人还是比较缺的。其次,这个方向的可解释性是比较强的,能够清楚自己到底在优化什么东西。现在的深度学习,在我当时看来可解释性欠缺了一些;而且,当时觉得做深度学习的人太多了,卷也卷不过。很多做深度学习的本科就有了相关的科研竞赛经历,那不如选一个没有人抢的领域。但是最近感觉这个东西其实不太好做,主要是 CPU、GPU 这种通用计算的微架构设计改动效果近几年也不太多了,主要是互联、封装、堆结构;而 AI 处理器和非冯诺依曼结构的处理器在学术界虽然是热点,但是目前工业界使用的还是比较少,基本上还是 GPU。让我再选一遍,我肯定是要选 AI 的。 20 | 21 | Q: 第二个问题是,你为什么选择了平转而非降转呢?你如何看待平转的课程压力? 22 | 23 | A: 对我来说,我觉得没有太大必要降转。课程压力是有的,但是感觉好像也不太大,就是大二上学期大作业堆在一起的时候可能比较麻烦。我是只差了计科导和高程,当时看了下,感觉大二上学期的学分也不是很多,我印象中也就 20 多。 24 | 25 | Q: 我也不太清楚……不过你先前可能是学过线代概率论的?我当初正常来说是有 6 门课。 26 | 27 | A: 没学过。那学期也就 35.5 学分吧,其实也还行。主要是高程,自己学过一些东西,而且大二可能不会有特别多的事情,还是处理得过来。 28 | 29 | Q: 好的。那么作为一个平转的同学,你觉得计算机专业的学习和先前专业有没有什么不同?我问这个问题是因为我觉得大飞机和计算机的区别还是比较大的。 30 | 31 | A: 其实我觉得区别不大。要说有区别的话,大飞机那边更理论一些,对于数理基础的要求更强。但计算机这边除了算法与自动机,理论上的东西更少一些,更多是动手,具体体现在写代码上,正如前两天那位北航教授说的—— “高级蓝翔” 一般。不过反正也都是上课、做作业,貌似也没什么很大的区别;考试也都差不多,就是学那些东西,然后考前突击两天把它们都答出来。对我来说,就是当时编程不太熟悉,大二上学期过去以后感觉编程水平貌似也慢慢好了一点。 32 | 33 | Q: 第三个问题是,咱们大二下学期遇到了疫情,一个学期都在家里。那么你刚刚转过来不久就在家里待了一学期。之前看你说那段时间你没怎么学,直接开摆。我就想问下那段时间到底是怎么度过的? 34 | 35 | A: 哇那个学期,我天天晚上出去和同学打牌。尤其是算法分析与设计,每次都是打开 IPad 就睡着,睡醒就吃午饭,回头一看课早就结束了。所以某些课就做了做作业,好像也没怎么学,这点我还是比较后悔的。那个学期的课基本上都没怎么有印象,也没学其他的东西,有点浪费了。当然,由于自动机和计组是老师讲的,我还好好听了下。呃,应该好好把数学学一下的,数学还是太重要了,当时没感觉到。 36 | 37 | Q: 你说比较后悔的一件事是那段时间荒废过去了,应该好好学一下数学。但为什么会感觉到数学重要呢?上这些课的话,我并没有感觉到数学特别强的存在感。 38 | 39 | A: 那如果连数学都不学的话,这专业还叫什么科学呢?科学一定要以数学为基础。不然和 “高级蓝翔” 有什么区别哈哈哈。 40 | 41 | Q: 我感觉我现在就是 “蓝翔高级技工”。 42 | 43 | A: 是,现在就不会,只会写那个程序,调那个系统。运算也不过加减乘除,做做位运算。没有什么应用,所以数学都快忘掉了。 44 | 45 | Q: 所以这个 “数学很重要”,究竟是对计算机学习很重要,还是对自己 “工科生” 的这么一个身份很重要呢? 46 | 47 | A: 主要是一个思维。不学数学就会变笨。对数学生疏,会让自己的思维能力下降。当然,对于计算机来说,也有很多理论性强的研究,尤其是机器学习理论那方面,数学还是很重要的。 48 | 49 | Q: 刚刚说到写系统运用的数学比较有限,那么我想知道你现在的工作应用到了你脑中定义的 “数学” 吗? 50 | 51 | A: 我这个工作,初中及以上的数学都是用不到的。 52 | 53 | Q: 哈哈哈哈,好的。下一组问题有关 2020 年 Intel 大学生电子设计大赛嵌入式邀请赛。我为什么知道这件事呢,就是我在计科这边有一个关系非常好的同学,然后他当时是你这个比赛的队友。我想问下你是怎么了解到这个赛事的,又是因为什么决定参加的呢? 54 | 55 | A: 打算参加这个比赛有两方面原因,一是之前没参加过这类动手的比赛,二是那段时间我没有其他事情。其实一开始我甚至不知道这个比赛是干什么的,报之前都不知道这个比赛好不好获奖。快到最后了,我看到获奖名额比例,才发现拿奖比较容易。所以我还是比较推荐大家去参加这个比赛的。那年我 8 月 15 号就提前返校了,只不过返校后在比赛上花的时间也不多,光补小学期作业了。然后开学以后在张冬冬老师给的一个实验室里面我们几个人做了做。 56 | 57 | Q: 对的对的,我记得当时我那位同学跟我说,做完了就能有二等奖。 58 | 59 | A: 也不算吧,做完了能有三等奖。不过二等奖的比例也还是很高,我们当时是二等奖的最后几名。为什么才拿到这个名次呢,是因为当时官方给了两种可选设备——一类是机器人,另一种则是 FPGA。别人的东西都能动,有很好的 “故事”。最后我们用一块布糊在我们的机器上,看起来就很丑。 60 | 61 | Q: 你们做的是什么? 62 | 63 | A: 我们做的是人脸识别报警装置,把一个嵌入式的设备联合到 Web 端和 FPGA 端。在 FPGA 端设计一个报警器,嵌入式端是人脸识别的模型,Web 端是一个简单的控制系统。当时对于人工智能算法这一块是完全不懂,好在有个队友比较熟悉。我主要是负责 FPGA 板相关的东西以及最后多个装置之间的联合。 64 | 65 | Q: 还卷了 UI? 66 | 67 | A: 对,不过 Web 端是初赛之后加的。比赛分成初赛和决赛,只要初赛过了绝大部分是二等奖。 68 | 69 | Q: 刚刚提到机器人和 FPGA,那我们学校会不会都是选 FPGA 的? 70 | 71 | A: 并不是。只有我们是 FPGA,其他两个组选的都是机器人平台。可能选那个比较容易获奖,大家还是比较喜欢能动的东西。当时我们选了比较小的一个 FPGA,结果发现资源都不太够,只能做小一点的东西。我个人比较推荐有时间想要挑战一下的队伍可以尝试着弄弄机器人。机器人看着就很 “哇塞”,而看到 FPGA 大家就会想:“这是什么玩意儿?” 72 | 73 | Q: 下一个问题是,聊聊在当前这个方向的学习路线。 74 | 75 | A: 尽量不要跟着学校来走吧。如果想要学这个方向的话,国内的课程资源大多不是很好。基本上要按着国外的来吧。比较建议直接去看苏黎世联邦理工的 Onur Mutlu 教授讲的网课,从 Digital Design and Computer Architecture 到 Computer Architecture。这门课的课程资料会对所有人开放,实验也有详细的指导。如果现在从零开始的话,看这门课应该是比较合适的,有助于建构整个知识体系,会有与我们上过的计算机组成原理和计算机系统结构完全不一样的感觉。这门课从逻辑门开始,讲到了 CPU + Memory 的体系架构,也会涉及一些新的东西,比如脉动阵列和 GPU。看书的话,建议看《计算机组成设计:软件硬件接口》和《计算机体系结构:量化研究方法》。(这两本书 9 楼都是有的) 76 | 77 | Q: 那回到一个比较现实的问题上来,说说咱们专业。咱们专业实际上硬件课不少,从大二的数字逻辑、组成原理,再到大三的体系结构以及这学期 19 级学弟学妹们在上的系统实验。整个硬件课程组对于体系结构领域的研究,存不存在一个打基础的作用呢? 78 | 79 | A: 这个肯定是有的,只是第六学期的计算机系统实验可能没有。这个实验有些浪费时间,不过前面几学期的数字逻辑和 CPU 都还算比较正常且难度不大的。而且现在大家可以在网上找到很多外设驱动的源代码,CPU 自己写一个应该也不难。系统实验就是大家都在糊弄,感觉这个课要求和指导都太乱了,可能还得 “拭目以待”。不知道过几年能不能好一点,至少要求要明确一点,靠谱一点。我觉得就是……就是多看 Github。 80 | 81 | Q: 下面的问题是:直博 / 学硕 / 专硕在体系结构领域的区别。因为之前你跟我说过,体系结构方向如果不读博,产出可能不太够,是不是因为这个? 82 | 83 | A: 是的。如果考虑先读硕士再到国外读博的话,时间就太长了。国内硕士要读三年,同时这个方向的硕士也比较少。可能也就计算所有这方向的硕士招的多一些,但是那边的产出可能更难一些,因为他们更偏向于开源处理器工程项目—— “香山”、“一生一芯” 这样的。诚然参与这样的项目有助于工程能力的提高,但问题是不太好产出论文,也就不太有利于出国继续深造。我觉得直博主要就是快速拿到博士学位,然后我英语不太好,也有疫情方面的担忧,家庭条件也不太允许,就选择国内直博了,就业的话建议学硕 / 专硕,或者是希望能够拿国外博士学位。但是现在由于各种原因不能直接国外直博的也建议学硕专硕。如果让我再选一遍,我肯定是要选一个 AI 的硕士。 84 | 85 | Q: 想问下准备这方向直博大概花了多少时间? 86 | 87 | A: 如果只是联系老师的话,并没有花多少时间。因为国内没几个组,两个手数得出来,挨个发邮件也没有几个回的,因为国内很多组基本只收清北本科生。国内做这个的还是太少太少了,大概从头到尾可能一个月吧,还是比较短的。如果包括学习的话,我是从寒假开始看论文的,这个过程也大概花了一个月,大致了解了下这个领域的科研是怎么做的。之前我也看过一些这方面的书,但我觉得看书就不算了。 88 | 89 | Q: 那么你觉得这个领域需要看多少论文才有一个大致了解呢? 90 | 91 | A: 对于 AI 处理器而言,看个 1 篇就知道别人怎么发论文了。国内基本都是 AI 处理器相关的研究,传统 CPU / GPU 都很少设计,或许因为国内的实验室缺乏底蕴以及大公司的合作。 92 | 93 | Q: 接下来的问题我每个人都问,算是常驻问题了。首先是:如果给你一次大学重来的机会,你会在哪些地方做出不一样的抉择? 94 | 95 | A: 首先我觉得转专业的决定还是不后悔的,个人还是比较喜欢这个领域的。然后后悔的是感觉浪费的时间太多了,很多东西知道得太晚,而且感觉上完四年本科明显变笨了。并且我并没有系统地学习。因为大三的这些专业课——操作系统、编译原理、计算机网络、数据库并没有很好地串联起来。这些课一门就是一门,没能有一个完整的知识体系。学完了也不清楚内部的具体实现——数据库就是 Web 开发课。学的这些课,都是学完就忘,没怎么理解,净是考试突击了如果重来一次的话,我希望能学得更成体系一点,能够有计算机系统思维吧。除了 CSAPP,UTAustin 的 Prof. Yale Patt 有一本书叫《Introduction to Computing Systems---from bits and gates to c and beyond》,据说也是非常能够培养计算机系统思维的,可能比较适合我 “重来本科” 的时候读一读。 96 | 97 | Q: 那么接下来评价一下自己四年的本科经历呢? 98 | 99 | A: 上面谈论的是我一个比较后悔的点。整体来看,虽然不是非常理想,但还行。 100 | 101 | Q: 第三个问题希望你站在一个大四学生的角度,分别为大一、大二、大三的同学说一句话。首先说说大三吧,19 级的同学们现在正经历着大三下学期。 102 | 103 | A: 大三到现在也没什么可改变的了,只能说最后到选择的时候,要慎重考虑。一般来说,没什么事情尽量还是不要选择我这个方向吧,比较不推荐。选个 AI 什么的多好,又好发论文,学的人也多。 104 | 105 | Q: 学的人多就太卷了。报夏令营的时候拉列表一看,一半都是 AI 老师,不会 AI 基本就宣告死亡了。 106 | 107 | A: 是这样的,当时参加自动化所夏令营的时候,那里的老师就疯狂问我机器学习。我说我不会,就会些最基础的,老师们就比较嫌弃。 108 | 109 | Q: 那么对于大二呢?有一说一,大二也差不多了,现在已经是大二的四月了。 110 | 111 | A: 大二也到四月份了。大三一年还有一些机会,可以尝试做一些真正的科研,但不包括给老师做横向项目——标数据、写 Web 之类的。在我们学校做 AI 和分布式系统的老师肯定有。希望大家本科的时候就能有一些科研方面的经历,能够在读文献的过程中找出一些 idea、为自己的 idea 设计一些实验,以及学会把自己的 idea 和实验包装成一个故事。但是这条路我直到现在都没能走完,只走了前 1.5 步。大二的时候还有时间,希望能自己去体验 “科研究竟是什么”。 112 | 113 | Q: 但花了这么多时间在科研上,最后就没什么时间做其他事了吧? 114 | 115 | A: 也算是试错嘛。不喜欢科研,后面也可以不做。有很多博士毕业之后,也不会继续做科研。 116 | 117 | Q: 好的,那接下来是对大一。但对大一还是很尴尬,因为什么又都太早了。 118 | 119 | A: 大一把数学学好就不错了,防止自己变笨就是非常重要的一个任务。经历了四年本科,感觉自己变得更笨了。大一的时候学习数学,多少能挽回一点颓势。 120 | 121 | Q: 我也觉得自己大一的时候挺灵巧的,但到了大四已经彻底不行了,而且特别容易累。 122 | 123 | A: 对对对,天天睡醒就发现已经十点半了,十点半也不想起。早就不如从前了。也有可能是摆烂摆太多了,我大二下学期和大三下学期两个学期都在摆。我定去向定得比较早,再加上大三下的课并不很多,就容易摆烂。所以还是不要开摆,要好好学习,摆习惯了就回不到过去了。 124 | 125 | Q: 最后一个问题我是想了解一下,平常你一般在哪里学习?但嘉定校区可供学习的区域是比较匮乏的,不知道你有没有探索过一些适合学习的地方。 126 | 127 | A: 一般在图书馆。从今天开始就没有了。除了图书馆就是 C 楼,但和图书馆的大桌子比起来还是差不少。 128 | -------------------------------------------------------------------------------- /content/posts/test.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Test" 3 | date: 2021-09-30T22:01:38+08:00 4 | draft: true 5 | --- 6 | 7 | 👊 今年下半年,F2F 即将正式开机,我继续扮演小迷弟,我会用小迷弟艺术形象努力创造一个正能量的形象,文体两开花。 8 | -------------------------------------------------------------------------------- /static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TJ-CSCCG/TJCS-F2F/89c642414c677b5be888eb568ce64c50a74ba4e9/static/favicon.ico -------------------------------------------------------------------------------- /themes/hugo-ink/.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/hugo,linux,macos 3 | # Edit at https://www.gitignore.io/?templates=hugo,linux,macos 4 | 5 | ### Hugo ### 6 | # Generated files by hugo 7 | /public/ 8 | /resources/_gen/ 9 | 10 | # Executable may be added to repository 11 | hugo.exe 12 | hugo.darwin 13 | hugo.linux 14 | 15 | ### Linux ### 16 | *~ 17 | 18 | # temporary files which can be created if a process still has a handle open of a deleted file 19 | .fuse_hidden* 20 | 21 | # KDE directory preferences 22 | .directory 23 | 24 | # Linux trash folder which might appear on any partition or disk 25 | .Trash-* 26 | 27 | # .nfs files are created when an open file is removed but is still being accessed 28 | .nfs* 29 | 30 | ### macOS ### 31 | # General 32 | .DS_Store 33 | .AppleDouble 34 | .LSOverride 35 | 36 | # Icon must end with two \r 37 | Icon 38 | 39 | # Thumbnails 40 | ._* 41 | 42 | # Files that might appear in the root of a volume 43 | .DocumentRevisions-V100 44 | .fseventsd 45 | .Spotlight-V100 46 | .TemporaryItems 47 | .Trashes 48 | .VolumeIcon.icns 49 | .com.apple.timemachine.donotpresent 50 | 51 | # Directories potentially created on remote AFP share 52 | .AppleDB 53 | .AppleDesktop 54 | Network Trash Folder 55 | Temporary Items 56 | .apdisk 57 | 58 | # End of https://www.gitignore.io/api/hugo,linux,macos 59 | -------------------------------------------------------------------------------- /themes/hugo-ink/LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2019 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /themes/hugo-ink/README.md: -------------------------------------------------------------------------------- 1 | # Ink 2 | Crisp, minimal personal website and blog theme Hugo. Forked from [Ezhil](https://github.com/vividvilla/ezhil). 3 | 4 | ## Demo 5 | [View demo](https://hugo-ink.netlify.com) 6 | ![Screenshot](https://user-images.githubusercontent.com/547147/69119000-3ace9280-0abb-11ea-81bc-5af68433e845.png "Ink light theme") 7 | 8 | ## Features 9 | * Google Analytics integration 10 | * Syntax highlighting 11 | * Twitter cards and opengraph tags support 12 | * Disqus comments 13 | * RSS feeds 14 | * Custom CSS/JS 15 | * Multilingual months support 16 | 17 | ## Installation 18 | 19 | cd into your hugo site's root directory and: 20 | 21 | ```sh 22 | cd themes 23 | git clone https://github.com/knadh/hugo-ink.git 24 | ``` 25 | 26 | For more information read the [official setup guide](https://gohugo.io/overview/installing/) of Hugo. 27 | 28 | 29 | ## Content type 30 | 31 | You can specify content type with field `type` in your content. For example static pages can be set as type `page` which are excluded from recent posts and all posts page. You can use site params `mainSections` and `disableDisqusTypes` to control which page types are excluded from recent posts and Disqus comments respectively. 32 | 33 | ```md 34 | --- 35 | title: "About" 36 | date: 2019-04-19T21:37:58+05:30 37 | type: "page" 38 | --- 39 | 40 | This is some static page where you can write about yourself. 41 | ``` 42 | 43 | ## Language Settings for the month 44 | 45 | Due to the currently unavailable feature for multilingual dates in ``.Date`` from 46 | Go. It is possible to create a ``month.yaml`` in the data folder of your 47 | Hugo site root directory. There is also an example file in 48 | ``exampleSite/data/``. 49 | 50 | ```sh 51 | cat > month.yaml << EOF 52 | 1: "Jan" 53 | 2: "Feb" 54 | 3: "Mar" 55 | 4: "Apr" 56 | 5: "May" 57 | 6: "Jun" 58 | 7: "Jul" 59 | 8: "Aug" 60 | 9: "Sep" 61 | 10: "Oct" 62 | 11: "Nov" 63 | 12: "Dec" 64 | EOF 65 | ``` 66 | 67 | ## Credits 68 | 69 | * [Ezhil theme](https://github.com/vividvilla/ezhil) from which Ink was forked 70 | 71 | Licensed under the MIT license. 72 | -------------------------------------------------------------------------------- /themes/hugo-ink/archetypes/default.md: -------------------------------------------------------------------------------- 1 | +++ 2 | +++ 3 | -------------------------------------------------------------------------------- /themes/hugo-ink/exampleSite/archetypes/default.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "{{ replace .Name "-" " " | title }}" 3 | date: {{ .Date }} 4 | draft: true 5 | --- 6 | 7 | -------------------------------------------------------------------------------- /themes/hugo-ink/exampleSite/config.toml: -------------------------------------------------------------------------------- 1 | baseURL = "http://example.org/" 2 | languageCode = "en-us" 3 | title = "Ink" 4 | theme = "ink" 5 | paginate = 5 6 | 7 | copyright = "© Copyright notice" 8 | 9 | pygmentsstyle = "vs" 10 | pygmentscodefences = true 11 | pygmentscodefencesguesssyntax = true 12 | 13 | googleAnalytics = "UA-123-45" 14 | disqusShortname = "ink-demo" 15 | 16 | [params] 17 | subtitle = "Crisp, minimal personal [blog theme for Hugo](https://github.com/knadh/hugo-ink)" 18 | 19 | # Optional 64x64 avatar image. 20 | avatar = "https://image.freepik.com/free-vector/young-man-head-with-beard-avatar-character_24877-36786.jpg" 21 | 22 | # Content types to disable Disqus on. 23 | disableDisqusTypes = ["page"] 24 | 25 | featherIconsCDN = true 26 | 27 | mode = "auto" # "dark" or "auto" 28 | # customCSS = "css/custom.css" # Custom CSS applied to default styles. 29 | # customDarkCSS = "css/custom-dark.css" # Custom styles applied to dark mode css. 30 | # customJS = ["js/custom.js", "js/custom1.js"] # Custom JS scripts. 31 | 32 | # Nav. 33 | [[menu.main]] 34 | name = "Home" 35 | url = "/" 36 | weight = 1 37 | 38 | [[menu.main]] 39 | name = "All posts" 40 | url = "/posts" 41 | weight = 2 42 | 43 | [[menu.main]] 44 | name = "About" 45 | url = "/about" 46 | weight = 3 47 | 48 | [[menu.main]] 49 | name = "Tags" 50 | url = "/tags" 51 | weight = 4 52 | 53 | [[params.social]] 54 | name = "Github" 55 | icon = "github" 56 | url = "https://github.com/knadh/hugo-ink" 57 | 58 | [[params.social]] 59 | name = "RSS" 60 | icon = "rss" 61 | url = "/index.xml" 62 | 63 | [taxonomies] 64 | tag = "tags" 65 | -------------------------------------------------------------------------------- /themes/hugo-ink/exampleSite/content/about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "About" 3 | date: 2019-04-19T21:37:58+05:30 4 | type: "page" 5 | --- 6 | 7 | This is some static page where you can write about yourself. 8 | -------------------------------------------------------------------------------- /themes/hugo-ink/exampleSite/content/posts/post-1.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Primer: When You Have Too Much to Do" 3 | date: 2018-03-18T02:01:58+05:30 4 | description: "You have a to-do list that scrolls on for days. You are managing multiple projects, getting lots of email and messages on different messaging systems, managing finances and personal health habits and so much more." 5 | tags: [Primer, todo] 6 | --- 7 | 8 | You have a to-do list that scrolls on for days. You are managing multiple projects, getting lots of email and messages on different messaging systems, managing finances and personal health habits and so much more. 9 | 10 | It all keeps piling up, and it can feel overwhelming. 11 | 12 | How do you keep up with it all? How do you find focus and peace and get stuff accomplished when you have too much on your plate? 13 | 14 | In this primer, I’ll look at some key strategies and tactics for taking on an overloaded life with an open heart, lots of energy, and a smile on your face. 15 | 16 | ## The First Step: Triage 17 | 18 | Whether you’re just starting your day, or you’re in the middle of the chaos and just need to find some sanity … the first step is to get into triage mode. 19 | 20 | Triage, as you probably know, is sorting through the chaos to prioritize: what needs to be done now, what needs to be done today, what needs to be done this week, and what can wait? You’re looking at urgency, but also what’s meaningful and important. 21 | 22 | Here’s what you might do: 23 | 24 | * Pick out the things that need to be done today. Start a Short List for things you’re going to do today. That might be important tasks for big projects, urgent tasks that could result in damage if you don’t act, smaller admin tasks that you really should take care of today, and responding to important messages. I would recommend being ruthless and cutting out as much as you can, having just 5 things on your plate if that’s at all possible. Not everything needs to be done today, and not every email needs to be responded to. 25 | * Push some things to tomorrow and the rest of the week. If you have deadlines that can be pushed back (or renegotiated), do that. Spread the work out over the week, even into next week. What needs to be done tomorrow? What can wait a day or two longer? 26 | * Eliminate what you can. That might mean just not replying to some messages that aren’t that important and don’t really require a reply. It might mean telling some people that you can’t take on this project after all, or that you need to get out of the commitment that you said you’d do. Yes, this is uncomfortable. For now, just put them on a list called, “To Not Do,” and plan to figure out how to get out of them later. 27 | 28 | OK, you have some breathing room and a manageable list now! Let’s shrink that down even further and just pick one thing. 29 | 30 | ## Next: Focus on One Thing 31 | 32 | With a lot on your plate, it’s hard to pick one thing to focus on. But that’s exactly what I’m going to ask you to do. 33 | 34 | Pick one thing, and give it your focus. Yes, there are a lot of other things you can focus on. Yes, they’re stressing you out and making it hard to focus. But think about it this way: if you allow it all to be in your head all the time, that will always be your mode of being. You’ll always be thinking about everything, stressing out about it all, with a frazzled mind … unless you start shifting. 35 | 36 | The shift: 37 | 38 | * Pick something to focus on. Look at the triaged list from the first section … if you have 5-6 things on this Short List, you can assess whether there’s any super urgent, time-sensitive things you need to take care of. If there are, pick one of them. If not, pick the most important one — probably the one you have been putting off doing. 39 | * Clear everything else away. Just for a little bit. Close all browser tabs, turn off notifications, close open applications, put your phone away. 40 | * Put that one task before you, and allow yourself to be with it completely. Pour yourself into it. Think of it as a practice, of letting go (of everything else), of focus, of radical simplicity. 41 | 42 | When you’re done (or after 15-20 minutes have gone by at least), you can switch to something else. But don’t allow yourself to switch until then. 43 | 44 | By closing off all exits, by choosing one thing, by giving yourself completely to that thing … you’re now in a different mode that isn’t so stressful or spread thin. You’ve started a shift that will lead to focus and sanity. 45 | 46 | ## Third: Schedule Time to Simplify 47 | 48 | Remember the To Not Do list above? Schedule some time this week to start reducing your projects, saying no to people, getting out of commitments, crossing stuff off your task list … so that you can have some sanity back. 49 | 50 | There are lots of little things that you’ve said “yes” to that you probably shouldn’t have. That’s why you’re overloaded. Protect your more important work, and your time off, and your peace of mind, by saying “no” to things that aren’t as important. 51 | 52 | Schedule the time to simplify — you don’t have to do it today, but sometime soon — and you can then not have to worry about the things on your To Not Do list until then. 53 | 54 | ## Fourth: Practice Mindful Focus 55 | 56 | Go through the rest of the day with an attitude of “mindful focus.” That means that you are doing one thing at a time, being as present as you can, switching as little as you can. 57 | 58 | Think of it as a settling of the mind. A new mode of being. A mindfulness practice (which means you won’t be perfect at it). 59 | 60 | As you practice mindful focus, you’ll learn to practice doing things with an open heart, with curiosity and gratitude, and even joy. Try these one at a time as you get to do each task on your Short List. 61 | 62 | You’ll find that you’re not so overloaded, but that each task is just perfect for that moment. And that’s a completely new relationship with the work that you do, and a new relationship with life. 63 | -------------------------------------------------------------------------------- /themes/hugo-ink/exampleSite/content/posts/post-2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Fearlessness: How to Stop Running from Space" 3 | date: 2018-03-18T12:13:30+05:30 4 | tags: [Space] 5 | --- 6 | 7 | We spend our days filling in every available space, cramming in more tasks, responding to messages, checking social media and online sites, watching videos. 8 | 9 | We are afraid of empty space in our lives. 10 | 11 | The result is often a continual busyness, constant distraction and avoidance, lack of focus, lack of satisfaction with our lives. 12 | 13 | We run from silence. We run from the spaces between tasks and appointments. We run from solitude and stillness. We try to fill every second with activity, with something useful, as if silence and space are not valuable. 14 | 15 | But what are we afraid of? 16 | 17 | And who would we be if we didn’t have that fear? 18 | 19 | We’re afraid of space and stillness and silence because it highlights the uncertainty, instability, groundlessness, insecurity, shakiness that lie underneath every second of our lives. We’re afraid of having to face this instability and uncertainty, of having to feel the fear of it. 20 | 21 | Without the fear of all of the uncertainty that is highlighted by space … we become free. 22 | 23 | I know in my life, when I allow myself to have stillness, silence, solitude, simplicity and space … it leaves room to face whatever is coming up for me. It gives me room to fully feel any feelings that I’ve been avoiding. It allows me to be more honest with myself, instead of using distractions and busyness to cover up what I don’t want to see. 24 | 25 | And in the end, I develop trust that the space is not something to be feared, but rather something to be treasured. A gift, filled with learning and not knowing and shakiness and beauty. 26 | 27 | You might try allowing more space to be in your day, without filling it: 28 | 29 | * Take some time between tasks for stillness. 30 | * Sit out in nature, in silence, without technology. 31 | * When you notice yourself reaching for your phone, pause. See if you can just be still, just savor some space. 32 | * When you feel uncertainty or instability in your life (hint: it’s always there), let yourself feel it. Be present with it, without needing to run or avoid. 33 | * When you feel fear, be open-hearted with it and allow yourself fully feel it, being friendly with it. Your relationship with fear will change if you become friendly with it. 34 | * Do less, and trust that things won’t fall apart. Or if they do fall apart, you can be present with that instability. 35 | * When you’re in line, driving, eating, walking, exercising … see if you can do those things in silence, without technology, without needing to do something “useful.” Find the value in these spaces. 36 | * Notice who you are without the fear of space. 37 | 38 | Savor these spaces, their deliciousness. Savor the groundlessness, as something filled with freedom if we learn not to fear it. Be present with the fear and uncertainty, as good friends not as enemies. 39 | 40 | Let your heart be open raw tender and vulnerable, and your mind embracing the spaciousness of the vast blue sky of open awareness. 41 | -------------------------------------------------------------------------------- /themes/hugo-ink/exampleSite/content/posts/post-3.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "How I Learned to Stop Procrastinating, & Love Letting Go" 3 | date: 2018-03-18T12:13:32+05:30 4 | description: "The art of letting go." 5 | tags: [Procrastinating] 6 | --- 7 | 8 | The end of procrastination is the art of letting go. 9 | 10 | I’ve been a lifelong procrastinator, at least until recent years. I would put things off until deadline, because I knew I could come through. I came through on tests after cramming last minute, I turned articles in at the deadline after waiting until the last hour, I got things done. 11 | 12 | Until I didn’t. It turns out procrastinating caused me to miss deadlines, over and over. It stressed me out. My work was less-than-desirable when I did it last minute. Slowly, I started to realize that procrastination wasn’t doing me any favors. In fact, it was causing me a lot of grief. 13 | 14 | But I couldn’t quit. I tried a lot of things. I tried time boxing and goal setting and accountability and the Pomodoro Technique and Getting Things Done. All are great methods, but they only last so long. Nothing really worked over the long term. 15 | 16 | That’s because I wasn’t getting to the root problem. 17 | 18 | I hadn’t figured out the skill that would save me from the procrastination. 19 | 20 | Until I learned about letting go. 21 | 22 | Letting go first came to me when I was quitting smoking. I had to let go of the “need” to smoke, the use of my crutch of cigarettes to deal with stress and problems. 23 | 24 | Then I learned I needed to let go of other false needs that were causing me problems: sugar, junk food, meat, shopping, beer, possessions. I’m not saying I can never do these things again once I let go of these needs, but I let go of the idea that they’re really necessary. I let go of an unhealthy attachment to them. 25 | 26 | Then I learned that distractions and the false need to check my email and news and other things online … were causing me problems. They were causing my procrastination. 27 | 28 | So I learned to let go of those too. 29 | 30 | Here’s the process I used to let go of the distractions and false needs that cause procrastination: 31 | 32 | I paid attention to the pain they cause me, later, instead of only the temporary comfort/pleasure they gave me right away. 33 | I thought about the person I want to be, the life I want to live. I set my intentions to do the good work I think I should do. 34 | I watched my urges to check things, to go to the comfort of distractions. I saw that I wanted to escape discomfort of something hard, and go to the comfort of something familiar and easy. 35 | I realized I didn’t need that comfort. I could be in discomfort and nothing bad would happen. In fact, the best things happen when I’m in discomfort. 36 | And then I smile, and breathe, and let go. 37 | 38 | And one step at a time, become the person I want to be. 39 | -------------------------------------------------------------------------------- /themes/hugo-ink/exampleSite/content/posts/post-4.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Getting Started with Traveling Ultralight" 3 | date: 2018-03-18T12:13:35+05:30 4 | description: "Start by getting a small backpack (less than 20 liters) and then just travel with what fits in that." 5 | --- 6 | 7 | I’m on a trip at the moment, and a friend who generously let me sleep on his couch looked at my small travel backpack and commented on how little I travel with: “That’s impressive,” he said. 8 | 9 | I was a little surprised, because though I’ve gotten that comment before, it’s become normal for me to travel with just a small bag (10 lbs. or less, usually), and I have friends who travel with even less. But then I remembered that I’m far from normal in this way. 10 | 11 | I gave him a tip for getting started, and I recommend it for all of you, who want to travel light — or ultralight, as I call it, because for many people traveling light is taking a carry-on roller luggage. For me, having those roller bags is lugging too much, because you can run up stairs with it with ease, or carry it all over a city without worrying about stowing away your luggage somewhere first. It’s so much easier to travel ultralight. 12 | 13 | Here’s the tip I gave him to get started: start by getting a small backpack (less than 20 liters) and then just travel with what fits in that. 14 | 15 | That’s how to start. But you’ll probably want some guidance on what to put into the bag, and how to travel with so little. Here’s some guidance to get started: 16 | 17 | * I travel with a lightweight laptop (Macbook Air), a few clothes, my phone, earbuds and some charging cords, toiletries, and almost nothing else. A lightweight windbreaker for wind and light rain (Patagonia Houdini). An eye mask and ear plugs. A collapsible water bottle. My passport. That’s about it. No extra shoes. No books. No suit. No travel pillow. No extra camera other than my phone. I’m not sure what else everyone else brings, but none of that. 18 | * I bring clothes that I can wash in the sink or shower and that will dry overnight. Lightweight stuff that I can layer. Often they’re workout-style clothes or things from companies like Outlier or Patagonia that travel well. I don’t bring enough underwear or socks for every day of the trip, because I wash them every couple of days. I only bring one or two extra T-shirts, generally wearing the same two shirts the whole trip, even if it’s a month long. No one has ever once cared what I wear when I’m traveling. 19 | * I bring minimal toiletries: a small shaver for my head, razor, toothbrush, floss small tubes of toothpaste and shaving cream, deodorant, nail clippers, ibuprofen. 20 | * For cold places, I have thermal underwear and a couple long-sleeve layers (generally all Patagonia capilene stuff), and a beanie. I don’t usually go to places where it’s snowing (I don’t know why, maybe snow isn’t my thing), so I don’t have clothes to deal with that weather. 21 | * For warm places, I will bring flip flops and swim trunks, and leave most of the colder layers behind. 22 | 23 | That’s enough for a monthlong trip, which I’ve done multiple times with this kind of setup. For a shorter trip of a few days, I might bring even less. 24 | 25 | I really love traveling this way, and am more than willing to sacrifice bringing extra things for the luxury of traveling lightweight. 26 | 27 | By the way, you don’t need much more than this kind of setup even in everyday life. 28 | 29 | For more info on this, check out my Ultralight ebook, and my friend Tynan has a great book called Forever Nomad. 30 | 31 | -------------------------------------------------------------------------------- /themes/hugo-ink/exampleSite/content/posts/post-5.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Typography" 3 | date: 2018-03-18T12:13:38+05:30 4 | --- 5 | 6 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 7 | 8 | # Heading 1 9 | 10 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 11 | 12 | ## Heading 2 13 | 14 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 15 | 16 | ### Heading 3 17 | 18 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 19 | 20 | #### Heading 4 21 | 22 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 23 | 24 | ##### Heading 5 25 | 26 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 27 | 28 | ###### Heading 6 29 | 30 | Lid est laborum et dolorum fuga. Et harum quidem rerum facilis est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit quo minus id quod amets untra dolor amet sad. Sed ut perspser iciatis unde omnis iste natus error sit voluptatem accusantium doloremque laste. Dolores sadips ipsums sits. 31 | 32 | ## Typography 33 | 34 | Lid est laborum et dolorum fuga, This is [an example](http://example.com/ "Title") inline link. Et harum quidem rerum facilis, **This is bold** and *emphasis* cumque nihilse impedit quo minus id quod amets untra dolor amet sad. While this is `code block()` and following is a `pre` tag 35 | 36 | print 'this is pre tag' 37 | 38 | Following is the syntax highlighted code block 39 | 40 | ```go 41 | func getCookie(name string, r interface{}) (*http.Cookie, error) { 42 | rd := r.(*http.Request) 43 | cookie, err := rd.Cookie(name) 44 | if err != nil { 45 | return nil, err 46 | } 47 | return cookie, nil 48 | } 49 | 50 | func setCookie(cookie *http.Cookie, w interface{}) error { 51 | // Get write interface registered using `Acquire` method in handlers. 52 | wr := w.(http.ResponseWriter) 53 | http.SetCookie(wr, cookie) 54 | return nil 55 | } 56 | ``` 57 | 58 | This is blockquote, Will make it *better now* 59 | 60 | > 'I want to do with you what spring does with the cherry trees.' cited ~Pablo Neruda* 61 | 62 | 63 | > Et harum quidem *rerum facilis* est et expeditasi distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihilse impedit 64 | 65 | Unordered list 66 | 67 | * Red 68 | * Green 69 | * Blue 70 | 71 | Ordered list 72 | 73 | 1. Red 74 | 2. Green 75 | 3. Blue 76 | -------------------------------------------------------------------------------- /themes/hugo-ink/exampleSite/content/posts/post-6.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Hugo shortcodes" 3 | date: 2018-03-18T12:13:36+05:30 4 | images: ["https://images.unsplash.com/photo-1560032779-0a8809186efd?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80"] 5 | description: Here is a demo of all shortcodes available in Hugo. 6 | --- 7 | 8 | ## Images 9 | 10 | {{< figure src="https://images.unsplash.com/photo-1560032779-0a8809186efd?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1350&q=80" title="Dave Herring" >}} 11 | 12 | {{< figure src="https://images.unsplash.com/photo-1560032779-0a8809186efd?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=500&q=80" title="Dave Herring" >}} 13 | 14 | 15 | ## Github Gist 16 | 17 | {{< gist spf13 7896402 >}} 18 | 19 | ## Youtube video 20 | 21 | {{< youtube w7Ft2ymGmfc >}} 22 | 23 | ## Tweet 24 | 25 | {{< tweet 877500564405444608 >}} 26 | 27 | ## Vimeo 28 | 29 | {{< vimeo id="146022717" >}} 30 | 31 | -------------------------------------------------------------------------------- /themes/hugo-ink/exampleSite/content/posts/post-7.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "How to test dark mode?" 3 | description: "Here is how you can setup dark mode for Ink and test on various OS like iOS, Android, macOS and Windows 10." 4 | date: 2018-03-18T12:13:38+05:30 5 | --- 6 | 7 | You can set dark mode as default by setting `params.mode` to `dark` in `config.toml` or set it to `auto` which will detect based on your OS and switch to dark mode. For more details [refer documentation](https://github.com/knadh/hugo-ink#configuration) 8 | 9 | Here is how you can switch based on your OS 10 | 11 | * [iOS](https://www.howtogeek.com/440078/how-to-enable-dark-mode-on-your-iphone-and-ipad/) 12 | * [Android](https://9to5google.com/2018/12/17/android-dark-mode-theme-pie/) 13 | * [macOS](https://support.apple.com/en-in/HT208976) 14 | * [Windows 10](https://www.cnet.com/how-to/turn-on-the-dark-mode-in-windows-10/) 15 | -------------------------------------------------------------------------------- /themes/hugo-ink/exampleSite/content/posts/post-8.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Markdown Syntax Guide" 3 | date: "2019-03-11" 4 | description: "Sample article showcasing basic Markdown syntax and formatting for HTML elements." 5 | tags: [markdown, css, html, themes] 6 | categories: [themes, syntax] 7 | --- 8 | 9 | This article offers a sample of basic Markdown syntax that can be used in Hugo content files, also it shows whether basic HTML elements are decorated with CSS in a Hugo theme. 10 | 11 | 12 | ## Headings 13 | 14 | The following HTML `

`—`

` elements represent six levels of section headings. `

` is the highest section level while `

` is the lowest. 15 | 16 | # H1 17 | ## H2 18 | ### H3 19 | #### H4 20 | ##### H5 21 | ###### H6 22 | 23 | ## Paragraph 24 | 25 | Xerum, quo qui aut unt expliquam qui dolut labo. Aque venitatiusda cum, voluptionse latur sitiae dolessi aut parist aut dollo enim qui voluptate ma dolestendit peritin re plis aut quas inctum laceat est volestemque commosa as cus endigna tectur, offic to cor sequas etum rerum idem sintibus eiur? Quianimin porecus evelectur, cum que nis nust voloribus ratem aut omnimi, sitatur? Quiatem. Nam, omnis sum am facea corem alique molestrunt et eos evelece arcillit ut aut eos eos nus, sin conecerem erum fuga. Ri oditatquam, ad quibus unda veliamenimin cusam et facea ipsamus es exerum sitate dolores editium rerore eost, temped molorro ratiae volorro te reribus dolorer sperchicium faceata tiustia prat. 26 | 27 | Itatur? Quiatae cullecum rem ent aut odis in re eossequodi nonsequ idebis ne sapicia is sinveli squiatum, core et que aut hariosam ex eat. 28 | 29 | ## Blockquotes 30 | 31 | The blockquote element represents content that is quoted from another source, optionally with a citation which must be within a `footer` or `cite` element, and optionally with in-line changes such as annotations and abbreviations. 32 | 33 | #### Blockquote without attribution 34 | 35 | > Tiam, ad mint andaepu dandae nostion secatur sequo quae. 36 | > **Note** that you can use *Markdown syntax* within a blockquote. 37 | 38 | #### Blockquote with attribution 39 | 40 | > Don't communicate by sharing memory, share memory by communicating.

41 | > — Rob Pike[^1] 42 | 43 | 44 | [^1]: The above quote is excerpted from Rob Pike's [talk](https://www.youtube.com/watch?v=PAAkCSZUG1c) during Gopherfest, November 18, 2015. 45 | 46 | ## Tables 47 | 48 | Tables aren't part of the core Markdown spec, but Hugo supports supports them out-of-the-box. 49 | 50 | Name | Age 51 | --------|------ 52 | Bob | 27 53 | Alice | 23 54 | 55 | #### Inline Markdown within tables 56 | 57 | | Inline    | Markdown    | In    | Table | 58 | | ---------- | --------- | ----------------- | ---------- | 59 | | *italics* | **bold** | ~~strikethrough~~    | `code` | 60 | 61 | ## Code Blocks 62 | 63 | #### Code block with backticks 64 | 65 | ``` 66 | html 67 | 68 | 69 | 70 | 71 | Example HTML5 Document 72 | 73 | 74 |

Test

75 | 76 | 77 | ``` 78 | #### Code block indented with four spaces 79 | 80 | 81 | 82 | 83 | 84 | Example HTML5 Document 85 | 86 | 87 |

Test

88 | 89 | 90 | 91 | #### Code block with Hugo's internal highlight shortcode 92 | {{< highlight html >}} 93 | 94 | 95 | 96 | 97 | Example HTML5 Document 98 | 99 | 100 |

Test

101 | 102 | 103 | {{< /highlight >}} 104 | 105 | ## List Types 106 | 107 | #### Ordered List 108 | 109 | 1. First item 110 | 2. Second item 111 | 3. Third item 112 | 113 | #### Unordered List 114 | 115 | * List item 116 | * Another item 117 | * And another item 118 | 119 | #### Nested list 120 | 121 | * Item 122 | 1. First Sub-item 123 | 2. Second Sub-item 124 | 125 | ## Other Elements — abbr, sub, sup, kbd, mark 126 | 127 | GIF is a bitmap image format. 128 | 129 | H2O 130 | 131 | Xn + Yn = Zn 132 | 133 | Press CTRL+ALT+Delete to end the session. 134 | 135 | Most salamanders are nocturnal, and hunt for insects, worms, and other small creatures. 136 | 137 | 138 | -------------------------------------------------------------------------------- /themes/hugo-ink/exampleSite/data/month.yaml: -------------------------------------------------------------------------------- 1 | 1: "Jan" 2 | 2: "Feb" 3 | 3: "Mar" 4 | 4: "Apr" 5 | 5: "May" 6 | 6: "Jun" 7 | 7: "Jul" 8 | 8: "Aug" 9 | 9: "Sep" 10 | 10: "Oct" 11 | 11: "Nov" 12 | 12: "Dec" 13 | -------------------------------------------------------------------------------- /themes/hugo-ink/images/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TJ-CSCCG/TJCS-F2F/89c642414c677b5be888eb568ce64c50a74ba4e9/themes/hugo-ink/images/screenshot.png -------------------------------------------------------------------------------- /themes/hugo-ink/images/tn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TJ-CSCCG/TJCS-F2F/89c642414c677b5be888eb568ce64c50a74ba4e9/themes/hugo-ink/images/tn.png -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/404.html: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TJ-CSCCG/TJCS-F2F/89c642414c677b5be888eb568ce64c50a74ba4e9/themes/hugo-ink/layouts/404.html -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/_default/list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ partial "header.html" . }} 4 | 5 | 6 |
7 | {{ partial "head.html" . }} 8 | 9 | {{ if isset .Data "Term" }} 10 |

{{ .Data.Term }}

11 | {{ else }} 12 |

{{ .Name }}

13 | {{ end }} 14 | 15 | {{ .Content }} 16 | 17 | 27 |
28 | 29 | {{ partial "footer.html" . }} 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/_default/single.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ partial "header.html" . }} 4 | 5 |
6 | {{ partial "head.html" . }} 7 | 8 |
9 |
10 | {{ if ne .Date.Year 1 }} 11 |
12 |
13 | {{ dateFormat "02" .Date }} 14 | {{ if $.Site.Data.month }}{{ index $.Site.Data.month (printf "%d" .Date.Month) }} {{ .Date.Year }}{{ else }}{{ dateFormat "Jan 2006" .Date }}{{ end }} 15 |
16 |
17 | {{ end }} 18 |
19 |

{{ .Title }}

20 |
21 |
22 | 23 |
24 | {{ .Content }} 25 |
26 | 27 |
28 | {{ if ne .Type "page" }} 29 | {{ if gt .Params.tags 0 }} 30 |
    31 | {{ range .Params.tags }} 32 |
  • {{ . }}
  • 33 | {{ end }} 34 |
35 | {{ end }} 36 | {{ end }} 37 |
38 | 39 | {{- if .Site.DisqusShortname -}} 40 | {{- $.Scratch.Set "isDisqus" true -}} 41 | 42 | {{- if and (isset .Params "type") (in .Site.Params.disableDisqusTypes .Params.type) -}} 43 | {{- $.Scratch.Set "isDisqus" false -}} 44 | {{- end -}} 45 | 46 | {{- if and (isset .Params "disqus") (eq .Params.disqus false) -}} 47 | {{- $.Scratch.Set "isDisqus" false -}} 48 | {{- else if and (isset .Params "disqus") (eq .Params.disqus true) -}} 49 | {{- $.Scratch.Set "isDisqus" true -}} 50 | {{- end -}} 51 | 52 | {{- if eq ($.Scratch.Get "isDisqus") true -}} 53 | {{- partial "disqus.html" . -}} 54 | {{- end -}} 55 | {{- end -}} 56 | 57 |
58 | {{ partial "comments.html" . }} 59 |
60 | 61 | {{ if .Site.Params.busuanzi }} 62 | 65 | {{ end }} 66 |
67 | 68 |
69 | {{ partial "footer.html" . }} 70 | 71 | 72 | -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/_default/term.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ partial "header.html" . }} 4 | 5 | 6 |
7 | {{ partial "head.html" . }} 8 | 9 |

{{ .Title }}

10 | 11 | {{ with (.Site.GetPage .Title) }} 12 | 17 | {{ end }} 18 |
19 | 20 | {{ partial "footer.html" . }} 21 | 22 | 23 | -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/_default/terms.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ partial "header.html" . }} 4 | 5 | 6 |
7 | {{ partial "head.html" . }} 8 | 9 |

{{ .Name }}

10 | 11 | {{ $biggest := 1 }} 12 | {{ $smallest := 1 }} 13 | {{ $max := 3 }} 14 | {{ $min := 1 }} 15 | {{ $size := $min }} 16 | 17 | {{ $data := .Data }} 18 |
19 | {{ range $key, $value := .Data.Terms.ByCount }} 20 | {{ $size := (add (mul (div $value.Count $biggest) (sub $max $min)) $min) }} 21 | {{ $size := (cond (eq $biggest $smallest) $min $size) }} 22 | {{ $value.Name }}{{ $value.Count }} 23 | {{ end }} 24 |
25 |
26 | 27 | {{ partial "footer.html" . }} 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ partial "header.html" . }} 4 | 5 |
6 | {{ partial "head.html" . }} 7 | 8 |
9 |
10 | {{ $pages := where .Site.RegularPages "Type" "in" .Site.Params.mainSections }} 11 | {{ $paginator := .Paginate (where $pages "Params.hidden" "ne" true) }} 12 | {{ range $paginator.Pages }} 13 |
14 | {{ partial "post-preview.html" . }} 15 |
16 | {{ end }} 17 | {{ template "partials/paginator.html" . }} 18 |
19 |
20 |
21 | {{ partial "footer.html" . }} 22 | 23 | 24 | -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/partials/comments.html: -------------------------------------------------------------------------------- 1 | 2 | {{ if (.Site.Params.enableGitalk) }} 3 |
4 | 5 | 6 | 19 | {{ end }} -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/partials/disqus.html: -------------------------------------------------------------------------------- 1 |
2 | 15 | 16 | comments powered by Disqus 17 | -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/partials/footer.html: -------------------------------------------------------------------------------- 1 | 6 | 7 | {{ if .Site.Params.busuanzi }} 8 | 9 | {{ end }} 10 | 11 | {{ template "_internal/google_analytics_async.html" . }} 12 | {{- with .Site.Params.Social -}} 13 | 14 | {{- end -}} 15 | -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/partials/head.html: -------------------------------------------------------------------------------- 1 |
2 | {{ if .Site.Params.Avatar }} 3 |
4 | 5 | {{ .Site.Title }} 6 | 7 |
8 | {{ end }} 9 |

{{ .Site.Title }}

10 |
11 | {{- if isset .Site.Params "subtitle" -}} 12 |

{{ .Site.Params.Subtitle | markdownify }}

13 | {{- end -}} 14 | 24 |
25 | 26 | 35 |
36 | -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/partials/header.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {{- $title := ( .Title ) -}} 5 | {{- $siteTitle := ( .Site.Title ) -}} 6 | {{- if .IsHome -}} 7 | {{ $siteTitle }} {{ if isset .Site.Params "subtitle" }}- {{ .Site.Params.Subtitle }}{{ end }} 8 | {{- else -}} 9 | {{ $title }} - {{ $siteTitle }} 10 | {{- end -}} 11 | 12 | {{- if isset .Site.Params "favicon" -}} 13 | 14 | {{- end -}} 15 | 16 | 17 | {{ with .OutputFormats.Get "rss" -}} 18 | {{ printf `` .Rel .MediaType.Type .Permalink $.Site.Title | safeHTML }} 19 | {{ end -}} 20 | 21 | {{- template "_internal/schema.html" . -}} 22 | {{- template "_internal/opengraph.html" . -}} 23 | {{- template "_internal/twitter_cards.html" . -}} 24 | 25 | 26 | 27 | {{- if isset .Site.Params "customcss" }} 28 | 29 | {{ end }} 30 | 31 | 32 | {{- if isset .Site.Params "customdarkcss" }} 33 | 34 | {{- end }} 35 | 36 | {{ if and (isset .Site.Params "social") (isset .Site.Params "feathericonscdn") (eq .Site.Params.featherIconsCDN true) -}} 37 | 38 | {{- else if or (isset .Site.Params "social") (eq .Site.Params.mode "auto") (eq .Site.Params.mode "dark") -}} 39 | 40 | {{ end }} 41 | 42 | {{- if isset .Site.Params "customjs" -}} 43 | {{- range .Site.Params.customJS }}{{- end }} 44 | {{- end }} 45 | 46 | -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/partials/paginator.html: -------------------------------------------------------------------------------- 1 | {{ $pag := $.Paginator }} 2 | {{ if gt $pag.TotalPages 1 }} 3 | 15 | {{ end }} 16 | -------------------------------------------------------------------------------- /themes/hugo-ink/layouts/partials/post-preview.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 | {{ dateFormat "02" .Date }} 5 | {{ if $.Site.Data.month }}{{ index $.Site.Data.month (printf "%d" .Date.Month) }} {{ .Date.Year }}{{ else }}{{ dateFormat "Jan 2006" .Date }}{{ end }} 6 |
7 |
8 |
9 |

10 | {{.Title}}{{ if .Draft }}DRAFT{{ end }} 11 |

12 | 13 | {{ if isset .Params "description" }} 14 | {{ .Description }} 15 | {{ else if gt (countrunes (.Content | plainify)) 120 }} 16 | {{ slicestr (.Content | plainify) 0 120 }}... 17 | {{ else }} 18 | {{ .Content | plainify }} 19 | {{ end }} 20 | 21 |
22 |
23 | -------------------------------------------------------------------------------- /themes/hugo-ink/netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "exampleSite/public" 3 | command = "cd exampleSite && hugo --gc --themesDir ../.." 4 | 5 | [build.environment] 6 | HUGO_VERSION = "0.51" 7 | HUGO_THEME = "repo" 8 | HUGO_BASEURL = "/" 9 | -------------------------------------------------------------------------------- /themes/hugo-ink/static/css/dark.css: -------------------------------------------------------------------------------- 1 | html.dark body { 2 | color: #ddd; 3 | background-color: #000; 4 | } 5 | 6 | html.dark ::-moz-selection { 7 | background: #9375fd; 8 | color: #fff; 9 | text-shadow: none 10 | } 11 | 12 | html.dark ::selection { 13 | background: #9375fd; 14 | color: #fff; 15 | text-shadow: none 16 | } 17 | 18 | html.dark hr { 19 | border-color: #333; 20 | } 21 | 22 | html.dark blockquote { 23 | border-color: #ddd; 24 | } 25 | 26 | html.dark h1, 27 | html.dark h2, 28 | html.dark h3, 29 | html.dark h4, 30 | html.dark h5, 31 | html.dark h6 { 32 | color: #ddd; 33 | } 34 | 35 | html.dark a,a:hover { 36 | color: #9375fd; 37 | text-decoration: none; 38 | } 39 | 40 | html.dark table tbody tr:nth-of-type(even) { 41 | background-color: rgba(255, 255, 255, 0.15); 42 | } 43 | 44 | html.dark .site-description a, 45 | html.dark .site-description a:hover { 46 | color: #ddd; 47 | text-decoration: underline; 48 | } 49 | 50 | html.dark a:hover { 51 | opacity: 0.8; 52 | } 53 | 54 | html.dark .post-tags .tags a { 55 | border: 1px solid #ddd; 56 | color: #ddd; 57 | } 58 | 59 | html.dark .site-title a { 60 | color: #ddd; 61 | text-decoration: none !important; 62 | } 63 | 64 | html.dark .header nav, 65 | html.dark .footer { 66 | border-color: #333; 67 | } 68 | 69 | html.dark .highlight { 70 | background-color: #333; 71 | } 72 | -------------------------------------------------------------------------------- /themes/hugo-ink/static/css/main.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500&display=swap'); 2 | 3 | body { 4 | font-family: "Inter", sans-serif; 5 | font-weight: 400; 6 | color: #333; 7 | line-height: 1.8em; 8 | font-size: 17px; 9 | } 10 | 11 | a { 12 | color: #3700ff; 13 | text-decoration: none; 14 | word-break: break-word; 15 | } 16 | a:hover { 17 | border-bottom: 2px solid #3700ff; 18 | } 19 | 20 | html,button,input,select,textarea { 21 | color: #333; 22 | } 23 | 24 | ::-moz-selection { 25 | background: #3700ff; 26 | text-shadow: none; 27 | color: #fff; 28 | } 29 | 30 | ::selection { 31 | background: #3700ff; 32 | text-shadow: none; 33 | color: #fff; 34 | } 35 | 36 | hr { 37 | display: block; 38 | height: 1px; 39 | border: 0; 40 | border-top: 1px solid #ccc; 41 | margin: 1rem 0; 42 | padding: 0; 43 | } 44 | 45 | img { 46 | margin: 10px auto 10px auto; 47 | max-width: 100%; 48 | display: block; 49 | } 50 | 51 | a img { 52 | border:none; 53 | } 54 | 55 | figure { 56 | margin: 0; 57 | text-align: center; 58 | } 59 | 60 | fieldset { 61 | border: 0; 62 | margin: 0; 63 | padding: 0; 64 | } 65 | 66 | table { 67 | -ms-overflow-style: -ms-autohiding-scrollbar; 68 | -webkit-overflow-scrolling: touch; 69 | background-color: transparent; 70 | margin-bottom: 1rem; 71 | overflow-x: auto; 72 | width: 100%; 73 | } 74 | 75 | table th, 76 | table td { 77 | border-bottom: 1px solid #dee2e6; 78 | padding: 0.75rem; 79 | vertical-align: top; 80 | } 81 | 82 | table thead th { 83 | border-bottom: 2px solid #dee2e6; 84 | vertical-align: bottom; 85 | } 86 | 87 | table tbody + tbody { 88 | border-top: 2px solid #dee2e6; 89 | } 90 | 91 | table tbody tr:nth-of-type(even) { 92 | background-color: rgba(0, 0, 0, 0.15); 93 | } 94 | 95 | table th { 96 | background-color: #212529; 97 | border-color: #32383e; 98 | color: #fff; 99 | } 100 | 101 | textarea { 102 | resize: vertical; 103 | } 104 | 105 | blockquote { 106 | margin-left: 1rem; 107 | font-style: italic; 108 | font-size: 1.4rem; 109 | font-family: Georgia,bitstream charter,serif; 110 | border-left: 3px solid; 111 | border-color: #3700ff; 112 | padding-left: 20px; 113 | } 114 | 115 | blockquote cite { 116 | font-size: 70%; 117 | opacity: .8; 118 | } 119 | 120 | blockquote em { 121 | font-weight: 600; 122 | } 123 | 124 | 125 | h1, h2, h3, h4, h5, h6 { 126 | color: #333; 127 | font-weight: 500; 128 | line-height: 1.3em; 129 | margin: 30px 0 20px 0; 130 | } 131 | 132 | h1 { 133 | font-size: 2.75rem; 134 | } 135 | 136 | h2 { 137 | font-size: 2rem; 138 | } 139 | 140 | h3 { 141 | font-size: 1.6rem; 142 | } 143 | 144 | h4 { 145 | font-size: 1.2rem; 146 | } 147 | 148 | h5 { 149 | font-size: 1rem; 150 | } 151 | 152 | h6 { 153 | font-size: .9rem; 154 | } 155 | 156 | .align-center { 157 | text-align: center; 158 | } 159 | 160 | .align-left { 161 | text-align: left; 162 | } 163 | 164 | .align-right { 165 | text-align: right; 166 | } 167 | 168 | ul { 169 | padding-left: 15px; 170 | } 171 | 172 | ul.flat { 173 | margin: 0; 174 | padding: 0; 175 | } 176 | 177 | ul.flat li { 178 | display: block; 179 | list-style: none; 180 | margin-left: 0; 181 | } 182 | 183 | .prevent-collapse { 184 | min-height: .1rem 185 | } 186 | 187 | .smaller { 188 | font-size: 70%; 189 | } 190 | 191 | ul { 192 | list-style: disc inside; 193 | } 194 | 195 | .post ul li { 196 | margin-bottom: 10px; 197 | } 198 | 199 | .post ul li p { 200 | display: inline; 201 | } 202 | 203 | .highlight pre { 204 | margin-bottom: 0; 205 | margin-top: 0; 206 | padding: 20px; 207 | background-color: transparent !important; 208 | } 209 | 210 | .highlight { 211 | background: 0 0; 212 | background-color: #FAFAFA; 213 | } 214 | 215 | .wrapper { 216 | max-width: 760px; 217 | margin: 0 auto; 218 | } 219 | 220 | .container { 221 | max-width: 800px; 222 | margin-top: 30px; 223 | } 224 | 225 | .header { 226 | margin-bottom: 20px; 227 | padding-bottom: 20px; 228 | } 229 | 230 | .header .avatar { 231 | float: left; 232 | margin: 0 20px 0 0; 233 | } 234 | .header .avatar img { 235 | width: 64px; 236 | height: 64px; 237 | overflow: hidden; 238 | border-radius: 100%; 239 | } 240 | .header .site-title { 241 | margin: 0; 242 | } 243 | .site-title a { 244 | color: #333; 245 | text-decoration: none !important; 246 | } 247 | .site-title a:hover { 248 | border-bottom-width: 3px; 249 | } 250 | 251 | .header .site-description { 252 | display: flex; 253 | justify-content: space-between; 254 | } 255 | .header .site-description p { 256 | margin: 0 0 10px 0; 257 | } 258 | 259 | .header nav { 260 | border-top: 1px solid #eee; 261 | padding-top: 15px; 262 | } 263 | 264 | .header nav ul, 265 | .header nav li { 266 | margin: 0; 267 | padding: 0; 268 | } 269 | 270 | .header nav li { 271 | display: inline-block; 272 | list-style: none; 273 | margin: 0 30px 0 0; 274 | } 275 | .header nav.social a { 276 | color: #333; 277 | } 278 | .header nav.social a:hover { 279 | color: #3700ff; 280 | } 281 | 282 | .header .site-description nav { 283 | margin: 0; 284 | padding: 0; 285 | border: none; 286 | min-width: 50px; 287 | margin-left: 15px; 288 | } 289 | 290 | .header .site-description nav ul svg { 291 | max-height: 15px; 292 | } 293 | 294 | .header .site-description .scheme-toggle { 295 | height: 100%; 296 | } 297 | 298 | .header .site-description .scheme-toggle a svg { 299 | max-height: 15px; 300 | } 301 | 302 | .header .site-description .scheme-toggle a.dark svg { 303 | fill: #f8e04f; 304 | color: #f8e04f; 305 | } 306 | 307 | .header .site-description .scheme-toggle a.light svg { 308 | fill: grey; 309 | color: black; 310 | } 311 | 312 | .section .section-header { 313 | font-size: 0.75rem; 314 | font-weight: 600; 315 | text-transform: uppercase; 316 | color: #999; 317 | margin-bottom: 20px; 318 | letter-spacing: 1px; 319 | } 320 | 321 | .recent-posts .posts .post { 322 | margin-bottom: 45px; 323 | } 324 | 325 | .post-header { 326 | display: flex; 327 | } 328 | .post-header .meta .date { 329 | margin-right: 30px; 330 | width: 64px; 331 | text-align: center; 332 | } 333 | .post-header .meta .date .day { 334 | font-family: "Playfair Display", serif; 335 | font-weight: 700; 336 | line-height: 0.45em; 337 | font-size: 3em; 338 | display: block; 339 | margin-bottom: 20px; 340 | } 341 | .post-header .meta .date .rest { 342 | display: block; 343 | font-size: 0.75em; 344 | } 345 | .post-header h1.title { 346 | margin: -10px 0 0 0; 347 | } 348 | 349 | .post .title.small { 350 | margin: 0 0 10px 0; 351 | } 352 | .post .post-header { 353 | margin-bottom: 30px; 354 | } 355 | 356 | .post .draft-label { 357 | color: #3700ff; 358 | text-decoration: none; 359 | padding: 2px 4px; 360 | border-radius: 4px; 361 | margin-left: 6px; 362 | background-color: #f9f2f4; 363 | } 364 | 365 | .post .tags a { 366 | display: inline-block; 367 | border: 1px solid #3700ff; 368 | border-radius: 3px; 369 | padding: 0px 6px; 370 | color: #3700ff; 371 | line-height: 20px; 372 | font-size: 0.85em; 373 | text-decoration: none; 374 | margin: 0 10px 0 0; 375 | } 376 | 377 | .list .posts .post-header .meta { 378 | margin-bottom: 0; 379 | margin-left: 5px; 380 | } 381 | 382 | .footer { 383 | text-align: right; 384 | font-size: 0.75em; 385 | color: #999; 386 | border-top: 1px solid #f4f4f4; 387 | margin-top: 40px; 388 | padding: 15px 0; 389 | } 390 | .footer a { 391 | color: #666; 392 | } 393 | .footer a:hover { 394 | color: #3700ff; 395 | } 396 | 397 | .tag-cloud { 398 | margin-top: 20px; 399 | } 400 | 401 | .tag-cloud a { 402 | margin-right: 15px; 403 | } 404 | 405 | .pagination { 406 | margin: 0; 407 | padding: 0; 408 | text-align: left; 409 | display: flex; 410 | justify-content: space-between; 411 | } 412 | 413 | .pagination li { 414 | list-style: none; 415 | display: inline-block; 416 | margin: 0; 417 | padding: 0; 418 | } 419 | 420 | .pagination .page-prev { 421 | margin-right: 20px; 422 | padding-right: 20px; 423 | } 424 | 425 | .pagination .page-item.page-prev { 426 | text-align: left; 427 | } 428 | 429 | .pagination .page-item.page-next { 430 | text-align: right; 431 | } 432 | 433 | @media (max-width: 900px) { 434 | body { 435 | padding: 20px; 436 | } 437 | 438 | h1 { 439 | font-size: 1.8rem; 440 | } 441 | 442 | h2 { 443 | font-size: 1.6rem; 444 | } 445 | 446 | h3 { 447 | font-size: 1.2rem; 448 | } 449 | 450 | h4 { 451 | font-size: 1rem; 452 | } 453 | 454 | .container { 455 | margin-top: 10px; 456 | } 457 | 458 | .header .nav.social li { 459 | margin: 0; 460 | } 461 | .header .nav li { 462 | margin: 0 10px 0 0; 463 | font-size: 0.875em; 464 | } 465 | 466 | table { 467 | -ms-overflow-style: -ms-autohiding-scrollbar; 468 | -webkit-overflow-scrolling: touch; 469 | display: block; 470 | overflow-x: auto; 471 | width: 100%; 472 | } 473 | } 474 | 475 | @media (max-width: 400px) { 476 | .header .nav.social { 477 | min-width: auto; 478 | margin: 0; 479 | } 480 | .header .site-description { 481 | font-size: 1em; 482 | margin-top: 10px; 483 | font-size: 0.875em; 484 | line-height: 1.4em; 485 | } 486 | } -------------------------------------------------------------------------------- /themes/hugo-ink/static/css/normalize.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */img,legend{border:0}legend,td,th{padding:0}html{font-family:serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}table{border-collapse:collapse;border-spacing:0} -------------------------------------------------------------------------------- /themes/hugo-ink/static/js/feather.min.js: -------------------------------------------------------------------------------- 1 | !function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n():"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?exports.feather=n():e.feather=n()}("undefined"!=typeof self?self:this,function(){return function(e){var n={};function i(l){if(n[l])return n[l].exports;var t=n[l]={i:l,l:!1,exports:{}};return e[l].call(t.exports,t,t.exports,i),t.l=!0,t.exports}return i.m=e,i.c=n,i.d=function(e,n,l){i.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:l})},i.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},i.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(n,"a",n),n},i.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},i.p="",i(i.s=61)}([function(e,n,i){var l=i(20)("wks"),t=i(11),r=i(1).Symbol,o="function"==typeof r;(e.exports=function(e){return l[e]||(l[e]=o&&r[e]||(o?r:t)("Symbol."+e))}).store=l},function(e,n){var i=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=i)},function(e,n){var i=e.exports={version:"2.5.6"};"number"==typeof __e&&(__e=i)},function(e,n){var i={}.hasOwnProperty;e.exports=function(e,n){return i.call(e,n)}},function(e,n,i){e.exports=!i(27)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},function(e,n,i){var l=i(13);e.exports=function(e){if(!l(e))throw TypeError(e+" is not an object!");return e}},function(e,n,i){var l=i(5),t=i(56),r=i(55),o=Object.defineProperty;n.f=i(4)?Object.defineProperty:function(e,n,i){if(l(e),n=r(n,!0),l(i),t)try{return o(e,n,i)}catch(e){}if("get"in i||"set"in i)throw TypeError("Accessors not supported!");return"value"in i&&(e[n]=i.value),e}},function(e,n,i){var l=i(6),t=i(12);e.exports=i(4)?function(e,n,i){return l.f(e,n,t(1,i))}:function(e,n,i){return e[n]=i,e}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var l=o(i(35)),t=o(i(33)),r=o(i(32));function o(e){return e&&e.__esModule?e:{default:e}}n.default=Object.keys(t.default).map(function(e){return new l.default(e,t.default[e],r.default[e])}).reduce(function(e,n){return e[n.name]=n,e},{})},function(e,n,i){var l=i(20)("keys"),t=i(11);e.exports=function(e){return l[e]||(l[e]=t(e))}},function(e,n){e.exports={}},function(e,n){var i=0,l=Math.random();e.exports=function(e){return"Symbol(".concat(void 0===e?"":e,")_",(++i+l).toString(36))}},function(e,n){e.exports=function(e,n){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:n}}},function(e,n){e.exports=function(e){return"object"==typeof e?null!==e:"function"==typeof e}},function(e,n){e.exports=function(e){if(void 0==e)throw TypeError("Can't call method on "+e);return e}},function(e,n){var i=Math.ceil,l=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?l:i)(e)}},function(e,n,i){var l; 2 | /*! 3 | Copyright (c) 2016 Jed Watson. 4 | Licensed under the MIT License (MIT), see 5 | http://jedwatson.github.io/classnames 6 | */ 7 | /*! 8 | Copyright (c) 2016 Jed Watson. 9 | Licensed under the MIT License (MIT), see 10 | http://jedwatson.github.io/classnames 11 | */ 12 | !function(){"use strict";var i=function(){function e(){}function n(e,n){for(var i=n.length,l=0;l0?t(l(e),9007199254740991):0}},function(e,n){var i={}.toString;e.exports=function(e){return i.call(e).slice(8,-1)}},function(e,n,i){var l=i(48),t=i(14);e.exports=function(e){return l(t(e))}},function(e,n,i){var l=i(54);e.exports=function(e,n,i){if(l(e),void 0===n)return e;switch(i){case 1:return function(i){return e.call(n,i)};case 2:return function(i,l){return e.call(n,i,l)};case 3:return function(i,l,t){return e.call(n,i,l,t)}}return function(){return e.apply(n,arguments)}}},function(e,n,i){var l=i(1),t=i(7),r=i(3),o=i(11)("src"),a=Function.toString,c=(""+a).split("toString");i(2).inspectSource=function(e){return a.call(e)},(e.exports=function(e,n,i,a){var y="function"==typeof i;y&&(r(i,"name")||t(i,"name",n)),e[n]!==i&&(y&&(r(i,o)||t(i,o,e[n]?""+e[n]:c.join(String(n)))),e===l?e[n]=i:a?e[n]?e[n]=i:t(e,n,i):(delete e[n],t(e,n,i)))})(Function.prototype,"toString",function(){return"function"==typeof this&&this[o]||a.call(this)})},function(e,n,i){var l=i(13),t=i(1).document,r=l(t)&&l(t.createElement);e.exports=function(e){return r?t.createElement(e):{}}},function(e,n){e.exports=function(e){try{return!!e()}catch(e){return!0}}},function(e,n,i){var l=i(1),t=i(2),r=i(7),o=i(25),a=i(24),c=function(e,n,i){var y,p,h,x,s=e&c.F,u=e&c.G,d=e&c.S,f=e&c.P,v=e&c.B,g=u?l:d?l[n]||(l[n]={}):(l[n]||{}).prototype,m=u?t:t[n]||(t[n]={}),M=m.prototype||(m.prototype={});for(y in u&&(i=n),i)h=((p=!s&&g&&void 0!==g[y])?g:i)[y],x=v&&p?a(h,l):f&&"function"==typeof h?a(Function.call,h):h,g&&o(g,y,h,e&c.U),m[y]!=h&&r(m,y,x),f&&M[y]!=h&&(M[y]=h)};l.core=t,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,c.U=64,c.R=128,e.exports=c},function(e,n){e.exports=!1},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var l=Object.assign||function(e){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{};if("undefined"==typeof document)throw new Error("`feather.replace()` only works in a browser environment.");var n=document.querySelectorAll("[data-feather]");Array.from(n).forEach(function(n){return function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=function(e){return Array.from(e.attributes).reduce(function(e,n){return e[n.name]=n.value,e},{})}(e),o=i["data-feather"];delete i["data-feather"];var a=r.default[o].toSvg(l({},n,i,{class:(0,t.default)(n.class,i.class)})),c=(new DOMParser).parseFromString(a,"image/svg+xml").querySelector("svg");e.parentNode.replaceChild(c,e)}(n,e)})}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var l,t=i(8),r=(l=t)&&l.__esModule?l:{default:l};n.default=function(e){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(console.warn("feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead."),!e)throw new Error("The required `key` (icon name) parameter is missing.");if(!r.default[e])throw new Error("No icon matching '"+e+"'. See the complete list of icons at https://feathericons.com");return r.default[e].toSvg(n)}},function(e){e.exports={activity:["pulse","health","action","motion"],airplay:["stream","cast","mirroring"],"alert-circle":["warning"],"alert-octagon":["warning"],"alert-triangle":["warning"],"at-sign":["mention"],award:["achievement","badge"],aperture:["camera","photo"],bell:["alarm","notification"],"bell-off":["alarm","notification","silent"],bluetooth:["wireless"],"book-open":["read"],book:["read","dictionary","booklet","magazine"],bookmark:["read","clip","marker","tag"],briefcase:["work","bag","baggage","folder"],clipboard:["copy"],clock:["time","watch","alarm"],"cloud-drizzle":["weather","shower"],"cloud-lightning":["weather","bolt"],"cloud-rain":["weather"],"cloud-snow":["weather","blizzard"],cloud:["weather"],codepen:["logo"],codesandbox:["logo"],coffee:["drink","cup","mug","tea","cafe","hot","beverage"],command:["keyboard","cmd"],compass:["navigation","safari","travel"],copy:["clone","duplicate"],"corner-down-left":["arrow"],"corner-down-right":["arrow"],"corner-left-down":["arrow"],"corner-left-up":["arrow"],"corner-right-down":["arrow"],"corner-right-up":["arrow"],"corner-up-left":["arrow"],"corner-up-right":["arrow"],"credit-card":["purchase","payment","cc"],crop:["photo","image"],crosshair:["aim","target"],database:["storage"],delete:["remove"],disc:["album","cd","dvd","music"],"dollar-sign":["currency","money","payment"],droplet:["water"],edit:["pencil","change"],"edit-2":["pencil","change"],"edit-3":["pencil","change"],eye:["view","watch"],"eye-off":["view","watch"],"external-link":["outbound"],facebook:["logo"],"fast-forward":["music"],figma:["logo","design","tool"],film:["movie","video"],"folder-minus":["directory"],"folder-plus":["directory"],folder:["directory"],frown:["emoji","face","bad","sad","emotion"],gift:["present","box","birthday","party"],"git-branch":["code","version control"],"git-commit":["code","version control"],"git-merge":["code","version control"],"git-pull-request":["code","version control"],github:["logo","version control"],gitlab:["logo","version control"],global:["world","browser","language","translate"],"hard-drive":["computer","server"],hash:["hashtag","number","pound"],headphones:["music","audio"],heart:["like","love"],"help-circle":["question mark"],hexagon:["shape","node.js","logo"],home:["house"],image:["picture"],inbox:["email"],instagram:["logo","camera"],key:["password","login","authentication"],"life-bouy":["help","life ring","support"],linkedin:["logo"],lock:["security","password"],"log-in":["sign in","arrow"],"log-out":["sign out","arrow"],mail:["email"],"map-pin":["location","navigation","travel","marker"],map:["location","navigation","travel"],maximize:["fullscreen"],"maximize-2":["fullscreen","arrows"],meh:["emoji","face","neutral","emotion"],menu:["bars","navigation","hamburger"],"message-circle":["comment","chat"],"message-square":["comment","chat"],"mic-off":["record"],mic:["record"],minimize:["exit fullscreen"],"minimize-2":["exit fullscreen","arrows"],monitor:["tv"],moon:["dark","night"],"more-horizontal":["ellipsis"],"more-vertical":["ellipsis"],"mouse-pointer":["arrow","cursor"],move:["arrows"],navigation:["location","travel"],"navigation-2":["location","travel"],octagon:["stop"],package:["box"],paperclip:["attachment"],pause:["music","stop"],"pause-circle":["music","stop"],"pen-tool":["vector","drawing"],play:["music","start"],"play-circle":["music","start"],plus:["add","new"],"plus-circle":["add","new"],"plus-square":["add","new"],pocket:["logo","save"],power:["on","off"],radio:["signal"],rewind:["music"],rss:["feed","subscribe"],save:["floppy disk"],search:["find","magnifier","magnifying glass"],send:["message","mail","paper airplane"],settings:["cog","edit","gear","preferences"],shield:["security"],"shield-off":["security"],"shopping-bag":["ecommerce","cart","purchase","store"],"shopping-cart":["ecommerce","cart","purchase","store"],shuffle:["music"],"skip-back":["music"],"skip-forward":["music"],slash:["ban","no"],sliders:["settings","controls"],smile:["emoji","face","happy","good","emotion"],speaker:["music"],star:["bookmark","favorite","like"],sun:["brightness","weather","light"],sunrise:["weather"],sunset:["weather"],tag:["label"],target:["bullseye"],terminal:["code","command line"],"thumbs-down":["dislike","bad"],"thumbs-up":["like","good"],"toggle-left":["on","off","switch"],"toggle-right":["on","off","switch"],trash:["garbage","delete","remove"],"trash-2":["garbage","delete","remove"],triangle:["delta"],truck:["delivery","van","shipping"],twitter:["logo"],umbrella:["rain","weather"],"video-off":["camera","movie","film"],video:["camera","movie","film"],voicemail:["phone"],volume:["music","sound","mute"],"volume-1":["music","sound"],"volume-2":["music","sound"],"volume-x":["music","sound","mute"],watch:["clock","time"],wind:["weather","air"],"x-circle":["cancel","close","delete","remove","times"],"x-octagon":["delete","stop","alert","warning","times"],"x-square":["cancel","close","delete","remove","times"],x:["cancel","close","delete","remove","times"],youtube:["logo","video","play"],"zap-off":["flash","camera","lightning"],zap:["flash","camera","lightning"]}},function(e){e.exports={activity:'',airplay:'',"alert-circle":'',"alert-octagon":'',"alert-triangle":'',"align-center":'',"align-justify":'',"align-left":'',"align-right":'',anchor:'',aperture:'',archive:'',"arrow-down-circle":'',"arrow-down-left":'',"arrow-down-right":'',"arrow-down":'',"arrow-left-circle":'',"arrow-left":'',"arrow-right-circle":'',"arrow-right":'',"arrow-up-circle":'',"arrow-up-left":'',"arrow-up-right":'',"arrow-up":'',"at-sign":'',award:'',"bar-chart-2":'',"bar-chart":'',"battery-charging":'',battery:'',"bell-off":'',bell:'',bluetooth:'',bold:'',"book-open":'',book:'',bookmark:'',box:'',briefcase:'',calendar:'',"camera-off":'',camera:'',cast:'',"check-circle":'',"check-square":'',check:'',"chevron-down":'',"chevron-left":'',"chevron-right":'',"chevron-up":'',"chevrons-down":'',"chevrons-left":'',"chevrons-right":'',"chevrons-up":'',chrome:'',circle:'',clipboard:'',clock:'',"cloud-drizzle":'',"cloud-lightning":'',"cloud-off":'',"cloud-rain":'',"cloud-snow":'',cloud:'',code:'',codepen:'',codesandbox:'',coffee:'',columns:'',command:'',compass:'',copy:'',"corner-down-left":'',"corner-down-right":'',"corner-left-down":'',"corner-left-up":'',"corner-right-down":'',"corner-right-up":'',"corner-up-left":'',"corner-up-right":'',cpu:'',"credit-card":'',crop:'',crosshair:'',database:'',delete:'',disc:'',"dollar-sign":'',"download-cloud":'',download:'',droplet:'',"edit-2":'',"edit-3":'',edit:'',"external-link":'',"eye-off":'',eye:'',facebook:'',"fast-forward":'',feather:'',figma:'',"file-minus":'',"file-plus":'',"file-text":'',file:'',film:'',filter:'',flag:'',"folder-minus":'',"folder-plus":'',folder:'',frown:'',gift:'',"git-branch":'',"git-commit":'',"git-merge":'',"git-pull-request":'',github:'',gitlab:'',globe:'',grid:'',"hard-drive":'',hash:'',headphones:'',heart:'',"help-circle":'',hexagon:'',home:'',image:'',inbox:'',info:'',instagram:'',italic:'',key:'',layers:'',layout:'',"life-buoy":'',"link-2":'',link:'',linkedin:'',list:'',loader:'',lock:'',"log-in":'',"log-out":'',mail:'',"map-pin":'',map:'',"maximize-2":'',maximize:'',meh:'',menu:'',"message-circle":'',"message-square":'',"mic-off":'',mic:'',"minimize-2":'',minimize:'',"minus-circle":'',"minus-square":'',minus:'',monitor:'',moon:'',"more-horizontal":'',"more-vertical":'',"mouse-pointer":'',move:'',music:'',"navigation-2":'',navigation:'',octagon:'',package:'',paperclip:'',"pause-circle":'',pause:'',"pen-tool":'',percent:'',"phone-call":'',"phone-forwarded":'',"phone-incoming":'',"phone-missed":'',"phone-off":'',"phone-outgoing":'',phone:'',"pie-chart":'',"play-circle":'',play:'',"plus-circle":'',"plus-square":'',plus:'',pocket:'',power:'',printer:'',radio:'',"refresh-ccw":'',"refresh-cw":'',repeat:'',rewind:'',"rotate-ccw":'',"rotate-cw":'',rss:'',save:'',scissors:'',search:'',send:'',server:'',settings:'',"share-2":'',share:'',"shield-off":'',shield:'',"shopping-bag":'',"shopping-cart":'',shuffle:'',sidebar:'',"skip-back":'',"skip-forward":'',slack:'',slash:'',sliders:'',smartphone:'',smile:'',speaker:'',square:'',star:'',"stop-circle":'',sun:'',sunrise:'',sunset:'',tablet:'',tag:'',target:'',terminal:'',thermometer:'',"thumbs-down":'',"thumbs-up":'',"toggle-left":'',"toggle-right":'',"trash-2":'',trash:'',trello:'',"trending-down":'',"trending-up":'',triangle:'',truck:'',tv:'',twitter:'',type:'',umbrella:'',underline:'',unlock:'',"upload-cloud":'',upload:'',"user-check":'',"user-minus":'',"user-plus":'',"user-x":'',user:'',users:'',"video-off":'',video:'',voicemail:'',"volume-1":'',"volume-2":'',"volume-x":'',volume:'',watch:'',"wifi-off":'',wifi:'',wind:'',"x-circle":'',"x-octagon":'',"x-square":'',x:'',youtube:'',"zap-off":'',zap:'',"zoom-in":'',"zoom-out":''}},function(e){e.exports={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor","stroke-width":2,"stroke-linecap":"round","stroke-linejoin":"round"}},function(e,n,i){"use strict";Object.defineProperty(n,"__esModule",{value:!0});var l=Object.assign||function(e){for(var n=1;n2&&void 0!==arguments[2]?arguments[2]:[];!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.name=n,this.contents=i,this.tags=t,this.attrs=l({},o.default,{class:"feather feather-"+n})}return t(e,[{key:"toSvg",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return""+this.contents+""}},{key:"toString",value:function(){return this.contents}}]),e}();n.default=c},function(e,n,i){"use strict";var l=o(i(8)),t=o(i(31)),r=o(i(30));function o(e){return e&&e.__esModule?e:{default:e}}e.exports={icons:l.default,toSvg:t.default,replace:r.default}},function(e,n,i){var l=i(0)("iterator"),t=!1;try{var r=[7][l]();r.return=function(){t=!0},Array.from(r,function(){throw 2})}catch(e){}e.exports=function(e,n){if(!n&&!t)return!1;var i=!1;try{var r=[7],o=r[l]();o.next=function(){return{done:i=!0}},r[l]=function(){return o},e(r)}catch(e){}return i}},function(e,n,i){var l=i(22),t=i(0)("toStringTag"),r="Arguments"==l(function(){return arguments}());e.exports=function(e){var n,i,o;return void 0===e?"Undefined":null===e?"Null":"string"==typeof(i=function(e,n){try{return e[n]}catch(e){}}(n=Object(e),t))?i:r?l(n):"Object"==(o=l(n))&&"function"==typeof n.callee?"Arguments":o}},function(e,n,i){var l=i(38),t=i(0)("iterator"),r=i(10);e.exports=i(2).getIteratorMethod=function(e){if(void 0!=e)return e[t]||e["@@iterator"]||r[l(e)]}},function(e,n,i){"use strict";var l=i(6),t=i(12);e.exports=function(e,n,i){n in e?l.f(e,n,t(0,i)):e[n]=i}},function(e,n,i){var l=i(10),t=i(0)("iterator"),r=Array.prototype;e.exports=function(e){return void 0!==e&&(l.Array===e||r[t]===e)}},function(e,n,i){var l=i(5);e.exports=function(e,n,i,t){try{return t?n(l(i)[0],i[1]):n(i)}catch(n){var r=e.return;throw void 0!==r&&l(r.call(e)),n}}},function(e,n,i){"use strict";var l=i(24),t=i(28),r=i(17),o=i(42),a=i(41),c=i(21),y=i(40),p=i(39);t(t.S+t.F*!i(37)(function(e){Array.from(e)}),"Array",{from:function(e){var n,i,t,h,x=r(e),s="function"==typeof this?this:Array,u=arguments.length,d=u>1?arguments[1]:void 0,f=void 0!==d,v=0,g=p(x);if(f&&(d=l(d,u>2?arguments[2]:void 0,2)),void 0==g||s==Array&&a(g))for(i=new s(n=c(x.length));n>v;v++)y(i,v,f?d(x[v],v):x[v]);else for(h=g.call(x),i=new s;!(t=h.next()).done;v++)y(i,v,f?o(h,d,[t.value,v],!0):t.value);return i.length=v,i}})},function(e,n,i){var l=i(3),t=i(17),r=i(9)("IE_PROTO"),o=Object.prototype;e.exports=Object.getPrototypeOf||function(e){return e=t(e),l(e,r)?e[r]:"function"==typeof e.constructor&&e instanceof e.constructor?e.constructor.prototype:e instanceof Object?o:null}},function(e,n,i){var l=i(1).document;e.exports=l&&l.documentElement},function(e,n,i){var l=i(15),t=Math.max,r=Math.min;e.exports=function(e,n){return(e=l(e))<0?t(e+n,0):r(e,n)}},function(e,n,i){var l=i(23),t=i(21),r=i(46);e.exports=function(e){return function(n,i,o){var a,c=l(n),y=t(c.length),p=r(o,y);if(e&&i!=i){for(;y>p;)if((a=c[p++])!=a)return!0}else for(;y>p;p++)if((e||p in c)&&c[p]===i)return e||p||0;return!e&&-1}}},function(e,n,i){var l=i(22);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==l(e)?e.split(""):Object(e)}},function(e,n,i){var l=i(3),t=i(23),r=i(47)(!1),o=i(9)("IE_PROTO");e.exports=function(e,n){var i,a=t(e),c=0,y=[];for(i in a)i!=o&&l(a,i)&&y.push(i);for(;n.length>c;)l(a,i=n[c++])&&(~r(y,i)||y.push(i));return y}},function(e,n,i){var l=i(49),t=i(19);e.exports=Object.keys||function(e){return l(e,t)}},function(e,n,i){var l=i(6),t=i(5),r=i(50);e.exports=i(4)?Object.defineProperties:function(e,n){t(e);for(var i,o=r(n),a=o.length,c=0;a>c;)l.f(e,i=o[c++],n[i]);return e}},function(e,n,i){var l=i(5),t=i(51),r=i(19),o=i(9)("IE_PROTO"),a=function(){},c=function(){var e,n=i(26)("iframe"),l=r.length;for(n.style.display="none",i(45).appendChild(n),n.src="javascript:",(e=n.contentWindow.document).open(),e.write("