Nitro's

Apr 22, 2018 - Comments - tech hot

EOS的账户授权和多重签名

EOS在它的技术白皮书中介绍了账户、授权、以及多重签名的技术概念,我们也可以从EOS的代码中一窥其中的奥秘,它与BTC、ETH的区块链实现有什么区别或者有更为先进的地方,那就需要先从概念入手细细体会。 钱包 钱包是一个存储账户Key、权限Key的客户端。它支持一个或者多个账户,通过高复杂度的密码来加锁、解锁钱包。EOS的代码中自带了一个轻量级的钱包-keosd。keosd通过调用cleos接口来与区块链建立连接。 在这一点上与BTC、ETH基本一致,由于BTC、ETH并没有多权限、授权的概念,这是EOS钱包中的一大特点,这对于后期的账户找回也会有略许的差别。 账户 一个账户以人类可读的名字存储在区块链中,它按照权限配置从属于一个个人或者组织。在转账或者推送一笔交易到区块链的时候账户是必须要有的。 BTC简单说账户就是Address,它没有人类可读标记,就是一串Base58编码之后的字符,区分大小写;ETH的账户也是Address的概念,是一串公钥加工后的十六进制串,不区分大小写,但ENS的出现弥补了人类识读的短板,现有的很多钱包也支持ENS对Address的解析;EOS的原生支持,也算是在吸取前人之鉴对账户这一概念的增强。 授权、权限 授权方来决定是否将某个权限来授予某个行为。 每个账户都有两个固定命名的权限。 owner 如其所名,owner拥有整个账户的所有权。只有极少的交易需要这个授权,主要集中在对账户所有权变更的时候。强烈建议!!!将这项权限保存在离线存储中,不与任何人分享。owner权限可以用于恢复可能已被泄漏的其他权限。 active 它主要用于转账、对块生产者投票、处理其他高级别的账户操作。 除了这两个固定命名的权限外,一个账户可以拥有一些自定义的权限来扩展账户的功能。自定义权限具有非常高的灵活性而且已经被地址化,权限如何被使用被约定,这完全取决于开发者社区如何使用它。 被授予权限的一方会被分配到一个、多个公钥或者一个账户名。 权限与签名 单签名(默认账户配置) 一个账户刚被创建时,有owner、active两个权限,它们都被地址化为一个key字符串,每个key的权重为1,每个权限的开启阈值为1。这项默认的配置就需要一个签名就可以授权来做某些行为。因为每个key的权重>=开启阈值。 @bob 账户授权 Permission Account Weight Threshold owner 1 EOS5EzTZZQQxdrDaJAPD9pDzGJZ5bj34HaAb8yuvjFHGWzqV25Dch 1 active 1 EOS61chK8GbH4ukWcbom8HgK95AeUfP8MBPn7XRq8FeMBYYTgwmcX 1 上图的@bob账户中,@bob对onwer权限的权重为1,阈值为1,符合权限授予的最小要求就可以发起一笔交易。这笔交易就只需要@bob用它自己的owner key进行签名就可以了,签名之后将交易发给cleos来处理。 多重签名以及自定义权限 下图的例子虚构了一个账户@multisig,它对其他的两个账户@bob、@stacy授予了owner、active权限,同时它对@bob、@stacy、一个公开账户授予了publish权限也赋予了不同的权重。 [](https://github.com/EOSIO/eos/wiki/Accounts%20%26%20Permissions#multisig-account-authorities)**_@multisig 账户授权_** Permission Account Weight Threshold owner 2 @bob 1 @stacy 1 active 1 @bob 1 @stacy 1 publish 2 @bob 2 @stacy 2 EOS7Hnv4i…Sqt 1 在这个例子中,onwer权限的开启阈值为2,在这一权限级别的任何改变都需要权重大于等于2才可以,但@bob、@stacy各自的权重都为1,这就是需要两者共同签名才能获取完整的授权。

Mar 29, 2018 - Comments - tech hot

以太坊矿工奖励之多少

以太坊通过PoW(工作量证明)的共识算法来生产一个新的区块,通过不断的调整区块nonce值来让以太坊网络上的矿工来计算不同的随机数,当计算出的随机数小于maxUint256除以header.Difficulty时就意味着挖矿成功,一个新的区块产生了。 在广播给全网新区块产生的同时,系统会发放一定量的以太币作为挖矿成功的奖励。与比特币挖矿不同的是以太坊协议不仅承认最长链上的区块(1),对于同时产生的非最长链的区块(1·)鼓励子区块(2)来将它索引起来,并将它(1·)称为子区块的叔块,索引了叔块的子区块也会获得一定的奖励,系统最多允许索引两个叔块,叔块与当前区块的高度差最大为6。 所以矿工奖励主要是三个部分:区块奖励、Gas奖励、索引叔块奖励;当然挖出叔块的矿工也会给予奖励。 区块奖励,在4370000块硬分叉之前奖励5个以太币,之后奖励3个以太币; Gas奖励,区块内所有交易的Gas费用归矿工所有; 索引叔块奖励,每索引一个叔块会奖励区块奖励的1/32; 挖出叔块的奖励 =(叔块高度+8-索引叔块的区块高度)*区块奖励/8 挖矿奖励: 区块高度 1-4370000 4370000-~ 区块奖励 5 3 Gas奖励 / / 索引叔块奖励 5⁄32 3⁄32 总计(1个叔块) 5+0.15625+块内Gas费 3+0.09375+块内Gas费 总计(2个叔块) 5+0.3125+块内Gas费 3+0.1875+块内Gas费 叔块奖励: 与被索引区块高度差 1-4370000 4370000-~ 1 4.375 2.625 2 3.75 2.25 3 3.

Feb 14, 2018 - Comments - travel life

话别指尖四年

2018年即将走过六分之一,农历新年的钟声也即将敲响,这是作别家乡北漂后在老家度过的第一个春节。从腊月二十六一路高速长途跋涉到家就是一阵的忙碌,从房子装修清理到走亲访友各种大事小事,从没有如此的忙碌地过年,也终于在这年末之余的夜晚,听着自选歌曲,让自己空档运转的大脑动动笔。 ·车·房· 从繁忙一路红色的帝都五环路到一晃眼以为帝都经济衰退的大马路,从每辆电动车一个车位的小区到停满马路汽车的乡村小镇,这就是中国式迁徙的一个缩影,回家过年就像候鸟每年一次的长途跋涉,不管你是自驾、高铁、汽车还是腿儿着,这是农历新年大写的注脚,它代表了亲情友情的联络,代表了无数割舍的相聚,一年间隔的结点。一杯敬去年的过往,一杯迎来年的喜庆。从谁家的车换成了什么牌子,邻居们也能猜到他家是不是今年发了大财,是不是瞬间土豪金。一眼望去的攀比和面子,全都写在脸上,尴尬之余的尴尬,且算还是尴尬吧,哈哈哈。相聚之间,从车子再到房子,或许这就是中国城镇化建设十多年缩影的延续,2010年后你再也看不到农村在自家宅基地上翻盖新房子的场景,倘若有一个村子在用尽全力的盖新房子,那或许只有一种可能,那就是这个村子要拆迁了。慢慢地进城买房变成了一种标配,一种结婚的标配,一种生活质量升级的标配,从六线小城到四线地级市配合着一城的大搞大建,这场城镇化建设的脚步越来越快,催促着还没买房子的农村人蒙眼狂奔,奔向城市,奔向向往的未来。倘若有一天我们的消费升级失败了,或许这才能体会到消费动力不足的切肤之痛,我们习惯了GDP每年百分十几的增长,但现在你是否感到了动力的不足呢? 拥挤的马路装不下人们对于年货的奔波,再累也要让这个年过的安稳,老家最忌讳的就是年关将近周遭再发生一些小意外,但意外的意外还是会出现,从北京一路到家,四天时间,五起追尾事故,虽然都没有发生人员的伤亡,但总也是一扫年味儿的欢乐,徒增一份烦恼。作为一个新手,在路上开车也是战战兢兢,对面的远光、突然的超车、忽略的小细节,开车真的是精神的高度紧张,随时的应急处理,累并享受着,虽然你享受着速度带给你的便捷,却也要谨记着安全的准绳。从一二线城市一路狂奔回来的车水马龙穿梭在平常并不拥挤的马路上,瞬间感觉就像每天早高峰的帝都三环路一样,不会让你窒息但是也足够让你踩着刹车等一分钟,然后再突如其来的冒出一辆电动车或者喝到东倒西歪的醉酒人,脑中还不断浮现出,如果这是在帝都是不是会把这种情况直接拦截下来扭送交警支队,回头想想这是老家,你也就继续前行走人了。 ·人·潮· 过年的几天各式各样的老同学群从冬天的寂静岭瞬间唤起到夏天的无名骚动,各种饭局各种组队进入自动驾驶模式,一众的老司机带着远方的情谊和瞬间改口的方言来到这土生土长的地儿相聚饭馆,哈一杯啤酒敬过去,再敬还能如此幸运的遇见,从二十多岁的青葱少年到而立之年的孩子他爹他妈,交流育儿经,讨论生意的大计,为来年的商路巩固人脉,何来一场不容易的相遇,老同学,一杯酒的情谊,干了这杯,情谊全在酒里,我先干为敬,你随意。熙熙攘攘,相聚,离合,酒醒,来年我们再续上这一杯。 一年前不是过节的时候去过一次城里刚开的万达广场,门可罗雀的人,冷清至极的店铺,进去之后尴尬的服务员,这让我怀疑万达在这样的四线城市开一家店的决策是不是重大失误,虽然有写字楼可以保证长线的收益稳定,但商铺的人流量怎么保证,这样下去三年基本就有被撤退的风险,但今年的国庆和过年几天基本让我打消了这个年头,停车场的拥堵和极高的餐饮翻桌率令我对万达在这座城市的发展有了更多的敬意,如果说我们正赶上的是节假日消费高峰,那我还是宁愿相信这是一场消费升级,哈哈哈。 ·情·份· 今天在家里斜对面的邻居大婶儿说实在认不出来了,胖且白了,从一个120斤的瘦猴儿到140斤的胖子,这个过程只需要一年的时间,如果说为什么?那我只能认怂了,权当消化好了肠道好了比吃健胃消食片都管用了。许久未见面的家人,见面的嘘寒问暖的第一句:哎呀,XXX认不出来了,胖了/瘦了。从脸上寻找的第一个记忆点位,从各自的感情抽屉中找到那个锚点, 试图重建一套针对你的情感模型,再续前缘的沟通就此打开。同样的事情还会发生在尴尬的一个场景—要帐,农民工的欠薪问题由来已久,解决了吗?官方解决了,因为官方解决的是法律问题,解决不了的人情关系问题,当你从哥们、亲戚、老乡那里过活儿的话,这个欠薪就是各种的蹊跷和离奇,或许真如笑话所说,这年头欠账的是老爷,要帐的是孙子,从一踏进家门的好茶好酒到关键问题的求解问题,总是曲折离奇,莫名其妙,无法理解,这就是一个现状,一个仍然依靠关系运转的农村社会体系。 许久的断舍离,许久的汇聚一堂,在起起伏伏中度过这一年的关键结点,向过去做个短暂的告别,向未来展望更好的自己,故事还在演绎,故事还在继续,百转千回,蓦然回首又是一年的默念随笔。。。

Dec 11, 2017 - Comments - tech dev

Zircon进程对象

概要 一个Zircon进程就是一个程序的实例:一个或者多个线程的指令执行以及一系列的资源。 描述 进程对象是以下资源的一个集合: 句柄 虚拟内存地址区 线程 一般来说,进程是一系列关联代码的执行直到进程被强制终止或者进程主动退出。 进程属于作业,它可以在资源、权限和生命周期控制的角度将多个进程组合为一个应用程序。 生命周期 一个进程通过 sys_process_create() 系统调用来创建,这个调用没有参数;当主线程终止或者最后一个句柄被关闭时(⚠ 未实现),进程进入终止状态。 下一步, 主程序代码通过 sys_process_load() 加载进入进程,开始调用 sys_process_start()开始执行。 系统调用 process_create - 在作业内创建一个新的进程 process_read_memory - 从进程的地址空间中读取 process_start - 触发一个进程的执行 process_write_memory - 写入到进程的地址空间 process_exit - 退出当前进程 job_create - 在父作业内创建一个新的作业 vmar_map - 在一个地址空间范围上映射内存 vmar_protect - 在一个地址空间范围上修改权限 vmar_unmap - 在一个地址空间范围上解除内存映射

Dec 8, 2017 - Comments - dev tech translate

Zircon内核对象

Zircon是基于对象的内核。用户模式下的代码基本上都是通过对象句柄与OS资源交互。句柄可以被认为是某个OS子系统与某个资源之间的活动会话。 Zircon动态地管理着如下资源: 处理器时间 内存和地址空间 设备IO内存 中断 信号和等待 应用层内核对象 IPC 通道 套接字 先进先出队列 任务 进程 线程 作业 任务 信号 事件 事件对 互斥对 内存和地址空间 虚拟内存对象 虚拟内存地址区 等待 端口 驱动层内核对象 中断请求 资源 日志 内核对象与LK层 许多内核对象封装了一个或者多个LK层结构体,比如线程对象封装了 thread_t,相反通道对就没有封装任何LK层对象。 内核对象生命周期 内核对象可以被重新计数。大多数的内核对象在系统调用时产生,被句柄持有计数等于1时处于活动状态,句柄绑定这个句柄值作为系统调用的输出。句柄对象一旦被附加到句柄表中,它就处于活动状态了。当句柄从关闭(调用sys_close())它们的句柄表中卸载时就会递减内核对象的计数。通常最后一个句柄被关闭时内核对象计数会等于0,此时会触发析构函数的运行。 当引用对象的新句柄被创建或者(某些内核代码)获取直接指针引用时,计数会递增。所以一个内核对象的生命周期可能会比创建它的进程的生命周期还要长。 调度器 内核对象是一个派生自Dispatcher 并实现了方法的C++类。所以你会看到线程对象的代码在 ThreadDispatcher中。有许多代码只关心通用意义上的内核对象,这种情况下你看到的名字就是 fbl::RefPtr<Dispatcher>。 内核对象安全 原则上说,内核对象没有内在的安全概念,也不会做安全检查。一个单独的进程可能由于同一对象的不同权限拥有两个不同的句柄。 参考更多:句柄

Dec 8, 2017 - Comments - tech dev

Zircon内核概念

前言 Zircon内核管理着大量不同类型的Objects。这些Objects可以通过系统调用(用C++实现了Dispatcher接口的类)来直接访问。这些Objects定义在 kernel/object下面,它们有些是自包含的高级Objects,有些是对LK低级别原语的封装。 系统调用 用户态代码与内核对象通过系统调用来交互,而且基本上都是通过句柄这个概念来实现。在用户态句柄用一个32位整型数来表示(zx_handle_t类型)。执行系统调用时,内核会检查句柄参数对应的操作是否在当前调用者进程的操作表中,同时在后面也会检查句柄类型是否正确、请求的操作是否有权限执行。 从访问角度看,系统调用主要分为三大类: 1、调用没有限制。这类调用只占很少一部分,比如 _zx_timeget() 、_zxnanosleep() 可以被任意线程调用。 2、调用的第一个参数是一个句柄,它作为要施加操作的对象。这类调用有很多,比如_zx_channelwrite()、_zx_portqueue()。 3、调用会创建新的Objects但并不作为句柄使用,比如_zx_eventcreate() 、_zx_channelcreate()。对Objects的访问以及对它们的限制都由调用的进程作业所控制。 libzircon.so提供了所有的系统调用,它是一个kernel提供给用户态的“虚拟”共享库(或者叫做虚拟动态共享对象,简称vDSO)。这些系统调用被表示为_zx_noun_verb()_ 、_zx_noun_verb_direct-object()_样式的C ELF ABI函数。 所有的系统调用被定义在syscalls.sysgen 文件中,并通过 sysgen工具写入到include、libzircon以及内核的libsyscalls文件中。 权限 对象可能会有多个句柄的引用(在一个或者多个进程中)。 对大多数对象来说,当最后一个引用它的句柄关闭时,这个对象要么被废弃要么进入不可撤销的终止状态。 使用_zx_channelwrite()) 可以将句柄写入一个通道来实现从一个进程到另外一个进程的移动或者使用_zx_processstart() 将一个句柄作为参数传递新进程的第一个线程。这些行为会受到句柄、句柄所引用对象的权限约束,同一对象的两个句柄也可能具有不同的权限。 _zx_handleduplicate() 和 _zx_handlereplace() 系统调用可以获取传入对象的额外句柄,也可以削弱其权限。_zx_handleclose() 系统调用会关闭一个句柄,如果这个句柄是引用对象的最后一个句柄,那么也会释放这个对象。 内核对象ID 每个在内核中的对象都有一个“内核对象id”(简称koid)。koid用一个64位的无符号整型来表示,它在整个运行时来唯一的标识这个对象,这意味着koid从来不会被重用。 koid中有两个特殊值: ZX_KOID_INVALID-值为0,用来表示null。 ZX_KOID_KERNEL-值为1。 运行时:作业、进程、线程 线程代表了线程在其所属进程地址空间的执行(寄存器、栈等)。 进程属于作业,它定义许多资源的限制条件。 作业从属于父作业,所有的作业又都从属于内核启动后传递给userboot的第一个用户态进程的根作业。 进程内的线程如果要创建一个新的进程或者作业,必须通过作业句柄来实现。 程序加载由内核层之上的用户态设备、协议来提供。 更多参考:进程创建, 进程启动, 线程创建, 线程启动。 消息传递: 套接字、通道 套接字和通道都是支持双向传递的IPC对象。创建一个套接字或者通道会返回两个连接每一末端对象的句柄。 套接字是面向流的,支持读/写一个或者多个字节,短写(套接字缓冲区满)和短读(请求到的数据多于套接字缓冲区)都有可能发生。 通道是面向数据包的,消息最大长度为64K字节(可以调整,通常会设置的更小),支持1024个(可以调整,通常会设置的更小)句柄附加到消息上。不管消息能不能适应大小,通道都不支持短写和短读。 当句柄写入到通道时它们就会从发送端进程中移除,相反含有句柄的消息从通道中读出时句柄会被追加到接收进程。在这两个事件之间,句柄会持续存在(前提是对象引用持续存在),如果句柄写入方向的通道关闭,那么消息就会被废弃,所有的句柄都会被关闭。 更多参考: channel_create, channel_read, channel_write, channel_call, socket_create, socket_read, socket_write. 对象、信号 对象有32种信号(_zx_signals_t_类型,定义在ZX__SIGNAL_文件中),信号代表当前对象的一系列的状态信息。比如通道、套接字有可读、可写状态,进程、线程有终止状态等等。 线程可能在一个或者多个对象上等待信号让它变为活动状态。 更多参考: signals 等待: 等待一个、等待多个、端口 线程可以使用 _zx_object_waitone() 在一个句柄上等待一个信号变为活动状态,也可以使用 _zx_object_waitmany() 在多个句柄上等待信号。这两个系统调用都允许设置超时时间,即便信号没有被发送也可以返回。

Dec 6, 2017 - Comments - tech dev

Zircon内核与LK内核的关系

LK(Little Kernel)是一个为嵌入式应用设计的微系统内核,它为FreeRTOS、ThreadX这样的商业项目提供了一个不错的选择。这些系统仅提供有限的内存、有限的外设和任务集;Zircon运行在那些拥有快速处理器、不定大小内存、能够挂载任意外设的现代手机、PC等末端计算设备上。 Zircon内部构建在LK层之上;Zircon有进程的概念,LK则没有;Zircon的进程构建在LK的线程、内存结构之上。 更多的不同点: Zircon有一类用户模式的支持,LK没有; Zircon是一个对象句柄系统,LK没有这个概念; Zircon有能力安全模型,在LK里所有代码都是被信任的。 随着时间的推移,为了满足新的需求、更好的适应上层系统,低层次的结构也可能会改变。 原文链接: https://fuchsia.googlesource.com/zircon/+/HEAD/docs/zx_and_lk.md 延伸: LK: https://github.com/littlekernel/lk/wiki/Introduction LK内核正在被使用的场景: Android的bootloader Trusted Execution Environment

Nov 8, 2017 - Comments - hot

Ubuntu 16.04 搭建IKEv2 VPN踩坑

详细步骤在这里: https://www.digitalocean.com/community/tutorials/how-to-set-up-an-ikev2-vpn-server-with-strongswan-on-ubuntu-16-04 但是,但是,这里有坑,第一步安装的依赖库,在Ubuntu16.04+自动解决依赖时少了一个。。。 安装完成后,Mac连接VPN会报如下错误: loading EAP_MSCHAPV2 method failed 大概意思是某个OPENSSL支持的加密算法插件没有加载,结果上面那个配置手册里面还正好是这个,最后的FIX是通过安装libcharon-standard-plugins来加载上就OK了。 参考: https://github.com/jawj/IKEv2-setup/issues/12 PS: Vultr邀请码: https://www.vultr.com/?ref=7258769

Sep 24, 2017 - Comments - life

韭时园子里的菜

夏天在一次次的暴晒和一次次的暴雨中已经收尾,秋对北京来说几无印象,一阵风飘过,散落的枯枝落叶也会被环保车一溜烟的收走,没有麦收的气息,没有瓜果落地的充实,只留一抹陡寒的秋风来结束这迷人的暑假和工作日。自从离开家乡求学,济南、北京这两个熟悉的城市貌似都没有机会好好享受秋天,只有夏天的燥动和冬天的寒夜,好不容易的几天秋意稍不注意便是来年了。 在老家,秋属于农民,忙收割,忙储粮,把半年的收成浓缩在半个多月的农忙季节,一气呵成,也算是对自己工作成果的总结。玉米在一个夏天的炎炎烈日下叶子渐近枯黄,果实却欲见成熟。从南到北远望过去,整齐的一排排绿色线条沿着播种的垄间一字开去,慢慢变成毫无次序的枯黄,如果不凑巧夏日的一阵狂风就要让他们俯首称臣,果实减半,老农们也只能望天祈祷。虽说玉米是家乡后半年的主产农作物,但对于土生土长的农村人,玉米也只是饭桌上的玉米粥、棒碴粥,最多再加上窝窝头,相反倒是蔬菜能丰盛到极致。各种瓜果、绿叶菜轮番上阵,即便自己家地里不种,邻里之间交换一下彼此的收获也足够一个夏天的三餐菜肴,如若再碰上蔬菜大户搞促销,那盛况不减农村赶大集。 邻居家阿嫂家里地片儿多,经营着一片菜园,从茄子、豆角到山药、土豆,还有那一眼望去波浪滚滚的韭菜。股市是有句俗话:韭菜割了一茬又一茬,这个形容足以说明韭菜的特点。生长到成熟季节就该收割了,如果再不收割那嫩嫩的绿色就要变成深绿的老叶子, 再吃也便无味了。每到了韭菜从田间地头收割回家的时候,左邻右舍一招呼,都蜂拥而至的围坐在阿嫂家门口前,铺一张硕大无比的布垫,把杂乱无序的韭菜从车上卸下,就开始了韭菜收割后的清理工作。韭菜虽然没有打农药而且从田间看着也很干净,但是根部的泥土、漫天飘飞的树叶、偶尔出现的小虫还是要仔细的清理出来,不然肯定是卖不出好价钱的。清理后的韭菜还一缕缕的排放整齐,等待后续的捆扎,把一车杂乱的韭菜变成排放整齐、新鲜干净的一捆捆的韭菜。这样的繁杂每每收割都要经历一次,每次也都是大家把一车韭菜从绿色山堆变成绿色砌墙堆,干完这些活儿计也差不多是吃饭的时间点,大家从码好的韭菜堆里挑一捆成色比较差的自己带走,各自散开回家做饭去了,阿嫂也是满心感谢的送别大家。 炊烟袅袅,冒出的火星闻不到饭菜的香味,但吃了韭菜相信你要清理一下自己的口臭了。这也是很多人不吃韭菜的一大原因,一说话,浓浓的韭菜味儿从嘴中弥漫开来,这尴尬实在不能忍,尤其是工作餐。虽然韭菜也有不讨人喜欢的地方,但它却不失为一味美食之餐,我最爱吃的便是韭菜馅儿饼。 韭菜馅儿饼不比韭菜饺子的工序复杂,节省时间,吃起来简单,适合午饭晚饭来吃。相比现在城市里吃到的韭菜馅儿饼,老家的皮薄馅儿嫩。饼是老家的“薄蛋饼”,与春饼类似,但比春饼要大很多,大概有15寸。韭菜择根去土去皮后洗净切段,放入油、盐、大料,再放入两三个煎鸡蛋沫,搅拌放匀。把擀好的饼平铺在案板上,倒上适量的韭菜馅儿,保留饼的边缘,铺平放好,然后再盖上一层薄饼,将饼的四周与下层的饼相按压,一个韭菜馅儿饼就做好了。剩下的就是起火,在鏊子把饼烙熟,最后把饼放在篦子上十字交叉切成四块,最后的最后就是开吃了~ 能谈出来的是制作工序,能做出成品的是实力,童年虽然耳濡目染,在奶奶身边驻足观看,但也从未亲身实践过。奶奶那娴熟的烙饼技术可能到我们这一辈也就失传了,流水线和工业化渐渐代替这些家庭式的小工作坊,围炉即吃的味道,绝非电饼铛或者大烤箱所能替代的。就如每一档美食节目都很火,但在飞速的生活节奏中,我们是被挟裹还是抵抗到底,是回归原生态还是继续前行,这都是没有答案的话题。 除了各种花样的韭菜做法,自家西边的小菜园也是撑起我们家一个夏秋的蔬菜供应的宝库。从入夏开始,先是各种豆角琳琅满挂在藤蔓,后是丝瓜、黄瓜、西红柿争先斗艳,红黄绿各种彩色纷呈,如果你不介意完全可以拔一根小葱,中间的空缺塞入一根长长的豇豆角,纯粹的原生态;在每每挥汗如雨的足球比赛之后从园子里摘一根黄瓜,放入自来水中放置几分钟,冰凉之间带着嘎嘣脆。夏天一步步的悄悄过去,瓜果藤蔓也渐渐进入枯黄的收尾期,秋日的期待也渐渐临近,扁豆的生长才刚刚进入时机,它选择的在夏秋之交扛一己之力,最后接力扁豆的是冬瓜、南瓜、吊瓜,它们适合储藏的特质决定了可以安然的吃到寒冷的冬天。 大概是那年,村里开始养殖桑蚕,家里的房屋不够用,索性就缩减了菜园,建起了平房,菜园子也就慢慢的被挤出了院落,回归到了大农田。 —后记 拖拖拉拉的一篇博文,从Google Keep开始动笔到今日匆匆结尾,2个多月的时间,每每打开Keep是一种负罪感在驱使着今日必须收尾~Orz

Sep 22, 2017 - Comments - project

Heytime-好时光,地主家最好的App

浏览器家有没有王道 地主家没有余粮 heytime://moment/detail?id=Q6NSPxaW-wwa4bxq0Ofamg&version=${moment_version} heytime://moment/Q6NSPxaW-wwa4bxq0Ofamg/photo?id=${photo_id}&url=${photo_url} heytime://moment/Q6NSPxaW-wwa4bxq0Ofamg/comment/list?index=${comment_page_index} heytime://moment/Q6NSPxaW-wwa4bxq0Ofamg/comment?id=${comment_id} heytime://moment/list/user/907339799223074816 heytime://moment/list/user/907339799223074816/like heytime://moment/list/recommended?id=${recommended_id} heytime://moment/local/list heytime://moment/local/detail/id=${local_moment_id} heytime://user/detail?id=907339799223074816 heytime://user/907339799223074816/follower/list heytime://user/907339799223074816/friend/list heytime://user/907339799223074816/moment/liked/list heytime://message/list