生活

那一年的校内网,风华正茂

早上看到消息说人人网被收购了,着实吃了一惊,不光是因为这个价格,还因为居然他们还活的可以。媒体上面没有做过多的报道,做了报道的也没有用太多的篇幅。好像这个地方已经被人所遗忘了。 在离开大学的这几年里,我还时不时的上去逛一圈,直到它把直播作为登陆后的首页,我就以季度为单位,偶尔上去看一下。每次看的时候,都有一种物是人非的错觉,曾经那么热闹喧嚣的一个社区,现在剩下的只是几年前的状态和历史上的今天。这种感觉,就像自己来到了曾经人头攒动的亚特兰蒂斯,如今剩下的就只有沉在水底的秘密。 对于我来说,从08年接触校内网,一直到14年大学毕业彻底离开人人网,这几年的人生经历和这个平台息息相关。从一个默默无闻的小透明,逐渐成为自己这个圈子里面摄影还算不错的一个文青。校内网还是承载了我很多的青春记忆,也见证了我们这一代人的那一段无处安放的青春。 最早吸引我注册校内的原因是,周围的朋友都在上面踢屁股。现在看来不过是很简单的一个带有互动PK性质的Flash小游戏罢了。你可以踢任何人的屁股,并且如果对方的屁股踢出的最远,那么你将会在排行榜展示出来。

  • Domon
    Domon
7 min read
Android

Android show/hide softKeyboard

最近项目中需要有一个地方隐藏键盘和显示键盘。其实是一个比较简单的问题,但是由于我们项目架构的原因。一个Activity中内嵌了很多个Fragment,通过事件去驱动不同的Fragment展现出来。举个例子,注册流程实际上是一个Activity,然后其中包含了ResetPasswordFragment,forgetPasswordFramgent,loginFragment等等。如果用户在Login界面的EditView输入账号密码的时候,通过back键恢复到了上一个Activity的时候,键盘是无法隐藏掉的。 为了解决这个问题,我的第一次解决的方案是这样。通过在VM层中添加一个变量hideSoftKeyboard,然后给XML设定一个自定义的BindingAdapter,传入这个变量。 @BindingAdapter("showSoftKeyboard") public static void showSoftKeyboard(View view, Boolean showSoftKeyboard) { if (!showSoftKeyboard) { InputMethodManager

  • Domon
    Domon
2 min read
生活

商品社会

听到《不说》这首歌的时候,脑子里面想起来的是小岳岳在《从你的世界路过》里面追着柳岩的出租车,大声狂哭的画面。我想每个人都会有这样一段经历,苦苦想要得到的,在某一个瞬间发现再也得不到了。哭过,嘶喊过,沉沦过,但最终我们仍然是会走出来的,无论是时间的作用,还是自己的作用。任何人都是不一样的个体,所以也就不存在标准答案。 当然我说的不单单指爱情,其实对于自己的梦想也是如此。小时候科学家和军人有可能是我们大部分人随口而出的一个未来职业。初中高中可能幻想自己能和娱乐明星一样,站在光鲜亮丽的舞台,让所有人知道自己不一样。上了大学希望自己能和都市白领一样挣很多的钱,过着小资且自由的生活。毕业工作几年后发现,这些梦就像天上的云朵一样,飘渺,虚无。我们和这些云接触最近的时候,也不过是穿行在平流层的那几个小时而已。当我认识到我无法像鸟一样飞向我梦想的那多云的时候,

  • Domon
    Domon
4 min read
Android

RxJava ignoreElement改造成Completable

这两天被一个RxJava的操作符给坑了,就是ignoreElement()。我们在Post一个请求的时候,例如上传用户信息到API当中。 public Observable<Void> delete(String profileId) { return accountApi.deleteProfileById(profileId, null) .ignoreElements(); } 如果这样写的话,会导致上在调用这个delete接口的时候,无法执行**onNext()**里面的逻辑,为什么会这个样子,具体文档里面给的图 很简单明了就可以知道。可以看看ignoreElements这个Operator怎么实现的: public static <T> OperatorIgnoreElements&

  • Domon
    Domon
2 min read
生活

向前一步假装自信直到变得自信

洗澡的时候无意中在想,为什么有的人不愿意接受更加美好的东西,例如说有更好的视频网站Youtube,有更好的聊天软件Telegram,有更好的搜索引擎Google。 阻碍他们的,我想不是那一条绵延的长城,而是自己不愿意尝试以及接受更加美好的事物。我在想,大家如果都在资源匮乏的时候,会不会就没有这样的问题。什么意思,我指的是,倘若当前社会的资源极度缺乏。那么我们所有的选择就压根没得选,既然没得选,那我也只能被选择这样。比如说,在搜索引擎刚刚在中国开始起步的时候,国内如果想用搜索引擎,有很多选择,Google,Yahoo,Baidu。那么对于个人来说,你可以自由的选择你想用的。这没有问题,选择权在你手上。 但如果突然有一天,你发现你用不了Google之后,转向了Baidu,Sogou,SoSo,

  • Domon
    Domon
3 min read
IT

Git Reset 三种模式

日常的工作当中,由于需要和别人协同工作,代码方面当然就直接使用Git的方式来管理了。在日常使用当中有很多命令比较常用 git commit git push git stash git rebase -i HEAD~想要合并的Commit数量 git reset git rebase 我在这一篇文章已经做了一点讲解,应该使用起来都比较方便。值得一提的是,可以使用git rebase -abort来撤销一次rebase。 今天来说一下git reset。它的一句话概括 git-reset - Reset current HEAD

  • Domon
    Domon
3 min read
Android

EidtText点击事件第一次不生效

这两天在开发一个功能的时候,发现项目的UX要求EditText点击出来一个AlterDialog。在一顿setOnClickListener操作之后,我发现了一个小问题。在点击的时候,需要点第二次才会show出来这个Dialog。原因是EditText这个控件需要在第一次点击的时候获取焦点,第二次点击才触发OnClick事件。非常合理,因为EditText的作用是为了输入文字,所以需要先获取焦点。 查了下资料,发现改为onTouchListener就可以解决问题,只不过这里需要注意下OnTouch会调用两次,在手指按下和释放的时候。因此,需要添加一个flag来消除这个操作。 view.setOnTouchListener(new View.OnTouchListener() { int touch_flag = 0; @Override public boolean onTouch(View view, MotionEvent

  • Domon
    Domon
3 min read
Android

Fragment二次进入刷新

对于Activity来说我们想要去做用户Back后的逻辑很容易,直接从生命周期的**onRestart()**中做处理就好,例如用户从ActB返回到AtcA中,我们想要把统计分析数据上传一份到第三方统计平台中。但是对于Fragment来说,它的生命周期其实是依附于外层的Activity的,这样对于上面这个简单的需求就需要换一个思路处理。 假设我们现在有1个Activity和2个Fragment,当用户从ActivityA->FragmentA->FragmentB时,这时,我如果想获得这三个View的打开的状态的话,想一想我们可以怎么做。Activity简单,放在**onCreate()**里面就可以。返回的话就需要对于中间这个FragmentA做一下判断,确保它的第二次打开不会上传上去。因此,我们可以设置一个变量来记录当前Fragment初始化与否。 private boolean isFirstLoading = true; /** * 在Fragment可见的时候刷新数据 */ @Override public

  • Domon
    Domon
1 min read
生活

下雨,夏雨

前两天还在期待来一场所谓的比较喜欢的夏天的雨天,没想到这两天就这么突如其来了。在中学时代是特别的喜欢这样的雨天的,打开窗户看着楼下来来往往的人,总感觉自己像一个上帝视角一样,看着芸芸众生就那样的走了又来,而我自己却能独善其身。 中学时代好像对下雨天有一种特殊的迷恋。期待每一个夏天都会有不一样的青春事迹。以为自己的青春是永远定格在燥热的夏天、暴雨的夏天和充满荷尔蒙的夏天。 在我脑海里面夏天就等于青春,青春当然也就是属于夏天。若一年四季按照人的生老病死来做比喻—春天的懵懂,夏天的激情,秋天的稳重和冬天的凄冷。那么夏天一定应该是我这个年龄所迷恋的。 想一想如果我是在一个江南的小镇长大成人,应该就不会对夏雨又这么强烈的感情了。在干燥少雨的西北,等待雨的到来,就如同等待情犊初开的小女生慢慢放下矜持一样。 我觉得我自己有点像《大鱼》里面的那个爸爸,一辈子就处于对水无限的渴求当中。有时候我怀疑自己是不是真的是一条大鱼,每天水一杯接着一杯的往嘴里灌,仍然觉得渴。 下雨天,恨不得一头钻进雨里,任由大雨磅礴打在我身上。

  • Domon
    Domon
2 min read
Android

Android全屏幕隐藏NavigationBar

有时候针对一个视频播放页面,需要将NavigationBar隐藏掉,这样有更加好的用户体验。我最近在做ExoPlayer相关的一个视频播放的需求,发现默认情况下,这个Player是没有隐藏掉NavigationBar的,这就导致了在点击屏幕暂停播放的时候,会拉伸缩放视频比例,上下留有黑边。等到NavigationBar被隐藏的时候,视频又会重新填充进整个屏幕。体验不是很好,所以需要改造一下NavigationBar。 原理很简单,就是通过获取getWindow().getDecorView(),然后设置setSystemUiVisibility就可以实现。但是要注意API版本,直接看代码片段。 protected void hideBottomUIMenu(){ if (Build.VERSION.SDK_INT > 11 && Build.VERSION.

  • Domon
    Domon
1 min read
Python

Python版本更新

最近由于频繁的在PC,Mac以及VPS中切换,导致Python的版本管理起来特别的麻烦,同时Pythond版本,分裂有点严重。还是想统一一下更新到最新版。比较容易,就简单记录一下。 在VPS[CentOS]中先升级一下所有的库 yum update 然后去这个地址),下载最新的Python3.6的源文件 wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz 下载完毕后,解压并进入这个包准备开始make tar

  • Domon
    Domon
2 min read
IT

Telegram Bot开发(一)-- 申请调试Bot

由于群里面的小伙伴的需要,刚好我也想玩玩,就答应了帮他做一个Telegram Bot(下简称TgBot),用来统计和维护我们群里面的一些信息。接下来,我会用一点时间,把整个流程给写出来,做成一个系列,方便以后大家的查阅。网络上也有很多库可以使用,本着学习的态度,我还是觉得需要造轮子。 先说一下需要准备的东西: Tg的账号 从BotFather申请的Bot的Token 流畅的网络能访问Tg的Api 模拟请求神器Postman的简单使用 高级语言,Python,Java,Kotlin,Ruby,C++都可以,选一个你熟悉的就好 能够访问TgAPI的服务器 这一篇文章,我们先来看看如何通过Postman调用TgAPI来获取TgBot接收和发送消息。 申请Bot 在你的Tg客户端中搜索BotFather,看名字就知道是所有Bot的father。

  • Domon
    Domon
3 min read
Android

截取部分Url链接

早上做一个Feature的时候,需要这样的一个操作,将给定的一个URL字符串,转换成Application中的Path路径,方便Router做跳转。最开始我是打算通过正则来去写的,最后想一想普通的String转换就能做到。假设输入路径为https://www.google.com/testUrl/ThisisatestHttps://www.google.cn/notatallhttp://www.baidu.com预期想要得到的结果为/testUrl/Thisisatest/notatall/代码很简单,如下private String convertUrlToPath(String url) { url = url.substring(url.

  • Domon
    Domon
1 min read
生活

回不去的是那年炙热的夏天

这一篇文章本来就应该在国民高考之前写出来的,最近的工作实在有点让我措手不及,趁着闲下来的时候,还是想静下心来写一写。高考在中国的社会地位非常的特殊,自小就被塑造成人生为数不多的体现公平公正的几个场景之一。一系列的形容词都在正面和侧面的描述这个残酷而有充满青春气息的仪式。不得不说,高考仍然是绝大多数中国学子的必经之路,可能这十年随着移动互联网的迅猛发展,会有一些其他的选择,但那毕竟是少数。 距离我的第一次高考,已经过去了一个陈奕迅的十年。十年按照西方国家的话来说,It’s such a long journey。十年之前,我还是个颓废的孩子,十年之后,我仍然是个阴郁的青年。十年之前,我还在用着MP3,MP4,十年之后,我已经使用智能手机,用着MP5对着敌人突突突了。十年之前,我结束了中学时代的爱情,

  • Domon
    Domon
6 min read
IT

手动更新Kindle

前两天听说,Kindle更新了固件5.9.6,支持自定义的字体了。但是我在Kindle中的自动更新上面一直是灰色不可用的状态。查了下才知道,Kindle的推送是分批的,一般在一个周到一个月不等。本着,自己动手,丰衣足食的原则,我自己去下载了新的固件,并使用了几个免费的没有版权的字体。整个过程非常的简单。 下载对应你的Kindle版本的固件。根据你自己的版本来在这里下载。 将Kindle连接到电脑的USB中 打开Kindle的根目录,复制上面下载的固件进去 拔掉电源,在Kindle的设置-设备信息-高级里面,就会发现自动更新已经可以使用了 点击自动更新,等待设备自己重启更新固件 设备开机之后,根目录会多出一个文件夹font,将你想要自定义的字体(TFF格式为佳)放进去 打开一本书,在Aa设置当中,就会发现有自己的自定义字体可以选择了

  • Domon
    Domon
2 min read
Android

Android Handler使用

在Android开发的过程中,经常会有这样的场景:从网络获取数据然后更改某个控件的属性。例如,从网络API获取Json,解析某个字段的值,将它设定到对应的TextView中。在很多人刚开始入门Android的时候,可能会将网络请求解析和设定TextView放在一起处理。当然这样是不行的。为什么呢?这个就需要引入线程和进程的概念。 进程和线程 说到进程,其实是需要大致了解一些计算机的CPU原理的。CPU是一台电脑的处理核心,假设现在的CPU是单核的,所有的任务处理都是需要通过它来进行的。它通过时间将任务分成一个又一个的时间片进行处理。对我们用户来看,好像上网、听歌、处理Word好像是一直都在运行。但对于CPU来说,它可能处理了一会上网的任务,又处理了一会听歌的任务,然后又处理了一下Word的任务。因为CPU速度很快,现在操作系统也有很好的调度策略。导致对于我们用户来说,好像任何的任务都是连续不间断的。上面所说的上网、听歌、

  • Domon
    Domon
5 min read
Android

智能电视Root并删除预装

自从不怎么玩Xbox了之后,一直都没有怎么用过电视,基本上大的需求就是把NAS里面的电影有的时候在电视上面放着看看。每次开机都被我家这个海信智能电视的广告恶心到了。说好的智能也就是在Android系统开机之前放一个15~30s不等的广告。 想一想,既然都是Android系统了,那么就很简单了,Root后我找到对应的预装软件删除了就好了。 环境信息 智能电视:海信K370 工具:一台电脑,一个外接USB键盘 前提:保证电脑中ADB已经配置好了,同时电脑和电视在一个局域网 开始 打开电视的ADB调试模式 这里面每个品牌的智能电视都不一样,像海信不同型号的方式也不同。具体的大家可以自行电视型号+工厂模式就可以搜出来。我的这台电视机,需要在**「设置-声音-声音平衡」的这个选项中,通过外接键盘输入1969**,此时屏幕右上角就会出来一个黄色背景的M,按遥控器的菜单键,就可以呼出工厂模式的菜单了。

  • Domon
    Domon
3 min read
Movies

Vol.1 一周一部好电影 --《Lost in Translation》

迷失东京 2018年有一个比较小的计划,即看50部电影,解析下我对于我看的这些电影的感悟。分解下来实际上就是每周需要看一部电影。其实时间已经过了2个月,我应该也没有看到8部。 这周刚好有时间,选择了一部也是最近才知道的电影,《迷失东京》,英文名称叫《Lost in Translation》,导演是教父里面那个Baby。看海报的时候,并没有发现是斯嘉丽约翰逊,直到看了她的屁股之后才确定就是她(掩面)。 要说中文的片名翻译,其实我是不怎么喜欢的。整个故事虽然发生在东京,但实际上整个故事的主题,讲的是爱情中迷失。寡姐在片中的名字叫夏洛特(夏洛特|烦恼),男主叫哈里斯,由比尔默瑞扮演。寡姐当时15岁,漂亮身材又棒。 故事实际上不是很复杂,包装在东京美景之后的都市爱情故事。

  • Domon
    Domon
4 min read
Android

RcyclerView DataBinding结合

最近在将自己之前的项目从MVP更改到MVVM,遇到了一些坑,也学习了不少。记录下自己怎么去解决RcyclerView和DataBinding结合的过程。本文的前提是假设你有一部分的MVVM的基础,并且知道如何是用DataBinding。 重点 先说重点,RcyclerView和DataBinding结合最重要的其实就两个方法: onCreateViewHolder()中ViewHolder获取了对View的引用,方便快速的处理数据 onBindViewHolder()中将指定的数据传送给View 实现 为了达到通用的目的,我创建了一个基础的Adapter。按照上面说的两个重要方法。我们看看如何实现: onCreateViewHolder() @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { B binding = DataBindingUtil.inflate(

  • Domon
    Domon
3 min read
生活

Think Different

最近花了一些时间来研究MVVM,这个东西和之前的MVP的思想乍一看其实挺像的,但真正到自己去理解和实践的时候,也花了不少的力气。 在整个学习的过程中,有过懊恼,有过愤怒,有过不解,有过豁然开朗。这或许就应该是一个正常的学习过程应该要经历的过程。确实从现在的自己的状态,以及自己的折腾能力来评估自己。水平还是下降了不少,很多时候我自己的一些学习方法和思想还是大学时代遗留下来的产物。现在越发的觉得时间宝贵,精力宝贵。当每天下班回家,拖着沉重的身体后,精力和时间都消失殆尽,留下来的就是沙发的葛优躺。 都说身体才是革命的本钱,其实话一点都不假。我现在的状态多半都是,身体已经严重导致思想有了延迟。这样的延迟,让我很难有一个比较好的状态去投入到一件事情上面。或许是因为我自己并不知道怎么去放松导致的,现在其实多半我也没有怎么考虑过未来几年我自己的样子。 这样其实挺可怕的,没有梦想和咸鱼有什么两样,那个有追求,有想法,有见解,

  • Domon
    Domon
5 min read
IT

Git合并Commit

在日常的代码提交过程中,一定会有一些情况,提交了一些临时的Commit,这些Commit会影响整个我们回顾Git Log。所以需要在合适的时候,将一些临时的信息,或者某几条Commit合并起来。 首先假设我们有三条最新的Commit记录,ABC。我们输入 git rebase -i HEAD~3 HEAD~3表示从当前的提交往回三次以内的提交。这时候,会进入一个rebase-edit的界面。在这个界面中,可以选择你想要合并的Commit,通过Commands: p,pick 使用这条commit r,reword 使用这条commit,并编辑commit message e,edit

  • Domon
    Domon
1 min read
Linux

服务器图片403

这两天服务器端的环境已经部署好了,发现了一个问题,登录后台管理系统的时候,很多图片的地址无法正常访问。提示403错误,顺藤摸瓜的找了很久,没发现什么异常。改了Nginx的配置文件,支持了正则图片格式。仍然失效。突然想起来是不是权限设置的有问题。ls -al 一看果然。,。默认的权限都是root的。因为我设置了一个独立的用户组来控制,所以在nginx访问这些目录的时候,肯定会提示403错误。大意了大意了。

  • Domon
    Domon
1 min read
生活

整理文件迎接新的一段时间

在整理文件的时候,看到了很多之前的废弃文件。有工作上的,有生活上的,有代码上的,还有些七七八八的。 从14年的懵懵懂懂的初入职场的青年,到现在胡子已经3厘米长的大叔。我经历了很多,收获挺多,失去的也有。但总归,仍然挣脱的在路上。 不为别的,就是为了那么多期待的眼神。 删除文件的时候,我发现和之前比起来,也改变了很多,断舍离,是需要十足的勇气和过去说拜拜的。 之前有人说过,你过去做的太牛逼,在未来也是一文不值。人需要放眼于未来,一位的回归过去的思路,是很不对的。刚刚看到郭霖在他的CSDN上2017年终总结,一个不顺心的槛年说了一句话我觉得很有意思。 我发现人的心态真的是会随着年龄的变化而产生巨大的变化,去年27的时候还觉得自己才刚25岁出头,今年28的时候就觉得自己马上就要30岁了。 27岁的时候,还能想着25岁那年的事情,

  • Domon
    Domon
1 min read