Archives

$ tar -cvf archives.tar posts/*

在 VPS 上搭建 Cisco IPsec|L2TP over IPsec 的极简攻略

三年前我写过一篇在VPS上搭建PPTP VPN的极简攻略, 不过一年前我就不再使用 PPTP VPN 了,最主要的原因是因为 macOS 完全不支持 PPTP;另一个原因是基于 ipsec 协议的 VPN 更加安全,IPsec 协议会加密你的网络数据, 避免泄漏或者中间人攻击。所以现在对于需要全局代理的场景,我使用 Cisco IPsec 或者 L2TP(over IPsec) 做为科学上网的方法。 阅读以下内容前,您应该拥有一个可访问的VPS(什么是VPS?)。 可选的VPS有很多,热门的有DigitalOcean, Linode, Vultr, Bandwagon(俗称‘搬瓦工’)等等。 我个人推荐Vultr和DigitalOcean,理由是便宜、稳定、SSD、机房多、有日本机房(中国访问快), 最近维护VPS的时候出现了一些问题, 客服态度非常好, 反应也很迅速, 这个非常重要 …

为什么应该使用本地广播(LocalBroadcastManager)

从 Android 诞生已来,就一直有所谓的四大组件,BroadcastReceiver 是其中之一。 几乎在各种样的应用中都有 BroadcastReceiver 的使用,它被应用于接收系统发送的消息以及与其他应用之间的交互,但也被大量的误用于应用内部通信。 然而在同应用中使用则违背 BroadcastReceiver 的设计用途及理念。 全局 Broadcast 在应用内使用的缺陷 在 Google 的开发指南中清楚的描述了 Broadcast 用于接受来自系统的消息,例如:系统启动、开始充电、应用安装等,那么,它的本质就是一个类似于发布定阅模式用于跨进程的通信机制。这代表了,在进程内部去使用这样一种全局的通信机制,是不合适的,以下选取了几个侧面来进行说明。 全局的 Broadcast 是不隐私的,其他应用可能获取到应用内部通过 Broadcast 发送的隐私信息,无论我的 Intent Filters 是在 Manifest 文件里声明还是动态的注册,作为字符串常量,他们都不会被混淆 …

推荐 Vocabulary.com

阅读之前如果你还在思考背单词的意义,我建议你先想清楚,或者参考别人的意见,例如知乎的讨论 背单词是必须吗 等问题。 从英语方面来说,我肯定不是大神,小神都算不上。 我背单词的路径基本是 中学大学英语书附录 -> 高频词汇书 -> 扇贝单词 -> Vocabulary.com。 那为什么要来推荐 Vocabulary.com 呢? 因为我对于工具的探索大概会止步于此,无意外的话,我以后会一直使用它, 另外,我使用 Vocabulary.com 也源于被推荐,对我帮助不小,多少也觉得有义务“献出一点爱,让世界变成美好的明天”。 自然 Vocabulary.com 还有各种好值得推荐,以下会随便讲一些。 我不会把 Vocabulary.com 所有特点都归纳清楚,只是讲一些我发现的和觉得有意义的,也保证不会对这篇文章负责,毕竟我对我的代码都不见得能负责。 单词记忆的结果 从动词角度解释,「记忆」是通过对事物的特征进行区分、认识并在头脑中留下一定印象的过程。 试想一下,在我们记忆单词的时候 …

通过 Android 辅助功能「Accessibility Service」 检测任意前台界面

前两周看到大牛 @闭关写代码 发微博总结了在 Android 里判断 APP 是否处于前台的方法总结, 并把它们整合成了一个工具库 AndroidProcess。 我看了项目觉得总结得非常全面, 其中读取 /proc 进程信息的方法我们挺久以前就有所利用,确实算是一定意义上的“黑科技”。 @闭关写代码 已经总结的方案如下: 我转发了微博并说 “......其实我知道的还有方法六......”,昨天 @闭关写代码 询问我第六种方法, 这让我觉得也不应该私藏,还是把这些干货抖出来吧。 Android 辅助功能(AccessibilityService) 为我们提供了一系列的事件回调,帮助我们指示一些用户界面的状态变化。 我们可以派生辅助功能类,进而对不同的 AccessibilityEvent 进行处理。 同样的,这个服务就可以用来判断当前的前台应用,这就是我所谓的“方法6”。 优势 AccessibilityService 有非常广泛的 ROM 覆盖,特别是非国产手机,从 Android API Level 18(Android 2 …

如何创建兼容的 Foreground drawable selector,实现layout点击效果

Material Design发布后, 越来越多的开发者将其设计规范融入到APP中。 ripple 的涟漪点击效果就是其中之一, 有一些控件已经支持了 ripple 属性,怎么样将 ripple 效果放到 layout 上并且实现不同API Level的兼容呢? 网上有一些实现,如 RippleEffect,兼容性非常不错, 但其 ripple 效果会直接改变前景色,例如在其中放置一个 TextView 元素, 点击 ripple 效果同样会遮蔽文字的颜色。 那么有没有不需要使用自定义控件,实现兼容的点击效果呢? 答案是:有的。 接下来我们使用 View 的 foreground 属性来实现兼容的界面元素点击效果。因为 forground 属性是 View 类的一个属性, 所以此方案可以用于任意派生自 View 的界面控件。 我们要实现的效果如下: 实现效果 API Level 21 (Android …

在VPS上搭建PPTP VPN的极简攻略

我通常使用Socks或者Http代理做为科学上网方案, 但仍然有很多需要全局代理的场景, 例如像Android SDK类似的各种墙外工具的更新, 或者不能使用Socks代理的手机等, 还有的时候我们希望为亲朋好友提供一个科学上网的方案, 只需要账号密码的VPN方式是最佳的选择。 如果你需要你的VPN更加安全稳定, 那我要推荐你使用OpenVPN和ShadowVPN, 他们更加高效和安全。 当然如果你使用个人的VPS做PPTP VPN, 被追踪的可能也很小, 最重要的是如果你需要这个VPN不依赖于客户端随时随地任意设备可用, PPTP VPN最佳选择之一。 阅读以下内容前,您应该拥有一个可访问的VPS(什么是VPS?)。 可选的VPS有很多,热门的有DigitalOcean, Linode, Vultr, Bandwagon(俗称‘搬瓦工’)等等。 我个人推荐Vultr和DigitalOcean,理由是便宜、稳定、SSD、机房多、有日本机房(中国访问快), 最近维护VPS的时候出现了一些问题, 客服态度非常好, 反应也很迅速, 这个非常重要。 使用以下链接注册可以帮你立省10$, 够用两个月了。 这也是我写这篇文章的动力之一, 你好我好大家好: http://www.vultr.com/?ref …

在VPS上搭建ShadowSocks服务的极简攻略

个人认为科学上网是避免自己知识局限的重要途径, 能够顺利的浏览到自己需要的资讯在任何行业都非常重要。 墙的存在让很多人面对这种基本的要求而望尘莫及, 但正所谓道高一尺、魔高一丈, 我们仍然有很多“途径”能够呼吸到自由的信息。 ShadowSocks正是其中最优选择之一, 本文主要介绍ShadowSocks在Debian/Ubuntu主机的上的配置。 阅读以下内容前,您应该拥有一个可访问的VPS(什么是VPS?)。 可选的VPS有很多,热门的有DigitalOcean, Linode, Vultr, Bandwagon(俗称‘搬瓦工’)等等。 我个人推荐Vultr和DigitalOcean,理由是便宜、稳定、SSD、机房多、有日本机房(中国访问快), 最近维护VPS的时候出现了一些问题, 客服态度非常好, 反应也很迅速, 这个非常重要。 使用以下链接注册可以帮你立省10$, 够用两个月了。 这也是我写这篇文章的动力之一, 你好我好大家好: http://www.vultr.com/?ref=6852942 ShadowSocks一种最稳定、快速、安全的科学上网方法, 它是一款轻量级Socks5代理, 是一个开源的项目, 在此要感谢已被要求删除项目的作者。 使用ShadowSocks有以下特点 …

Python文件(脚本)的绝对路径

今天遇到一个在Python下绝对路径的问题, 因为错误这个错误小小的折腾了一翻, 故对怎样在Python项目中获取对应想要的路径问题进行部分的总结, 特别是避免os.getcwd()函数容易引起的误区。 先描述一下遇到的问题,在路径如下的项目中: project |-- config |-- __init__.py |-- data.db |-- src |-- dao.py 在 config/__init__.py 中定义了一个常量: # 数据库文件路径 db_path = "data.db" dao.py 文件内容如下: import sqlite3 from config import db_path class Dao: def __init__(self): self.conn = sqlite3.connect(db_path) def get_menu_count(self): print …

Gradle 介绍与安装

Gradle的介绍 什么是Gradle Gradle是一个基于Apache Ant和Apache Maven概念的自动化构建工具,它使用 一种基于Groovy的特定领域语文来声明项目设置,而不是传统的XML。当前基 支持的语言限于Java, Groovy和Scala,计划未来将支持更多的语言。 为什么要使用Gradle 其使用了领域专用语言(Domain Specific Lanuage)来描述和处理构建逻辑。 基于Groovy的构建文件,可以使用DSL混合各种声明元素,并用Groovy代码来 整理和控制这些声明元素。 支持已有的maven或者Ivy仓库基础建设 非常灵活, 允许使用最佳实践(best practices), 并不强制你遵照它的原则。 其他插件可以通过暴露自己的DSL和API来让Gradle构建文件使用 允许IDE集成, 是很好的API工具 开始Gradle安装 对于windows或者linux, 可以根据以下步骤安装Gradle: 记住打死不要用apt-get安装,源上的版本太过陈旧 从这里下载编译文件 下载完成后解压文件,将“GRADLE_HOME/BIN“目录加入到PATH(你们懂得) 相信能开始捣鼓Gradle的都不是初级Programer了, 如果遇到问题, 还可以 参考官方的 安装指南 …

linux挂载windows共享文件夹

NOTE: 我们经常需要跨平台甚至设备的共享和编辑文件,在互联网环境下,我们有 Dropbox, Google Drive等很多优秀的工具。而在局域网内用这样的方式就显得 不够明智了。本文将将介绍两种在linux下访问windows共享文件夹的方法。 Mount 挂载 先创建一个目录,用以被挂载 $ mkdir author_windows 在windows下共享文件夹 使用mount命令将文件夹挂载到linux文件系统上 $ sudo mount -t cifs -o username=yourname,password=yourpw //yourip/yourfoldername ./windows

为pelican添加评论系统

简述: 我们知道Pelican是用python实现的一个静态博客生成工具,其本身并不具有动态交互能力的,如果我们是将其搭建在有运行空间的服务器,我们可以通过数据库构建一个评论模块,但对于由静态页面托管的站点就没有办法这么做了,另外自己构建一个评论模块也是件费力不讨好的事情。三方评论系统是一个极好的选择。 三方评论系统 国外有Disqus,国内友言,多说等。 Disqus的主要目标是通过提供功能强大的第三评论系统,将当前不同网站的相对孤立、隔绝的评论系统,连接成具有社会化特性的大网。 而友言,多说等的优势在于集成众多SNS平台API,依托了其他本身强大的社区平台 。 部署都比较简,建议可以多试试再做决定。 为Pelican添加Disqus评论系统 本例将描述怎样为pelican生成站点添加Disqus评论系统。 1. 进入Disqus官网,点击"Add Disqus to Your site" 2. 对自己的disqus进行定制,懂点英文的都能搞定 3. 在Pelicanconf.py配置文件里面添加disqus site name 1 2 # Set Disqus …

DDOS攻击简述

定义: 分散式阻断服务攻击(Distributed Denial of Service), 因为其消耗性特征, 所以又称为洪水攻击。 手段: 利用“僵局“,向某一特定目标发动密集的“拒绝服务“式攻击 目的: 拒绝服务(合法用户不能进行正常的网络服务) 传统DDOS攻击分类-从消耗方式维度分类 1 带宽消耗型攻击 洪泛攻击: 直接发送大量流量至受损受害者系统,目的在于堵塞其带宽。 放大攻击: 发送信息至广播IP地址导致系统子网被广播IP地址连接上之后再发送信息至受害系统,通过恶意放大流量限制受害者系统的带宽。参考 1.1 UDP floods UDP是一种无连接协议,当数据包通过 UDP 发送时,所有的数据包在发送和接收 时不需要进行握手验证。当大量 UDP 数据包发送给受害系统时,可能会导致带 宽饱和从而使得合法服务无法请求访问受害系统。 1 2 3 …

github快速入门

NOTE: 这只是一篇简介帮助你快速的使用GitHub, 关于GitHub的更多介绍请访问:Here Configuration Username 1$ git config --global user.name "Your Name Here" Email 1$ git config --global user.email "your_email@example.com" 如果我们在使用GitHub, 那么邮箱应该和GitHub邮箱保持一致   New Repository Create repository on GitHub 在GitHub创建一个仓库, 如:"doodle.work" Create README file README文件用来描述项目信息和其他你想要展示给想要浏览这个这个项目的人。例如:安装方法、联系方式等 1 2 3 4 5$ mkdir …

主流定位技术简介

Note: 本文中的大多观点是本人总结而来, 如有缺误, 请直接指出讨论。 我们将对各种定位技术做一个浏览, 并对IP定位技术进行深入一些的探讨。 Overview 无线网络繁荣催生了LBS(location based service)技术和应用的快速发展。 这些定位技术从数据源的维度大概分为以下几类: Locate IP IP段依根据地域分配, 还有一部分从IP是固定分配的。 这样能够有对应关系的信息就形成了数据库。通过这样的数据库, 使得我们能够根据一个IP地址获得IP地址信息。 腾讯IP分享计划 新浪IP开放接口 百度OPEN API 淘宝IP地址说库 纯真 MaxMind 局限: IP分配信息的可靠信和ISP相关, 另外大量的IP是随机分配的, 固定分配的IP也会因为各种原因发生变化, 数据库永远不是即时的, 地点是不精确的 GPS定位 位于太空不同位置的GPS卫星不停地向全地球广播自己的当前坐标, 运行状态等信息, 任何GPS接收器都可以通过天线进行接收, 这些来自不同GPS的广播信息就成为了GPS模块位自己位置的数据源。 我们把数据想像成 [position1, d1], [position2, d2], [position3, d3], [position4, d4] 从几何学上的知识我们知道, 二条向量直线就可以在三维空间里面确定一个点, 通过三组 …