什么时候会崩溃

父亲去世后,在去年(2019)的最后几个月,我并没有很悲伤。可能是因为我知道,我需要坚强,处理那些必须要我这个儿子去处理的事情。

但是到了今年,因为没有那么多的压力,也开始慢慢的有时间去读书,去研究自己的生活的时候,开始慢慢的出现了崩溃的迹象。特别是看到一些小的东西的时候,看到别人的父子的生活的时候,就会莫名的哭起来。

好在,我习惯了默默掉泪,即使是在办公室,也不会太过显眼。悲伤过后,只不过是一声长叹。唉!

父亲办公室的电脑中我拷贝下来的文件
我在推上看到的信息后的评论。

背景带给我们的影响

我目前在的组里有一个年轻的实习生,和我一样,都是程序员,目前在组里的工作,也是他负责了大量的开发的工作,而我更多的去做运营相关的动作。

在开发的时候,我发现了我们二者的不同。

在开发一个产品的时候,我的开发顺序是

先写后台功能-> 再写前台样式

而实习生则不同,他的顺序和我正好相反

先写前台样式->再写后台功能

这是个很有意思的现象,按照一般的软件开发顺序而言,我的开发顺序其实是不正常的,而实习生的顺序才是正常的。

这个问题让我思考,到底为什么我要这么做?

后来想了想,这个可能是我的出身问题,我从运维工程师出身,后演变成后端程序员,也就是近两年才开始成为一个前端工程师,这种路径依赖,让我习惯性先写后端。

不过,这样也有这样的好处,就是我会先去校验核心功能是否可以完成,再去搞定具体的样式,从而避免了有可能出现的UI都写好了,最后功能无法实现的问题。

巧妇难为无米之炊

我在做运营的时候,经常会陷入迷茫的状态。就是我脑海中的运营和开发的思维的冲突。

同事在分享:「运营要无能,产品经理要白痴」

给我一种很奇怪的感觉:这种什么都不用做的工作好不好呢?当然好,但是,是不是我们在什么场景下都可以去做呢?

中国古话,巧妇难为无米之炊,可似乎他们都在试图去想要做到无米之炊。这让我开始觉得这个事情不太对了。为什么你可以做无米之炊?这到底是你自己的能力,还是平台的能力?

要不要思考?但如果思考后条件不满足呢?

如果是平台的能力,这并不能算上是无米之炊,你在消费平台的资源。

头疼。头疼。

2020 年 3 月 月度总结

TL;DR

这个月买了新的设备 —— 口袋阅 ,读书时间显著提升。

月度总结

工作

腾讯的工作不开心。特别是我看了奈飞文化手册后,更进一步的明确了我为什么不开心,因为信息不透明。

  • 关于信息透明这个事情,我和小昱聊了一下,小昱觉得,这个问题其实不是信息透明的问题。实际上,任何人都很难做到信息透明,即使是我们 Team 的大 Leader ,也很难知道整个 Team 的工作。这个需要是我自己主动的提问。
    • 她提到,希望我能放低一些自己的身段,主动多问一些信息。这个东西我认可,因为的确是我自己的问题。
    • 回想一下,自己还是有点不够沉稳,还是因为自己过去的成果沾沾自喜。

这个月没有面试,依然是疫情的原因,不过换个角度来看,我也该去面试了。

生活

Side Project

  • 这个月给自己的两个小程序改了名,一个走个人整理的方向;一个走微信群辅助的方向。
  • 准备做多推
  • 准备做多抓
  • Telepage 还没有上线

这个月 Side Project 没有上线,希望四月份至少可以上线 3 个产品(多推、多抓、Telepage)

写作

本月因为工作的原因,写了一些文章,但是其实并不系统。希望四月份可以把最近做的一些知识储备给完整的整理出来。

暂定 4 月份文字产出 30000 字吧,平均下来每天也就 1000 字;我写的内容稍微一写就够了。

财务状况

本月财务状况总体可见

本月的整体开支较大;超出平均水平。

本月的最大的开支类目在教育侧,因为本月给自己报了个驾校,准备学个驾照,解决自己不会开车的问题。其次在数码产品,本月数码产品购买了 OSMO Pocket +一个显示器 + 给 iPhone 换了个电池,直奔 4000 + ;餐饮方面本月吃的比较好,所以比较高,但餐饮方面打算调整预算,而不是降低开支。

娱乐

  • 本月在娱乐上花了不少钱,买了不少 Switch 的游戏,应该在 2000 +

阅读

  • 奈飞文化手册
  • 重来2
  • 赢在下班后

年度计划对标

课程学习

一年学习 54 门课程,本月进度 0 门;全年进度 0/54;

图书阅读

一年读书 54 本,本月进度 3 本;全年进度 10/54;

电影观看

一年观看 54 部电影,本月进度 0部;全年进度 0/54

你为什么要当奋斗逼?

在绝大多数的人眼里,我都还算的上是一个很拼的人。

经常要做很多事情,有自己的成果,同时,还很年轻,可是,为什么,你还是这么拼?

有些时候, 我也在问自己,我为什么要这么拼?回老家每天老婆孩子热炕头不好么?以我的收入,回到老家,每个月绝对可以过的非常自在。但是为什么要坚持呆在大城市,不停的逼着自己往前走呢?难以相信我自己是为什么?

我自己想一想,可能是

  1. 我有太多想要实现的东西:从小我就有不少的想法,「志向远大」,虽然现实不停的击倒我。但因为我自己不断有产品产出,也让我自己开始不断的相信自己,不断的提升自己。
  2. 在我看来,大城市的生活挺好的:大城市的美女挺多的,很养眼。但可能这个问题结婚以后就没有了。
  3. 我所在的行业只在大城市:互联网行业基本上还是在大城市,小城市回去可以很好的生活,但是很难有很好的发展。当然,我自己本身就具备了独立开发者的属性,所以还好。但不争的事实是我回去的话,一定会很无聊,大部分时候都呆在家里。
  4. 我父亲的影响:父亲已经去世了,但不得不说,他给我留下了很多很有价值的东西。比如他的精神。从物质上,他给我留了两套房产,这些东西,都可以被我的孩子所继承。可是,我又能给我的孩子留下什么呢?
  5. 同侪压力:peer pressure 对于我来说压力挺大,我不会不由自主的将自己与那些优秀的人对比,无论比我大,还是比我小。比我大的会想如何才能向他一样。比我小的会想现在的年轻人真厉害,要好好加油。

但是我想,总有一天,我会从深圳离开,因为对于我来说,不一定要呆在深圳,还有更多适合我的地方。

《从零开始做播客:创造网红主播》书摘

第一章 开始筹划

你需要在节目一开始想通想好如何做下去

后期软件

Audacity

准备话题大纲

背景调查和紧急话题
如果是采访某人,需要在录制前做一些背景调查。找一些有趣的话题,在提纲中作为备选。我这么说是因为有时候嘉宾可能会在节目录制过程中怯场。通常情况下,每次提出问题或抛出新话题,你希望嘉宾可以回答、讨论,并且做出延伸。不幸的是,嘉宾有时只回答一两个字,让你措手不及。发生这种情况时,看看提纲中的紧急话题。
注意时间
注意时间也很重要。不要时间不足,也不要太久。确定短播客及长播客的时间范围。就我的经验而言,播客节目的合理时长大约是45分钟到1个小时。当然,如果你是乔·罗根这样的巨星,你可以录3个小时。但那是给铁杆听众听的。
有了提纲和时长设定,你已经做好了充足的准备。需要提醒一点,找到乐趣。对提纲的遵守过犹不及。把它当作谷歌,它一直在,当你需要时会来指导拯救你。

降噪

千万不要过度降噪!如果你处理降噪太过了,会削薄声音使之变得刺耳且有强烈的齿音,所以在降噪过程中需要注意参数调整

播客托管

推荐一个网站Fiverr.com。你可以用不到100美元的价格买到一张非常棒的封面图,节目的封面相当于一本书的封面。

结束语

访问podcastingpro.com发现播客未来动向方面的书籍,并订阅我的邮件列表获取最新内容及产品信息。我们也为需要全套解决方案的人提供咨询和剪辑服务。

Rust + MicroBit 按钮调试代码

#![no_main]
#![no_std]

use panic_halt;

use microbit::hal::nrf51::{interrupt, GPIOTE, UART0};
use microbit::hal::prelude::*;
use microbit::hal::serial;
use microbit::hal::serial::BAUD115200;

use cortex_m::interrupt::Mutex;
use cortex_m::peripheral::Peripherals;
use cortex_m_rt::entry;

use core::cell::RefCell;
use core::fmt::Write;
use core::ops::DerefMut;

static GPIO: Mutex<RefCell<Option<GPIOTE>>> = Mutex::new(RefCell::new(None));
static TX: Mutex<RefCell<Option<serial::Tx<UART0>>>> = Mutex::new(RefCell::new(None));

#[entry]
fn main() -> ! {
    if let (Some(p), Some(mut cp)) = (microbit::Peripherals::take(), Peripherals::take()) {
        // 引入两个版本的外设
        cortex_m::interrupt::free(move |cs| {
            /* 开启外部设备的 GPIO 中断 */
            cp.NVIC.enable(microbit::Interrupt::GPIOTE);

            microbit::NVIC::unpend(microbit::Interrupt::GPIOTE);

            /* 切分 GPIO 口,方便使用 */
            let gpio = p.GPIO.split();

            /* 将 Button 的 IO 口作为输入 IO 口 */
            let _ = gpio.pin26.into_floating_input();
            let _ = gpio.pin17.into_floating_input();

            /* 当 GPIO 17 ( A 键)出现了下降沿的时候,触发中断 */
            p.GPIOTE.config[0]
                .write(|w| unsafe { w.mode().event().psel().bits(17).polarity().hi_to_lo() });
            p.GPIOTE.intenset.write(|w| w.in0().set_bit());
            p.GPIOTE.events_in[0].write(|w| unsafe { w.bits(0) });

            /* 当 GPIO 26 (B键)出现了下降沿的时候,触发中断 */
            p.GPIOTE.config[1]
                .write(|w| unsafe { w.mode().event().psel().bits(26).polarity().hi_to_lo() });
            p.GPIOTE.intenset.write(|w| w.in1().set_bit());
            p.GPIOTE.events_in[1].write(|w| unsafe { w.bits(0) });

            *GPIO.borrow(cs).borrow_mut() = Some(p.GPIOTE);

            /* 根据需要,设置 GPIO 口作为输入输出口 */
            let tx = gpio.pin24.into_push_pull_output().downgrade();
            let rx = gpio.pin25.into_floating_input().downgrade();

            /* 将准备的 GPIO 口作为串口来使用 */
            let (mut tx, _) = serial::Serial::uart0(p.UART0, tx, rx, BAUD115200).split();

            let _ = write!(
                tx,
                "\n\rWelcome to the buttons demo. Press buttons A and/or B for some action.\n\r",
            );
            *TX.borrow(cs).borrow_mut() = Some(tx);
        });
    }

    loop {
        continue;
    }
}

// 定义一个中断(如果函数出现了错误,就会触发中断),当我从按钮按下接收到了一个中断,这个函数就会被调用。
#[interrupt]
fn GPIOTE() {
    /* 进入中断内部的内容 */
    cortex_m::interrupt::free(|cs| {
        if let (Some(gpiote), &mut Some(ref mut tx)) = (
            GPIO.borrow(cs).borrow().as_ref(),
            TX.borrow(cs).borrow_mut().deref_mut(),
        ) {
            let buttonapressed = gpiote.events_in[0].read().bits() != 0; // 识别出 A 键按下
            let buttonbpressed = gpiote.events_in[1].read().bits() != 0; // 识别出 B 键按下

            /* 将按钮打印到串口中 */
            let _ = write!(
                tx,
                "Button pressed {}\n\r",
                match (buttonapressed, buttonbpressed) {
                    (false, false) => "",
                    (true, false) => "A",
                    (false, true) => "B",
                    (true, true) => "A + B",
                }
            );

            /* 清空事件 */
            gpiote.events_in[0].write(|w| unsafe { w.bits(0) });
            gpiote.events_in[1].write(|w| unsafe { w.bits(0) });
        }
    });
}

《金字塔原理》书摘

中文版序

结论先行,以上统下,归类分组,逻辑递进。先重要后次要,先总结后具体,先框架后细节,先结论后原因,先结果后过程,先论点后论据。

前言

金字塔原理不仅仅是一个指导写作的原理,更是指导组织思想的原理

虽然有很多关于如何写句子和段落的书,却几乎没有关于如何组织思想的书,而思想才是句子和段落要表达的内容!

虽然有很多关于如何写句子和段落的书,却几乎没有关于如何组织思想的书,而思想才是句子和段落要表达的内容!

第1篇 表达的逻辑

先了解主要的、抽象的思想,然后了解次要的、为主要思想提供支持的思想。因为主要思想总是从次要思想概括总结得出,文章中所有思想的理想组织结构也必定是一个金字塔结构

很像小时候上学的时候的议论文,总分总结构。

先了解主要的、抽象的思想,然后了解次要的、为主要思想提供支持的思想。因为主要思想总是从次要思想概括总结得出,文章中所有思想的理想组织结构也必定是一个金字塔结构

第1章 为什么要用金字塔结构

金字塔结构,颇像思维导图 & 软件工程中的树结构

大脑自动将信息归纳到金字塔结构的各组中,以便于理解和记忆。● 预先归纳到金字塔结构中的沟通内容,都更容易被人理解和记忆。● 你应有意地将沟通内容组织成金字塔结构,包括口头表达和书面表达——说话、培训、演讲、报告、述职和写文章、总结、申请、方案、计划等。

归类分组,将思想组织成金字塔

● 一次记忆不超过7个思想、概念或项目。● 找出逻辑关系。

这个思想在我们做思维导图也可以应用

● 一次记忆不超过7个思想、概念或项目。● 找出逻辑关系。

所有的思维过程(如:思考、记忆、解决问题)显然都在使用这种分组和概括的方法,以将大脑中的信息组成一个由互相关联的金字塔组成的巨大的金字塔群。如果你需要与习惯用这种思维方式的人交流,你要做的就是确保你所说的内容符合其金字塔体系中的某一部分。

自上而下表达,结论先行

受众的大脑只能逐句理解作者(演讲者、培训讲师)表达的思想。他们会假定一同出现的思想在逻辑上存在某种关系。如果你不预先告诉他们这种逻辑关系,而只是一句一句地表达你的思想,读者就会自动从中寻找共同点,将你所表达的思想归类组合,以便了解各个组合的意义。

你可以通过有效的方法表达你的思想,减少读者用在前两项活动上的时间,从而使读者能够用最少的脑力理解你表达的思想。

自下而上思考,总结概括

得出这个概括性的句子后,你思维的抽象程度就提高了一个层次,可以将得出概括性句子的段落看做只包含一个思想,而不是6个思想。通过这种有效的方法,你可以接着将3个段落(每个段落都包含一个抽象程度比单个句子高一个层次的单一思想)组织成一个章节。

文章中的思想必须符合以下规则:1.纵向:文章中任一层次上的思想必须是其下一层次思想的概括。2.横向:每组中的思想必须属于同一逻辑范畴。3.横向:每组中的思想必须按逻辑顺序组织。

组织思想基本上只可能有4种逻辑顺序:● 演绎顺序:大前提、小前提、结论● 时间(步骤)顺序:第一、第二、第三● 结构(空间)顺序:波士顿、纽约、华盛顿● 程度(重要性)顺序:最重要、次重要,等等

纵向关系

。一般的文章都是一维的(one-dimensional):一个句子接着一个句子,在纸面上基本呈现出纵向向下的结构。但是这种文字的纵向延伸却掩盖了一个事实,即思想是位于不同的抽象层次上的。根据这一事实,大主题下的任何思想都同时与文章中的其他思想发生着纵向及横向的联系。

通过纵向联系,你可以引导一种疑问/回答式的对话,从而使读者带着极大兴趣了解你的思路进展。为什么可以肯定读者会感兴趣?因为这种纵向联系会迫使读者按照你的思路产生符合逻辑的反应。

要想吸引读者的全部注意力,作者就必须在做好回答问题的准备之前,避免引起读者的疑问;也必须在引起读者疑问之前,避免先给出对该问题的答案。例如,只要你发现某篇文章在提出主要观点之前先写出了题为“我们的假设”的章节,你就可以肯定,作者根本没有给读者提出疑问的机会,就先给出了对疑问的答案。这样,在作者与读者对话的相应阶段,就不得不重复传递(或重复阅读)以上信息。

序言的结构

除非引发这种疑问/回答式对话的话语与读者有相关性,否则这种疑问/回答式对话也很难吸引读者的注意力。保证出现相关性的唯一办法,就是使这个句子直接回答你所发现的读者头脑中已存在的某一疑问。

自上而下法

自上而下法构建金字塔的步骤:1.提出主题思想。2.设想受众的主要疑问。3.写序言:背景-冲突-疑问-回答。4.与受众进行疑问/回答式对话。5.对受众的新疑问,重复进行疑问/回答式对话。

ref:scqa

这种方法迫使作者在写作构思时仅从头脑中获取与读者的疑问有关的信息。但是在具体操作中,这种方法能够迫使作者全面地考虑该疑问,而不是像表3-1中的例子那样只考虑了疑

自下而上法

自下而上思考:1.列出你想表达的所有思想要点。2.找出各要点之间的逻辑关系。3.得出结论。

第4章 序言的具体写法

文章的序言必须用讲故事的形式,也就是说,序言必须先介绍读者熟悉的某些“背景”,说明发生的“冲突”,并由此引发读者的“疑问”,然后针对该“疑问”给出“答案”。

序言的讲故事结构

你应当通过向读者讲述一个与主题有关的“故事”,引起读者对该主题的兴趣。每一个好的故事都有开头、中间和结尾,相当于引入某种“背景”、说明发生的“冲突”,并提出解决方案

如果你确实想给读者讲一个“好故事”,你就应该给他们讲一个他们已经知道的“故事”,或者是他们应当知道的“故事”(如果读者具有这方面的背景知识)

如果你要写的文章针对的读者面很广,比如是准备发表在杂志上或者出版图书,那么你的任务更多的就是“培养”读者产生某种疑问,而不是“提醒”读者想起已有的某种疑问。

关键句要点必须表达文章的思想

你最好永远不要用“背景”或“介绍”作为某一章节的标题,因为这种标题所含的信息与其他标题所含的信息肯定不在同一个抽象层次上,或者说抽象的程度不同。而且,仅列出主语而不列出完整的思想,可能会存在一种危险,即关于该主语的思想无法形成明确的归纳或演绎逻辑论证关系。

序言需要2~3段,其结构如前面的图4-2所示。说明“背景”和“冲突”的文字可以长达3~4段,但是不能再长了

关键句的每一个要点,都应该按照与全文的序言相似(但简单得多)的背景—冲突—疑问结构逐个引出。也就是说,当读者对任何一个关键句要点提出疑问时,你应当告诉读者一个简单的“故事”,以保证读者与你站在同一位置上。

序言的目的是“提示”读者而不是“告诉”读者某些信息

序言必须包含讲故事的3个要素,即“背景”、“冲突”和“答案”

序言的长度取决于读者和主题的需要

演绎推理

我建议在关键句层次上尽量避免使用演绎法论述,尽量用归纳法取而代之。为什么?因为归纳法更便于读者阅读和理解。