0%

2014 入手的第一个域名,第一个基于 Wordpress 的个人 Blog 。只有三年时间,不算长,虽然写的是「 从Farbox到Bitcron 」,但更多的是折腾历史。

折腾

第一次用 Wordpress,没有服务器性能概念,也不 Care 访问速度,更不知道 HTTPS 等优化知识,只知道安装配置简单,主题华丽,于是买的廉价 PHP 服务器搭建一个 Wordpress,就这么折腾了一段时间……

阅读全文 »

逛了一圈发现所有的远程锁定 App 都是基于蓝牙的,因此会有距离的问题=。=,并且蓝牙需要进行配对操作……于是自己写了个基于局域网 Socket 的远程锁定 LockMyMac ,再也不用担心想起忘记锁电脑却已走太远的情况了。

CGSession

大部分应用采用的方式,锁定时会有一个 3D 翻转的效果。

缺点:解锁只能使用密码登录,无法通过 Apple watch 自动登录

1
2
3
4
5
6
- (void)lockScreen {
NSTask *task = [[NSTask alloc] init];
[task setLaunchPath:@"/System/Library/CoreServices/Menu Extras/User.menu/Contents/Resources/CGSession"];
[task setArguments:@[@"-suspend"]];
[task launch];
}
阅读全文 »

微信的小贱人特多,尤其是群里的,老喜欢撤回,还有一大堆的跟风党起哄党…当然少不了一些手抖发错的,嘿嘿嘿。好奇心如此强的我怎能错过这些消息!

一、原理

要拦截撤回的消息,首先就要知道当客户端接收到撤回消息的通知时候,执行一个方法来撤回消息:

服务端 ---发送撤回通知---> 客户端接收 ---> 执行撤回消息的方法(删除本地消息,刷新UI,提示消息被撤回)

所以我们需要做修改的这个入口就是执行撤回消息的这个方法,让其不删除本地的消息就可以了。

阅读全文 »

此无人访问的Blog不知不觉已经两年了,期间折腾过不少,到最后发现Blog还是简单省心才是最好的,毕竟没人看。

关于NexT

NexT,一个Hexo的漂亮并且简洁的主题。但是Hexo的操作太繁琐了,懒癌晚期的我连打字都懒,更别说Hexo中的各种操作命令。于是Farbox是我的最佳选择,但是太小众,主题模板除了官方提供的几个,第三方的屈指可数。

关于移植

关于移植,其实从很早很早以前就有这个打算了,每当我雄心勃勃地把NexT的源码Clone下来打开以后,表情大概如下图…

阅读全文 »

据说这游戏挺火的,但中国锁区,于是自己动手,但也踩了一些坑

准备

  1. Clone项目:PokemonHook
    解压PokemonHook的项目中的pokemon_unsigned.zip文件,获得Payload文件夹一个
  2. Clone项目:iResign
    直接获得iResignApp一个
  3. 登录Apple Developer Center下载XC Ad HocProvision Profile,用WildCard的就可以了
    PS:如果用指定App ID的Profile,重签名步骤需要修改Info.plist文件
阅读全文 »

安装

通过brew安装tesseract

brew install tesseract

通过pip安装以下的依赖

  • requests
  • pytesseract
  • pillow

pip install requests pytesseract pillow

当然,通过virtualenv创建隔离环境更好啦~

使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# -*- coding: utf-8 -*-
import sys
import io
import requests
import pytesseract
from PIL import Image


url = '此处为验证码链接'

captcha_data = requests.session().get(url, stream=True)
captcha_image = Image.open(io.BytesIO(captcha_data.content))
captcha_image.save('Captcha.png','PNG')
captcha = pytesseract.image_to_string(captcha_image)
print('Captcha:', captcha)

如果项目中没有使用到国际化方案来处理一些文案字符串,而是直接 HardCode 到项目中的话(这是一个不好的习惯),到时候文案修改或者文案复用就会比较蛋疼,尤其是项目逐渐变大,很容易出现疏漏,因此为了避免各种文案字符串散落到项目各个地方,趁早改用国际化方案来处理。

例如

1
2
self.title = @"消息";
self.name = @"客服";

查找项目中所有的中文字符串

  1. 打开Find Navigator
  2. 切换搜索模式至Regular Expression
  3. 输入@"[^"]*[\u4E00-\u9FA5]+[^"\n]*?"
  4. 搜索
阅读全文 »

安装HomeBrew

安装Aria2的方法有几种,推荐使用HomeBrew来安装,绿色无毒干净清爽。

  1. 打开终端运行命令:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  2. 该输入密码的输入密码,回车的回车
  3. 安装完毕

安装Aria2

  1. 打开终端运行命令:brew install aria2c
  2. 安装完毕
阅读全文 »

记录在项目中遇到的一个坑,在IM聊天的页面中需要一个下拉加载历史聊天记录的控件。

传统下拉刷新控件

本以为用MJRefresh就好了,但是却有以下一个致命的问题:下拉加载更多内容会强制跳动到TableView的顶部。然而网上找到的只是比较应付式的解决办法,效果并不好。


平滑下拉加载刷新控件

解决思路

解决办法其实也不复杂,清楚TableView加载前后的流程就可以了,当数据增多后执行[UITableView reloadData]方法后TableView改变的有:

阅读全文 »

人人都说Realm好,逼格又够高,于是我也试试水,后来发现……线程是个坑,一不小心就进去了。

线程

  1. 每个程序都会至少有一个线程,如果只有一个线程,那么这个线程就是程序自己本身。
  2. 线程有三种状态分别是:就绪阻塞运行
  3. 在一个进程包括多个线程

Realm中的线程问题

单线程

在单线程中,随便怎么玩都可以,只要注意把修改操作写到事务中。

多线程

对于还没有保存到数据库的RLMObject,其表现是和普通的NSObject没什么卵区别的,都是不用注意任何线程相关的问题。

阅读全文 »