微信你的kindle V2.0  

作者:JerryXia | 发表于 , 阅读 (0)
主数据库从ElasticSearch换成Slick+H2。微信机器人模块完全独立出来,通过Rest API和主数据库交互。原有构架中,每个模块(微信机器人,蜘蛛,邮件)都在同一个Akka Cluster中,并自带一个ElasticSearch数据库本地实例,数据的读写操作都针对这个本地数据库,数据同步交由Elastic集群完成,完全无需关注其他模块的存在。 这个方案的最大优势是可扩展性,能够非常方便的增加模块实例,提高整个系统的吞吐。但缺点也很明显:对于Neveread这样一个小系统,这一套东西太overkill了,并且ElasticSearch数据库的管理能力较弱,不便于引入复杂一点的数据操作。改版后,neveread的服务器从阿里云1G内存迁移到了DigitalOcean 512M内存的VM,并通过了相同强度的压力测试。
细节改动:
去掉了自动好友验证功能。去掉了邮箱全文投递功能。(update:已反合全文投递功能,发送文本或HTML内容到「不读」为你分配的@kindle.pm邮箱即可)引入基于用户的优先级投递功能。增加微信机器人的功能。如:替用户投递文章,绑定邮箱,自动抓取关...阅读全文

  ShellDroid:用Scala写一个简单的微信多开App  

作者:JerryXia | 发表于 , 阅读 (0)
30 May 2016ShellDroid:用Scala写一个简单的微信多开App起因因为运行着一个Kindle推送微信机器人,时常需要在手机上切换私人微信号查看一下,每次手动重新输入帐号密码过于麻烦,网上的微信多开版本又各种不靠谱。研究了一下安卓App运行过程,发现其实要实现App多帐号运行非常简单,于是自己动手写了一个。
为什么使用Scala写安卓应用虽然Java是Android上的官方语言,各种坑更少。但Scala因为语言本身的优势,可以更愉快的写代码,加上sbt android等第三方库的成熟,自己要折腾的地方并不多。
Scala写安卓应用的优点代码更简洁,Scala的implicit特别适合处理Android UI代码中的随处可见的context上下文参数,隐式类型转换用来提取UI控件信息等,也能大幅度减少代码。类型安全的资源文件(Typed Resources)。不用先findViewById,再Cast到正确的资源类型。借用安卓AsyncTask的线程池配合Scala的Future,轻松实现异步处理。Scala的原生语言特性(lazy val懒绑定)直接实现Butte...阅读全文

  scala的implicit和magnet模式  

作者:JerryXia | 发表于 , 阅读 (0)
21 April 2015scala的implicit和magnet模式对初学scala的人,implicit像一个黑魔法,来无影去无踪,像它的名字一样非常“含蓄”。
从某种意义上讲,implicit是一个类型系统的游戏。scala是强类型系统,所有的参数都需要符合类型预期,如果需要一个Int类型,你传来一个String,编译器会报类型不符错误。implicit的引入,使在报错之前还有一次机会,即:如果编译器在当前作用域内找到一个从String转换到Int的implicit定义函数,编译器会用这个implicit把你传给它的String转换成它需要的Int,于是一切又愉快的发生下去了。
当然这只是implicit的一种使用场景,spray.io(已合并到akka-http)的magnet模式利用的就是这个特性。
magnet模式magnet模式简单讲就是通过定义一个magnet类型作为统一的参数,然后针对需要重载的参数列表,类型等,在magnet类型的companion object中实现相应的转换为magnet类型的implitcit函数。
如:可以定义一个Magnet类型实...阅读全文

  理解Android的刷机和Rooting  

作者:JerryXia | 发表于 , 阅读 (0)
30 May 2016理解Android的刷机和Rooting相对于IOS,Andorid系统的最大优势是它的开放性,但这种开放性是一把双刃剑,它在给用户更多选择的同时,也让恶意软件有了更多的作恶途径。理解Android的运行机制,不仅能帮助我们更好的使用Android,也能保护我们不受坏软件的欺负。以下是我对刷机和Rooting的理解,以记录为主,有不对的地方欢迎指出。
一台安卓手机主要有3个独立的软件系统:bootloader,Android主系统,recovery系统。
开机时,bootloader最先启动,并可选择加载Android还是recovery系统。可以理解为PC的BIOS。
Android主系统是最复杂的部分,它又分成boot,linux内核,Dalvik/ART支撑起来的App运行环境和各种App。
recovery系统主要用于Android主系统的升级,故障修复恢复出厂设置等。有点类似Windows下的安全模式,但和安全模式不同,recovery是个安装在单独分区上的独立系统,能在Andorid主系统没有运行的情况下独立运行,所以可以修改主系统上的任何文件...阅读全文