生活

养一只小青蛙

最近《青蛙旅行》这个游戏非常的火,今天我也下载下来试了试,感觉挺不错的,对于我这样的青年来说,看到小青蛙回来了就很开心。整个游戏非常的萌,我只需要帮青蛙装好一些必需品,他就自己上路了。什么时候回来,什么时候上路,都不受我控制。也挺好,这不就是所谓的,自由自在,身随心动。看到第一次回来后,带给我来自外省的和果子,心里还是感动的。游戏,其实需要带来的就是这样单纯的快乐和感动。我为任天堂打Call,唯一没有忘记游戏梦想的游戏公司。

  • Domon
    Domon
1 min read
IT

SSH服务器免密码登录

最近由于工作的需要,经常需要通过SSH登录各种不同的服务器。之前是通过vSSH这个软件来管理,现在比较倾向就使用iTerm2就可以了。 在使用终端来进行操作的时候,一次两次SSH还可以,但是次数多起来后,一遍又一遍的输入密码很麻烦。而且为了安全,我们AliYun的密码也挺复杂。每一次都需要在Evernote中找到,复制粘贴过来,很不爽。本来考虑写个脚本来处理,但是觉得明文的将密码存储下来,不是很安全。 So,既然都用的SSH,那合不使用SSH的特性来处理这个问题?免密码登录,就能方便的登录各个不同的服务器了。 SSH是一种对称加密,所以我们就只需要通过把自己的公钥放到远程服务器中就可以了。 拷贝出自己的公钥信息 cat ~/.ssh/id_rsa.pub 登录到远程服务器中,查看**~/.ssh/authorized_

  • Domon
    Domon
2 min read
生活

Apple Pencil初遇

前段时间心情实在是不好,冲动消费了把,在老范那边买了一根Apple Pencil。不到两天,顺风19元送到公司了。今天当然也就把iPad Pro带着一起体验了体验。 说手感无敌,真的可以。顺滑,跟手,并且防误触这一点实在是爽。双手趴着上面写字都没有问题。我猜测应该是利用蓝牙的连通,来控制识别什么样的信号给iPad Pro。 之前在淘宝买了个山寨的笔,其实做工也挺不错,使用起来也还可以。当真正用上了Apple Pencil后,那种飞跃的感觉,是怎么也回不去了。使用起来,完全没有觉得这是一款触控笔。应该说「真正的科技,就是让你感受不到科技的存在」。 试着用备忘录写了一段文字,讲真,我觉得可以作为一个电子笔记本使用了。边写,

  • Domon
    Domon
1 min read
Android

Android签名信息获取

由于接手一个二次项目,需要更改一下之前的签名信息,但是发现签名信息修改之后,程序中出了很多问题,跟踪了下,发现是接入第三方平台服务过程中,签名信息不一致导致的。 可以在命令行中输入 keytool -v -list -keystore yourkeystore 之后会有这么一串信息输出 别名: test 创建日期: 2017-11-13 条目类型: PrivateKeyEntry 证书链长度: 1 证书[1]: 所有者: 发布者: 序列号: 有效期开始日期: Mon Nov 13 16:57:

  • Domon
    Domon
1 min read
Linux

Centos中双开Tomcat

因为最近的项目需要使用Tomcat来运行,且分了API和Admin两个项目。我就想通过配置,让Tomcat多开。经过一天的折腾和配置,基本上已经完全实现业务需求。由于本机已经安装过一个Nginx,所以Tomcat的默认端口需要修改下。 有两种方案可以解决。 第一种方案:一个Tomcat多开Service 想要多开Service也很简单,只需要复制Tomcat配置中的Service页签就可以了。 <Service name="Catalina"> <Connector port="9080" protocol="HTTP/1.1" connectionTimeout=

  • Domon
    Domon
2 min read
IT

Typecho数据库格式转换为Hexo

由于自己博客框架从Typecho转换到了Hexo,整体的数据格式还是有一定的区别的,所以如何将把我之前的数据导过来是一个头大的事情。 Github上找了几个人写的方案,感觉思路都没有问题,只是感觉还是有点繁琐。 困扰了我几天之后,这个问题在今天得到了解决。 参考了下这为朋友的Tyephcoq迁移到Jekyll,我也下载了这个库使用了下,特别的方便。 分享给大家,戳这里 使用方法很简单,一行命令就可以搞定。连接服务器之后按格式转换后,保存本地。 typecho2md --host localhost -u root -k root -d typecho -p typecho_ -t tempt.md outputdir/ 配置的模版信息tempt.

  • Domon
    Domon
1 min read
Tips

MySQL远程数据库访问出错排查

上一次在做Django的时候,我就遇到一个问题,我的远程MySQL数据库一直连接不上,比较头疼。但是后来通过mysqldump把数据从远程拷贝到本地来了。 这一次由于牵扯到Typecho的数据转换,我找到的解决方案是通过node的一个包来进行转换。为了使我的Blog数据得以迁移过来,我就不得不开始了折腾之旅。 Navicat里面提示错误信息「2013」,查询了很多结果,基本上都是说自己的远程MySQL没有配置好导致的。 问题排查记录: 去找了下配置文件/etc/my.cnf,里面并没有配置bind_address。应该是MySQL版本较高的原因,默认配置是没有的。 在**[mysqlld]中添加上了skip_name_resolve**,仍然不起作用 远程数据库帐号权限问题,再三确认没有问题 可以通过以下命令获取远程登录权限 grant all

  • Domon
    Domon
1 min read
iOS

Apple Developer 开发者

因为公司需要做iOS的项目,所以几周前我就在申请邓白氏,申请的过程实际上还挺顺利,要什么资料我给什么就完了。就是在公司英文名字那一块有一点点不标准,修改过后,立马就完成了申请。 等了7-14个工作日,对,你没有看错,就是工作日后,我最终的苹果开发者帐号就下来了。 但是今天看邮件的时候,我居然把我自己的手机号写错了,而且还错的非常离谱。 黑人问号?? 可以回复邮件更改联系方式,或者致电400电话。为了迅速的快速的下来公司的开发者帐号,我就快速的打电话过去了。选择「中文」,放了两首音乐都没人排上队。 那我想着不然试试「英文」,果然不出所料,秒接。,。这个外国人的声音超棒,很喜欢也比较耐心。 就有那么一种,穿越到加利福尼亚的感觉,很喜欢。 中间有点卡壳,

  • Domon
    Domon
1 min read
Android

更新AS导致界面预览失效

今天在更新自己笔记本的AS时候,遇到了一个问题。首先打开Layout文件,没法预览布局。 按照网上说的,我将我自己的SDK版本做了勾选,仍然无法使用。 使用了无数次的Restart and invalidate caches 仍然没有效果。反倒Run 那一栏全部灰掉。找寻了很久没有找到很好的解决方案。 看到Log输出的结果是这样: Write access is allowed from event dispatch thread only 顺着这个思路,看到了SOF上面有一个开发者提供了一个解决方案,试了试。成功。 原因就是在AS 3.0RC 版本升级到AS

  • Domon
    Domon
1 min read
Android

同时安装Release和Debug版本

在开发的过程中,由于经常切换开发环境和线上环境,对应的开发出来的包也是Debug和Release两个版本。由于Android只允许一台手机安装包名唯一的APP,所以难免在切换环境的时候,来回的删除再安装。 原理 为了想解决这个问题,昨天我着手将自己的APP配置了下,已经完美可以实现两个版本共存了。用到的,其实是Gradle的灵活性。 既然上面已经说了,Android系统默认只能安装一个包名相同的APP,那要想同时安装两个APP,所要做的操作就很简单了。让Debug和Release产生出不一样的包名就可以搞定。 实现 顺着这个思路,我们只需要利用Gradle的特性就可以完成。在默认的情况,我们是可以通过Gradle配置来实现分版本打包签名。 `android{ signingConfigs { debug { } release { storeFile file(“x.keystore") storePassword “x”

  • Domon
    Domon
2 min read
Tips

取消git中文件或者文件夹的版本管理

很多时候,在开发的时候,由于自己的不小心或者别人的不小心,将一些本来不应该被git版本管理的文件或者文件夹放到网络上或者本地的版本库中(我好像用了很多个或者)。下来就需要将这些文件移除在git版本之外。 当文件已经被手动删除,但是没有从git版本库中删除的时候 这个时候需要,通过**git rm -r fileFloder/ **来删除整个文件夹 当文件仅仅想从git版本库中删除,但本地不删除的时候 通过**git rm -r --cached -r fileFolder/ **。这样fileFolder这个文件夹就从git版本中移除了,同时并没有在本地文件删除这个文件夹。 另外一种方法,可以将这个文件夹,写在.gitignore里面,push到服务器上面即可。

  • Domon
    Domon
1 min read
Tips

MySQL迁移至SQLite

由于最近学习了Django,想着不然把自己的Blog从Typecho迁移到Django的框架中,其实上层差别不是特别大,一个是PHP一个是Python。下层的话,由于我初学Django基本的教程都是通过SQLite作为默认的数据库的。刚好我做Android开发的时候,其实数据库使用的就是SQLite。因此着手把数据库进行迁移下。遇到了一些坑,记录一下。 网上很多SQLite转MySQL的教程,唯独没有MySQL转SQLite的方案。找了几个,大体上的方案都很类似。先将MySQL的DB转换成txt格式,通过批处理修改一下创建表的语法,然后在生成一个SQLite的数据库。实际操作起来不是特别方便,我选择了这个回答下面的方案。 得益于dumblob这位开发者开源的这个项目,我在服务器端通过mysqldump和它的脚本生成了一个SQLite3的DB,将其考到本地。 由于这个脚本只是生成表结构的,并没有将数据导入进来,所以下一步的计划是将数据导入到新生成的SQLite3DB中。 在导入的过程中发现了,若按照正常的生成语句是无法写入NULL数据 template = models.IntegerField(blank=True)

  • Domon
    Domon
2 min read
Python

Django学习1-安装Django

之前也安装过Django,但是一直没有深入的去学习和了解,最近工作任务不是特别繁忙,我打算花一点时间来学习学习Web开发。开发环境在MacOS。 安装Django 先按照这里的教程,把之前的旧版本Django删除了去,官方提供了两种方案 rm -rf Python安装地址/site-package/Django,实测再次安装的时候,会提示目前系统已经存在Django 通过pip命令来删除,sudo pip untinstall Django,注意权限问题 删除了旧版本, 仍然建议通过pip去安装新版: sudo pip install Django 安装完毕后,检查一下Django的版本,最新版的是1.11,以下两条都可以:

  • Domon
    Domon
2 min read
Python

Python安装virtualenv

今天在Youtube上看一个视频教程的时候,才知道Python下面有这样一个好东西,有点类似Docker,实际上又比Docker轻量级很多。Python的优点就是库很多,很方便的站在别人肩膀上快速开发。但这个有点也是一个缺点,在项目比较多的情况下,由于所有的site-packages都是公用的,这样不便于修改配置。所以,需要有一个类似虚拟环境的东西,来保证对于单个项目中的虚拟环境都是互相隔离的,特别的纯净。 安装的过程实际上也特别的简单: pip install virtualenv 进入你的项目目录中,创建一个虚拟的环境: cd yourproject virtualenv —no-site-packages venv 这样一个独立的虚拟环境就设置好了,在项目的目录下多了一个venv,里面包含了Python所需要的环境。接下来以安装Django为例,我们看看怎么使用这个虚拟环境。仔细观察一下 venv/bin/

  • Domon
    Domon
2 min read

MacOS JAVA HOME设置问题

今天遇到了一个比较蛋疼的事情,因为我切换了AS的升级渠道「从稳定版到了金丝雀版」,自然而然的少不了按照最新的Preview版本。前两天闲来无聊,将原始的2.x版本进行了删除,那么问题来了。 正常的跑程序都没有问题,但当使用命令行的语句的时候,就会出现这样的错误: ERROR: JAVA_HOME is set to an invalid directory: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home Please set the JAVA_

  • Domon
    Domon
1 min read
Android

关于Toolbar的Back返回问题

昨天在引入Toolbar的时候,出现了一个问题。就是按Toolbar上面的back按钮没有反应。实际上点击时间是发生的,因为产生了动画。 同样另一个Activity,也是用了同样设置方法,确是可行的,我觉得很奇怪,看了看两者的区别,初始化的时候代码都一样 setSupportActionBar(mToolbar); getSupportActionBar.setDisplayHomeAsUpEnabled(true); 找来找去,都觉得很奇怪,去SOF搜了下,这里有一个解答。 其实一下子转眼一想,也就明白了为什么会这样。Toolbar上的按钮「无论是自定义的还是系统实现的」实际上都是需要在**onOptionItemSelected(MenuItem item)**中来处理选择后的逻辑。因此,这里需要将Toolbar中的back事件处理下。即 @Override

  • Domon
    Domon
1 min read
Android

ButterKnife in BaseActivity and BaseFragment

在日常的开发中,我们经常会遇到这样的场景,几个比较特定的功能或者重复的代码在Activity/Fragment中,我们一般采取的措施就是抽离出来去做一个基类,然后通过子类继承父类的方式来实现。 对于用过ButterKnife的朋友来说,应该已经体会到BF的便捷性和优点。所以理所当然,我们需要把BF放到BaseClass中,节省书写重复代码。 但正如这个issue中JakeWharton说的那样: Gotcha. Butter Knife is not magical and is actually a very boring, stupid, and predicable library. If you call Butter Knife

  • Domon
    Domon
1 min read
Android

Google TODO-MVP详解

简单介绍在日常的开发当中,经常会遇到需求的变动。这个东西是真的难以避免的,所以对于产品的基础框架就比较重要了。Google大大在I/O大会上提出来了Android开发方式是属于MVP的,即Model+View+Presenter。另外在GitHub上面放出来了一个样例,供开发者学习,这里可以看到整个项目的简介。Google通过一个TODO类的APP讲解了如何使用一些第三方库,已经如何基于他们构建自己的APP的框架。目前的状态Stable samplesSampleDescriptiontodo‑mvpDemonstrates a basic Model‑View‑Presenter (MVP) architecture and provides a foundation on which the other samples

  • Domon
    Domon
8 min read
Android

如何自定义View

首先奉上AndroodDeveloper的教程。 假设我们以自定义一个View,实现圆形的按钮功能。 说一下简单的流程: 继承View 重写构造函数 重写OnMeasure()方法 重写OnDraw()方法 配置XML 我把配置XML放到最后不是因为需要最后去处理,而是它相对来说比较独立。 继承View,重写构造函数 首先重写View的构造函数 private CustomView (Context context){ this(context,null); } private CustomView(Context context, AttributeSet attrs){ this(context,attrs,0)

  • Domon
    Domon
7 min read

ConstraintLayout学习笔记

[Google ConstraintLayout简介](https://developer.android.com/training/constraint-layout/index.html)ConstraintLayout概述ConstraintLayout是去年谷歌IO提出来的一个新的布局,我对它简单的理解就是其将界面的层级简化,对待一些简单的界面,不用在写层层嵌套来进行布局了。AS提供了一个Layout Editor,通过这个工具可以很方便的排列组合Views。需要注意的是,这些Views都是通过**约束(constraint)**在一起的,所以会存在下面的情况。在第一种的情况下,C相对于A只有水平方向的左右依赖。当这个布局在设备上面展示的时候,会导致C的长宽和A相同,但是会出现在屏幕的顶端。这是因为C没有相对于A的垂直方向的依赖,所以导致系统不知道C的位置,自然就放到最上面了。所以在Layout Editor中编辑的时候,

  • Domon
    Domon
2 min read
Android

Data Binding(四):事件监听

在之前的文章里,我写了如何在Android App中如何消除FindViewById(),同时解决View IDs的问题。有一件事情是我没有在之前文章中显示出来,即如何处理事件监听,例如View’s OnClickListener和TextView’s TextWatcher。 Android Data Binding 提供了三种在布局文件中设置事件监听的机制,你可以选择最适合你的方法。不同于基础的Android OnClick属性,在data binding的实践机制中没有使用反射,所以不论你选择哪一种方法都不会去影响性能。 Listener Objects 在任何一个可以使用set* 调用的listener(并不是add *调用的)的view中,你都可以绑定一个listener到它的属性上。如下: <View

  • Domon
    Domon
4 min read
IT

网站全面升级HTTPS协议

3月22日更新 谷歌爸爸升级Chrome后,证书StartCom被拉黑了,无法访问。 12月7日更新 果然StartCom基本算不行了,每一家都不认可。今天刚好给公司的服务器配置SSL的时候,发现有一家厂子的SSL挺便宜的,4刀一年,遂入手三年。+-+; 基本配置和下面一样,这一家买的时候,你的Private Key是直接发送到邮箱的,所以需要用scp命令自己传送到服务器去。 配置成功的话可以通过下面命令测试下有效性: nginx -t -c /your nginx config.conf 若测试通过的话,重启一下Nginx,就基本完成了。 可以把之前的Http的80端口监听做一下处理。 server { listen 80; server\

  • Domon
    Domon
3 min read