Nitro’s

.

Kernel

Zircon进程对象

概要 一个Zircon进程就是一个程序的实例:一个或者多个线程的指令执行以及一系列的资源。 描述 进程对象是以下资源的一个集合: * 句柄 [https://fuchsia.googlesource.com/zircon/+/HEAD/docs/handles.md] * 虚拟内存地址区 [https://fuchsia.googlesource.com/zircon/+/HEAD/docs/objects/vm_address_region.md] * 线程 [https://fuchsia.googlesource.com/zircon/+/HEAD/docs/objects/thread.md] 一般来说,进程是一系列关联代码的执行直到进程被强制终止或者进程主动退出。 进程属于作业,它可以在资源、权限和生命周期控制的角度将多个进程组合为一个应用程序。 生命周期 一个进程通过 sys_process_create() 系统调用来创建,
1 min read
Kernel

Zircon内核对象

Zircon是基于对象的内核。用户模式下的代码基本上都是通过对象句柄与OS资源交互。句柄可以被认为是某个OS子系统与某个资源之间的活动会话。 Zircon动态地管理着如下资源: * 处理器时间 * 内存和地址空间 * 设备IO内存 * 中断 * 信号和等待 应用层内核对象 IPC * 通道 [https://fuchsia.googlesource.com/zircon/+/HEAD/docs/objects/channel.md] * 套接字 [https://fuchsia.googlesource.com/zircon/+/HEAD/docs/objects/socket.md] * 先进先出队列 [https://fuchsia.googlesource.com/zircon/+/HEAD/docs/objects/fifo.md] 任务 * 进程 [https://fuchsia.googlesource.com/
2 min read
Kernel

Zircon内核概念

前言 Zircon内核管理着大量不同类型的Objects。这些Objects可以通过系统调用(用C++实现了Dispatcher接口的类)来直接访问。这些Objects定义在 kernel/object下面,它们有些是自包含的高级Objects,有些是对LK低级别原语的封装。 系统调用 [https://fuchsia.googlesource.com/zircon/+/HEAD/docs/syscalls.md] 用户态代码与内核对象通过系统调用来交互,而且基本上都是通过句柄这个概念来实现。在用户态句柄用一个32位整型数来表示(zx_handle_t类型)。执行系统调用时,内核会检查句柄参数对应的操作是否在当前调用者进程的操作表中,同时在后面也会检查句柄类型是否正确、请求的操作是否有权限执行。 从访问角度看,系统调用主要分为三大类: 1、调用没有限制。这类调用只占很少一部分,比如 zx_time_get() [https://fuchsia.googlesource.com/zircon/+/HEAD/docs/syscalls/time_get.
7 min read
Kernel

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内核正在被使用的场景:
1 min read
VPN

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
1 min read
Life

韭时园子里的菜

夏天在一次次的暴晒和一次次的暴雨中已经收尾,秋对北京来说几无印象,一阵风飘过,散落的枯枝落叶也会被环保车一溜烟的收走,没有麦收的气息,没有瓜果落地的充实,只留一抹陡寒的秋风来结束这迷人的暑假和工作日。自从离开家乡求学,济南、北京这两个熟悉的城市貌似都没有机会好好享受秋天,只有夏天的燥动和冬天的寒夜,好不容易的几天秋意稍不注意便是来年了。 在老家,秋属于农民,忙收割,忙储粮,把半年的收成浓缩在半个多月的农忙季节,一气呵成,也算是对自己工作成果的总结。玉米在一个夏天的炎炎烈日下叶子渐近枯黄,果实却欲见成熟。从南到北远望过去,整齐的一排排绿色线条沿着播种的垄间一字开去,慢慢变成毫无次序的枯黄,如果不凑巧夏日的一阵狂风就要让他们俯首称臣,果实减半,老农们也只能望天祈祷。虽说玉米是家乡后半年的主产农作物,但对于土生土长的农村人,玉米也只是饭桌上的玉米粥、棒碴粥,最多再加上窝窝头,相反倒是蔬菜能丰盛到极致。各种瓜果、绿叶菜轮番上阵,即便自己家地里不种,邻里之间交换一下彼此的收获也足够一个夏天的三餐菜肴,如若再碰上蔬菜大户搞促销,那盛况不减农村赶大集。 邻居家阿嫂家里地片儿多,经营着一片菜园,从
6 min read
Android

Android共享热点IP问题引发的“血案”

今天一朋友问Android手机的Wi-Fi共享热点IP能不能修改,他那边一直是192.168.43. ,自己记得在设置里面没有这个选项,便回复了他不能修改。后来猜测Android源码可能为了刻意避开常用局域网路由器192.168.0/1/2. 段,特意设置的其他网段,但会不会存在与基站代理在一个网段后冲突自我协调的机制呢?(当然这个可能性很低,一般基站的代理服务器分配的都是10.*段的内网地址),既然有了这个问题,那索性看看源码怎么设置的。 涉水 首先想到的是到StackOverFlow上看看有没有相关问题,搜索得之, http://stackoverflow.com/a/31238229/4865380 确实有人提到修改Hotspot网关的问题,给出的具体源码是在WiFiStateMachine.java中硬编码了192.168.43.1这个网关地址,这就解释了为什么共享出去的IP地址都是192.168.43.*了。手机用户想修改它,duang然是不可能了。 挣扎 从AOSP的master中去查找上文提到的platform/framework/base/wifi/java/a
4 min read
Life

我们为什么结婚

年前在家看到一篇文章写到在21世纪我们怎么还需要婚姻这样一种组织约束,是不是已经过时了,是不是需要重新定义家庭和群体组织关系?后来还想再读一遍,结果找不到原来的链接了。。。正逢过年恐婚族和催婚族撕逼大干一场的时候,这样的话题才会燃起这样老生常谈的硝烟。 6岁那年,大病初愈,刚从医院回来还不能走路,只能在床上大小便,奶奶一边照顾着我一边给上小学的姐姐做三餐,到现在我还记得那个黑漆漆的屋里,高高的床铺旁边就是灶台,下雨天一边是倒吹烟一边是雨水的滴答。直到有一天,奶奶找我妈死活找不到,我爸也出去找,还是没找到,也没人告诉她去了哪里。无奈到第二天,同村的人告诉我爸,我妈回娘家了,准备离婚。那时的我也搞不懂什么是离婚,为什么妈妈不在身边,我爸为什么着急,对我来说,那一切都是茫然。后来一切如我妈所愿-离婚收场。至于为什么离婚,到现在我也没有问过奶奶或者我爸,生活的每一天都在眼前,6岁时不懂,16岁,26岁,一切尽在眼前。谈起此事,很多朋友会问,和妈妈再也没有联系了吗?我说没有,一点都没有,从未谋面,不再见面,她只是我妈,生下我的妈。后来的几十年老爸再也没有娶,他对妈妈或许到今天他也只有恨。如果问
6 min read
Android

Android 物联网SDK

原文链接 [https://developer.android.com/things/sdk/index.html] 支持库 主要包含两方面的支持:外部器件 IO API、用户驱动API 外部器件 IO API实现了相关的工业标准协议和接口,可以让App与传感器和制动元件进行通信。支持的接口主要有:GPIO、PWM、I2C、SPI、UART。 https://developer.android.com/things/sdk/pio/index.html 用户驱动API扩展自Android framework的Service组件,它允许App注入硬件事件到framework层,其他的Apps就可以通过标准的Android API来访问这些事件信息。 https://developer.android.com/things/sdk/drivers/index.html 与AndroidOS相比的变更 应用变化
3 min read
Android

Android 物联网初探

Android OS作为现今智能手机操作系统的老大,对智能设备的流行起到重要作用,从手机、平板到TV、手表、汽车等等,无处不在,无所不包,已然是现实意义的便携式设备OS的代表,虽然不同的设备厂商各怀鬼胎、高度定制,但不可否认Android OS确实推动了产业的迅速发展。随着智能设备的微型化和物联网的发展,Android团队也为我们带来了在物联网领域的又一力作-Android Things。与Android Wear、Android Auto一样,Android Things同样承袭了不开源的路子,预计后续开源的可能性也比较低。 Google在物联网领域主要有两方面:Android Things、Weave。 Android Things(原名为“Brillo”)是基于Android OS面向终端设备的一套定制化OS,旨在为了解决异构SoC物联网设备、不同传感器的数据处理等提出的一套解决方案,开发者只需要关注上层应用级别的数据传输和处理,同时还支持自定义传感器等元件的驱动。 Weave主要解决物联网对于后端数据传输和设备交互的需求,通过Google 的基础设施来采集、传输、交换、分
4 min read
Summary

走走停停-致2016

快速浏览了一下过去三年的年终总结,没有红黑榜,不是年终奖,但工作顺利、父母健在、孩子欢乐生长、一切安康,这就是对自己一年生活最好的总结。 年龄就像树的年轮一样,指发之间只有自己无法看到年轮的痕迹,久别重逢的故人却一眼道出你脸上的青春和沧桑。回到老家大家都问:北京怎么样?工作累不累?压力大不大?要在北京定居吗?然后你的统一回复就是:北京冬天的雾霾确实很严重。话不对题,题不对味,索然无趣。你或许羡慕低头不见抬头见的是天安门,或许悲悯拥堵致死的地铁线,哪个更真实?我知道你不知道,你也不想知道,这些只是了然无味的谈资罢了。每天无数人走过一个个的街角,踏过一个个门槛,穿过一趟趟的地下铁,你喜欢用智能手机计步,他喜欢Apple Watch聊天。 无论答案是怎么样,对面的人都不可能得到一个满意的答案,因为我不是你,你也不是我,这就是鲜活的个体。 最好的时代也是最坏的时代,好在WiFi无处不在,坏在各种奇葩理性的存在。偶尔的断网手机欠费可能会让你浑身难受,两手局促地不知道放在身体的哪个部位合适,所以高管的肖像照都是双手交叉放于胸前,因为他们没带手机,哈哈。不幸在年前的这几天里宽带到期,每天晚上回
6 min read
Java

Java WEB系统微服务化迁移

支撑互联网公司运行的庞大后端服务系统经历了原始的BS架构设计、前后端分离、模块化组件、系统分层设计的进化,从计算资源的虚拟化到今天容器技术的应用,互联网一直在朝着资源高效配置、分布式集群服务的方向进发。 Docker [https://www.docker.com/] 作为当下最流行的容器化技术,相比于运行在实体物理机上的虚拟机技术,它具有轻量级资源隔离、快速部署、持续交付、版本控制、 可移植、开放技术等特点。 如果采用虚拟机技术去部署一套系统,需要几个步骤: 1. 分配物理资源(CPU\内存\网络) 2. 开机启动运行 3. 安装系统运行时支撑环境(模版) 4. 发布生产系统 5. 上线。 采用Docker需要如下几个步骤: 1. 拉取Docker Image 2. 发布生产系统 3. 上线 相比来看可能就会发现,Docker相当于把最繁琐最耗时的工作帮助我们解决了。Docker运行在(特定)操作系统之上,只需要一条命令即刻启动;
4 min read
Graphics

全景图片格式

近期工作中学习了一些VR相关的技术点和相关资料,记录一下。 本文翻译自panotools.org [http://www.panotools.org/],介绍了全景图片的几种格式。 原文链接 [http://wiki.panotools.org/Panorama_formats] 全景有一个宽泛的定义:将整幅地图或者部分的3D场景投影到一个2维度的屏幕或者输出上。不同的投影主要包括如下几种格式: 全球面格式 1. 等间距 2. 立方体 3. “小星球” 部分球面格式 1. 圆柱体 2. 弧形 3. 直线 4. 部分球体 全球面全景格式 主要包括两种球面格式:等间距、立方体,这两种格式都能够水平360度、上下90度环绕的显示完整的视界。特定的浏览工具能够看特定的全景。 等间距 等间距格式使用广泛,比如PTViewer、SPi-V。它由单张横纵比2:1(注意:宽度必须是高度的2倍)
4 min read
Life

我的七月与安生

每个人至少都有这么一个挚友,你们在人生的拐点相遇,惊叹于彼此的不同或者相似,有过不少平淡无奇却又值得纪念的时光,任白云苍狗,风云变化。说到底,这一路,我们都在寻找自己的影子。 1. 《七月与安生》上映的时候,拉着徐先森一起去看了,他的内心其实是拒绝的,认为无非是一部青春片、文艺小清新、闺蜜撕逼…但在我心里,有着不一样的情感,因为那里面藏着我青春的影子,鲜明而深刻。当然,更多的是关乎友情。电影中闺蜜喜欢上同一个男生,抑或是另一种隐晦的小众心思,大概就是艺术源于生活最庸俗而又巧妙的写照吧。 七月的漂亮乖巧,安生的桀骜不羁,仿佛不会产生交集的两个人,最后,却在相爱相杀中活成了对方。有人说,七月与安生本来就是一个人,七月羡慕安生的自由潇洒,安生羡慕七月的安稳静好。安生表面张狂,心里却住着一个柔软无比的七月;七月表面柔弱,心里却住着一个骄纵残忍的安生。 这不就是一个人身上的两面性吗?当然也是很安妮的路数,她的笔总是在极度美好与极度残酷之间不断变换,其间夹杂着惊喜与残忍,极致而又撕心裂肺。 2. “哎,你到哪儿了?我到你说的这个路口了…” “你再等会儿,我马上就到了…
10 min read
Life

山后-零壹

山后-零零 [https://www.nitrohsu.com/where-is-the-final] 人都有这样的感觉,看着身边的孩子长大身边的老人变老,但自己却感觉不到岁岁年年的度过,刘全何尝不是这样,自己年轻的光景悄然逝去,再回首三十多年已是过去,略微富足的家底也像粮缸的玉米一样渐渐被换成了一袋袋的烟卷儿飘在空中。 晌午过后,当别家干活的男人女人们吃过午饭该午睡的时候,刘全打个哈欠,伸伸胳膊,从他那个专属墙角起身,该回家吃饭了,好似错峰去生产队大食堂一样的踱步走着,拱着的背儿像是六十岁的老头,偶尔还能看到他走路的时候使劲捶着腰间,大概是在地上坐着时间长了,落下了隐隐的病根。推开那个重重的木门,迎头过来的是一只大黄毛狗,猛的扑到刘全身上,嘴里流着哈喇子,它这是在为刘全又度过半天逍遥日子庆贺又或者是期待一顿狗食。刘全爹自从前几年下地干活时不小心摔到腰基本就是在家做些小零活,儿子在外边晒太阳逍遥,自己就不能太张扬了,索性他就搬个小马扎坐在院子里晒太阳,偶尔逗一下自己的大黄狗,也算是给自己找一乐子。人总是爱着面子,年轻的时候是干部,虽然老了,但是面子和场面还是要挂住的,当然挂住的还要
4 min read
Android

Android Data Binding代码分析

Android团队推出Data Binding支持已经一年有余,但碍于项目已经在使用原始setXXX的方式,想要完全替换需要一定时间,一直没有进入todo list。最近在一个小demo中试验了一下。详细的开发示例不再赘述,可以参考Android Dev官网 [https://developer.android.com/topic/libraries/data-binding/index.html] 的代码示例,中文版可以参考简书的一篇比较新鲜的译文 [http://connorlin.github.io/2016/07/02/Android-Data-Binding-%E7%B3%BB%E5%88%97-%E4%B8%80-%E8%AF%A6%E7%BB%86%E4%BB%8B%E7%BB%8D%
4 min read
Life

山后-零零

杨三儿开着那辆半新的拖拉机慢慢悠悠地从西边地头出来,嘴里叼着金喜烟卷,雾里雾气地倒也和柴油机的烟囱有几分相似。黑里黑黝的脸上写着岁月的沧桑,村里三十出头的男人在这个季节大部分都是外出打工,像杨三儿这样的悠哉悠哉在村里赚几个闲钱的爷们十个手指头数的过来。 “二豆子,你家那破地长满狗尾巴草了,再不割就可以打茅草盖房子了!” 杨三远远望着和他同一个生产队的刘全缩路边墙角里打着哈欠。 “扯你家犊子,老子地头长草管你毛事!”,刘全连一正眼都不看杨三。 虽说杨三靠着自己前几年买的二手拖拉机能挣几个闲钱,但相比家底厚实的刘全来说还是略有差距。刘全老爹也算是老党员老干部,在村里也是有头有脸的人,只是到了儿子这一辈几多荒废,刘全整日游手好闲,人到中年也没有谋到一媳妇,晌午过头,墙角一蹲就是一下午,晒着太阳,打着盹儿,或许这就是生活的美好,至于其它,只能算是午后阳光的一抹云彩。 人说光棍儿认光棍儿,婆娘嫌光棍儿。杨三儿和刘全这两个在第一生产队的光棍,也是不打不相识。早些年,媒婆是踏破了刘家大门,去给刘全找媳妇儿,要么刘全爹看不上人家,要么刘全老不正经,最后都没成。杨三儿正好相反,家里穷,媒人想请都
3 min read
Android

Android 6.0 运行时权限实践要点

Android在6.0之后添加了新的权限管理模型,每个应用必须在原油的Manifest.xml声明的基础上增加运行时的权限申请才能进行相关API的调用,这对终端用户的隐私保护是一大利好,浏览一下国内的很多应用,一个很简单的APP也会申请Contact、Location、ID、SMS、 *History等权限。自从6.0之后App安装完成未启动前你就可以去应用设置中关闭没必要的权限。当然国内的很多定制ROM比如MIUI、EMUI等在之前android版本中已经定制了相关模型,但这一次是从API级别上标准化了这一设置,所有支持后续版本的APP都必须实现这一原则。 相关运行时权限申请开发过程,可通过Android官方网站浏览 [https://developer.android.com/training/permissions/requesting.html]。更多 Android权限相关 [https://developer.android.com/guide/topics/security/permissions.html]。 这里只说明了几个开发要点: 当前流行的运行时权限申请流
4 min read
Life

"怀疑"死亡

个头不高,脸上一层层的皱纹写满岁月的痕迹,穿着一件深蓝色花格子的长袖衣服,下身藏青色裤子,轻微束脚成尖的脚上穿着一双黑色略新的布鞋,上身后躺在床头板儿上,双腿撑起成拱形,双手放在膝盖上,脸上一副安详的表情,没有任何痛苦与挣扎,是的,她就这样走了,当听到阵阵的哭声时,我们周边才意识到这位老奶奶的离去。赶忙跑过去时,村里医生正在验证是否还有生命迹象,把脉,验证呼吸,看眼睛瞳孔,最后告诉旁边已经哭的不成样子的儿子:“三儿,你妈走了,很幸福的走了,别把眼泪滴到你妈身上,别哭了,你妈没病没灾地走的很安心”。一个生命就此宣告-死亡。 死亡,在宗教里意味着升天、皈依,在自然界里意味着回归尘土,这就是那句“生不带来死不带去”的起点,在精神境界里,死亡意味着什么?你是否惧怕死亡?我们需要永生吗? 一个人骑着自行车从农田的十字路口经过,但是庄稼略微挡住了视线,当他骑到十字路口的边缘时,侧方向来车已经无法急刹车,瞬间人被撞飞,血肉模糊,从一个意识清醒的人到瞬间的巨大伤痛,再到脏器受损,最终生命体征消失,这或许只需要几分钟。他在之前的几分钟或许还在思考怎么回家给儿子做一顿可口的饭菜,
7 min read
App

健身派 大陆用户使用Google Fit (非root)

Google Location History在国内目前处于非可用状态,可能是由于地图拍照之类的问题,所以基于地理位置实时跟踪的Google Fit也就悲剧了。 网上修复或者绕过的各种路数是手机rooted,然后更改google play注册地欺骗Google通过,还有其他的比如SIM卡贴欺骗,总之的意思就是让Google以为你在国外开放Location History的地方。 手机如果被rooted使用的风险性会大大增加,不建议使用。除了通过Location History来记录健身,还可以通过Google Fit API来正常使用Google Fit。 Google Fit API内建了各种数据模型,比如步数统计、骑自行车、业余训练等等。 相关API详情参考 [https://developers.google.com/fit/overview#the_sensor_framework]。 这里我也写了一个App,可以提供这些功能,欢迎下载使用。 当然如上这些还是需要某项技能才能同步。
1 min read
OAuth2

OAuth2协议和Spring Security OAuth2实现

OAuth2协议在API访问授权中广为使用,Google、Facebook、微博、腾讯的公开API也都使用它。虽然在使用上有些复杂,尤其是服务器端的使用更为繁琐,但它在权限授予、资源访问限制上的优势让其使用广泛。 OAuth2的协议流程如下: 以国内的微博为例, Resource Owner=微博用户; Client=第三方应用,如Fuubo、Weico; Authorization Server=微博平台授权服务器; Resource Server=访问微博、用户信息等资源的服务器 当开发者决定要开发一款基于微博的应用时,需要到 http://open.weibo.com 去填写一些资料,比如应用名称、类型、访问哪些资源,提交相关信息之后,微博后台会创建应用,分配一个client_id和client_secret,这两个字段对你的应用至关重要,以后会派上用场。 下面就开始正式的OAuth2协议流程: A、开发者构造Authorization Request (请求微博用户授权),如果此时微博用户A没有登录会直接跳转到微博登录页面,如果已经登录会跳转到授权页面,如图
10 min read
Summary

两个回不去的年

2016 农历新年已经落下大幕,但萦绕在大家耳边的还是“家” “过年”这几个词,从上海女孩去江西男友家的失望到农村人口结构的空心化,从拆迁到搬迁,从逼婚到抱孙子。生活在一个不能思考的娱乐世界里,大家也习惯了这些热点的娱乐化、戏剧化。 一九二九不出手,三九四九凌上走,五九六九沿河看柳,....冬日里小时候经常唱的九九歌,现在的城市或许早已无法寻觅这样的天气变化,偶尔的寒风吹到眼角让人心里都要抖一下,城市的供暖让人们不再需要穿上厚重的棉衣来抵御寒冷,从办公区出来走进地铁,从地铁坐上公交,到家依然有热乎乎的暖气,寒冷变成了那霎时的走动,变成一种凝重的风景。今年的北京冷的特别短但又出奇的冷,当大家都在讨论温室效应下的暖冬与雾霾时,雪花却又漫天飘舞,写字楼的人们纷纷掏出手机咔嚓咔嚓,生怕这弥足珍贵的雪花忽然消失在记忆里,对于北方人来说,下一场雪,见怪不怪,长江以北尤其是两广云桂地区见到雪花时他们的兴奋绝对能够抵得上一位珍稀物种造访此地,南方的雪相比北京要小很多,新鲜感与即视感混杂着好奇心刷遍了整个朋友圈与微博。如果只是下雪,冷几日也便会逐渐回归平常温度,冷风却不会答应如此安静的夜晚,伴随而来的
7 min read