网页豆瓣豆油提醒本来就慢,然后干别的时候还不知道来豆油了。写个油猴子脚本搞定了。
tampermonkey脚本还比较好些,查了一下提醒功能,需要chrome用户进行授权。
本来想写个短时间没处理的话,延长检查时间,后来想想本来时间就不短,没必要加了。
// ==UserScript==
// @name 豆瓣豆油提醒脚本
// @namespace http://0x55aa.com/
// @version 0.1
// @description 豆瓣豆油提醒脚本,来豆油后进行弹窗提醒!
// @author 0x55aa
// @match https://*.douban.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
// 检查间隔
var interval_ = 30000;
var interval = 30000;
var notify_time = 0;
// 提醒
if (Notification && Notification.permission !== "granted") {
Notification.requestPermission(function (status) {
if (Notification.permission !== status) {
Notification.permission = status;
}
});
}
function notify() {
notify_time = new Date().getTime();
var titleText = "豆油来啦";
var options = {
dir: "ltr",
lang: "utf-8",
icon: "https://img3.doubanio.com/favicon.ico",
body: "请赶快处理!!!!!"
};
if (Notification && Notification.permission === "granted") {
var n = new Notification(titleText, options);
}
}
function check() {
// console.log(notify_time);
// console.log(interval);
console.log($('#top-nav-doumail-link').children().text());
if ($('#top-nav-doumail-link').children().text()){
notify();
}
}
var timer = setInterval(check, interval);
})();
Read more...
cocos2d-python在Mac上设置label居中不生效的问题
在Mac上写cocos2d游戏代码的时候,写了个label,调了几次没居中,突然想到是不是mac屏幕的原因。然后鼠标滑了一下看了一下还正好差一倍居中。
然后网上搜了一下,在github上找到了解决方案。
HiDPI屏幕都会有这种问题,有两种patch,一个改pyglet的,一个改cocos2d的,然后我手动改了一下cocos2d的代码解决了。
话说cocos2d不更新了,维护也不知道会不会改。突然感觉选择cocos2d有点虚了。
issues:https://github.com/los-cocos/cocos/issues/303
Read more...
kubernetes scheduler源码阅读-- scheduler.New()的参数
scheduler.New() 定义在kubernetes/pkg/scheduler/scheduler.go
返回一个Scheduler
type Scheduler struct {
config *factory.Config
}
首先先用New传过来的参数替换schedulerOptions默认配置
type schedulerOptions struct {
// 调度器的名字,pod创建的时候可以根据这个名字选择使用哪个调度器,默认值"default-scheduler"
schedulerName string
//
hardPodAffinitySymmetricWeight int32
disablePreemption bool
percentageOfNodesToScore int32
bindTimeoutSeconds int64
}
然后调用factory.NewConfigFactory创建一个factory.Configurator,需要传入一个factory.ConfigFactoryArgs
还有个configFactory,这几个差不都都是参数传进来的几个值,具体还不知道干什么的。先看几个参数吧。
cc.InformerFactory.Core().V1().Nodes() 对应类型 nodeInformer coreinformers.NodeInformer
其中cc.InformerFactory在kubernetes/cmd/kube-scheduler/app/options/options.go中初始化:
c.InformerFactory = informers.NewSharedInformerFactory(client, 0), 创建一个新的factory, 结构体主要为cc.client和informers map[reflect.Type]cache.SharedIndexInformer.
Core()是New了一个新的group, 感觉还是啥没有,还是factory那几个值。
V1()是New了一个v1,返回一个version,还是哪几个值.
Nodes() 传的还是那几个值,返回一个nodeInformer. 最重要的就是保留了factory,然后能够调用nodeInformer接口下的几个方法。后边用的吧。
nodeLister: args.NodeInformer.Lister(),
在NewConfigFactory()里创建configFactory的时候,调用了.Lister()方法。
func (f *nodeInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer {
return NewFilteredNodeInformer(client, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, f.tweakListOptions)
}
func (f *nodeInformer) Informer() cache.SharedIndexInformer {
return f.factory.InformerFor(&corev1.Node{}, f.defaultInformer)
}
func (f *nodeInformer) Lister() v1.NodeLister {
return v1.NewNodeLister(f.Informer().GetIndexer())
}
调用太多,看代码最烦的就是调来调去,然后还有各种新数据定义,翻来翻去然后回不来了。。。
corev1.Node 这个里边应该都是返回的数据格式类型定义, 没细看。
看InformerFor里边defaultInformer是个真正调用的函数, InformerFor就是用来包装了一下
v1.NewNodeLister 看起来就是定义的restful api的请求。
看的有点细,其实这部分都是client-go里的,是封装的api请求,应该是分不同资源请求不同的interface
cc.PodInformer 看这个应该比较重要
c.PodInformer = factory.NewPodInformer(client, 0) 用来返回non-terminal状态的pod
configFactory其他初始化参数不看了,后边用到再看。
Read more...
kubernetes scheduler源码阅读-- kube-scheduler整个流程
代码读的master上最新的 1641ff411.
命令入口文件在kubernetes/cmd/kube-scheduler/scheduler.go
主要就两句,设置启动参数。其他的设置命令行参数和日志打印。具体不看了
command := app.NewSchedulerCommand()
command.Execute();
NewSchedulerCommand 在文件kubernetes/cmd/kube-scheduler/app/server.go
很多代码都是设置scheduler命令参数的,也是用的cobra这个库,跟docker是一样的。
opts, err := options.NewOptions() 读取默认配置
runCommand()执行命令
runCommand 比较有用的几行:
c, err := opts.Config()
这里边东西比较多,比如初始化kube-client与api交互,eventclient,选举相关的配置。没仔细看,代码在kubernetes/cmd/kube-scheduler/app/options/options.go
cc := c.Complete()
stopCh := make(chan struct{}) 这个channel传入了Run函数,Run只会在报异常或者这个channel关闭的时候返回
是用来配合context提示go协程退出的
函数最后调用return Run(cc, stopCh)
Run()
生成一个新的scheduler, sched, err := scheduler.New()
后边启动了事件传输,监控选举的,还有监控和指标收集的,这个先不看了。
再后边就是stopChannel配合context管理协程,还有一个leader选举的功能,是通过cc.LeaderElection参数来控制的.
leader选举功能开启是为了高可用的时候使用
无论是否leader选举,最后都进入sched.Run()
Read more...
ubuntu 16.04下安装微信开发者工具不能编译的问题
这个问题官方github上有说,学了新知识,记一下。
wine-binfmt这个包没找到,然后我就继续安装,软件启动了但是没办法编译代码。issue上有排错,确实是wine安装问题。我在issue里边找到了解决办法。
手动添加一个解析 Windows 的 exe 的 binfmt 配置
vim /usr/share/binfmts/wine
内容填入
package wine
interpreter /usr/bin/wine
magic MZ
保存退出,更新一下配置就好了
sudo update-binfmts --import wine
Read more...
办公电脑ssh内网穿透方法
办公电脑代码比较多,不方便网上共享,然后跟自己用的电脑同步一些东西比较麻烦。想着直接把办公电脑ssh内网穿透,这样回去看一下办公电脑上的文件就方便多了。
办公电脑基本不关机的。然后出口端口映射这些方法就不用想了,我正好有一台阿里云主机,网上找了一个反向隧道的方法。
在阿里云机器上.ssh/authorized_keys添加办公电脑的ssh公钥,准备两个空闲端口5678和54345端口。
办公电脑上安装autossh。
sudo apt install autossh
办公电脑上执行
autossh -M 5678 -fN -o "PubkeyAuthentication=yes" -o "StrictHostKeyChecking=false" -o "PasswordAuthentication=no" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 123.56.21.222:54345:localhost:22 userN@123.56.21.222 -p61397
# “-M 5678” 选项指定中继服务器上的监视端口,用于交换监视 SSH 会话的测试数据。中继服务器上的其它程序不能使用这个端口。
# “-fN” 选项传递给 ssh 命令,让 SSH 隧道在后台运行。
# “-o XXXX” 选项让 ssh:
# * 使用密钥验证,而不是密码验证。
# * 自动接受(未知)SSH 主机密钥。
# * 每 60 秒交换 keep-alive 消息。
# * 没有收到任何响应时最多发送 3 条 keep-alive 消息。
# 如果你想系统启动时自动运行 SSH 隧道,你可以将上面的 autossh 命令添加到 /etc/rc.local。
ssh userN@123.56.21.222 -p 54345 #登录办公电脑
Read more...
安卓apk破解,安卓游戏资源提取
之前搞过一轮,又搞了一次。把试过的几种方法总结一下。
一种适合基本普通的安卓apk包,基本流程就是
1 右击apk包,使用mac解包工具解压,
2 把classes.dex转成jar包,cd ~/Downloads/dex2jar-2.0/
./d2j-dex2jar.sh -f ~/Downloads/game.v316602/classes.dex
3 使用工具查看jar包源码,反编译java代码。
cd ~/tmp/jadx/build/jadx/bin
-:> ./jadx-gui
然后想提取游戏资源,有的素材没加密可以直接从解压包里找到。其他针对不同情况从网上找了几种工具。
一种万能的工具:
一种英伟达的:
下载地址在这里 https://developer.nvidia.com/gameworksdownload
下载Tegra Graphics Debugger 支持Mac Linux Windows
Tegra 机型查询 http://www.nvidia.cn/object/tegra-phones-cn.html
一种高通的:
下载地址: https://developer.qualcomm.com/software/adreno-gpu-sdk/tools
其他根据用的游戏框架不同,比如unity的框架,有专用的工具破解游戏资源。
Read more...
mysql数据库client连接配置
又换ubuntu环境开发了,没找到好用的mysql客户端。用了几天mysql workbench,发现用不了,太难用了。准备还是用命令行来解决。
新建-:> vim ~/.my.cnf
-:> cat ~/.my.cnf
[clienttest_icloud]
host=10.144.12.36
port=3306
user=icloud
password=_icloud
database=icloud
.bashrc里边配置:
alias db_test_icloud="mysql --defaults-group-suffix=test_icloud"
然后就可以直接执行db_test_icloud 来链接数据库了。
Read more...
配置ubuntu字体,终端快捷键更改
粗略的找了一个字体,要求不高,看着还行,然后小写l的样子有强迫症。最后选了一个monospace,总共看了没几个字体,这个就是下划线难看。以后再说
用打thinkpad,触摸板三指手势没搞定,网上的方法不好用,等后边再看看。
快捷键,准备把alt和ctrl调换一下,然后改一下终端tty的ctrl c中断。从网上搜了一下方法。
lsusb来确定外接键盘的vendorID和productID: dmesg
按键ID用的我之前文章里写的键盘记录工具。
/etc/udev/hwdb.d/
-:> cat external_keyboard.hwdb
evdev:input:b*v0510p0032*
KEYBOARD_KEY_0x700e2=leftctrl
KEYBOARD_KEY_0x700e0=leftalt
执行更新操作
sudo udevadm hwdb --update
sudo udevadm trigger --sysname-match="event*"
发现更改了也不好用,怎么都不能跟mac那样,还得改回去,看来只能慢慢适应了。
Read more...
mac安装docker
有测试机可以使用,但是想了想还是在自己电脑上装一份,就是低配mac硬盘不够用啊。
稳定版下载地址:
https://download.docker.com/mac/stable/Docker.dmg
找了一圈好像稳定版都是这个地址。
还在下载,说说问啥要自己电脑上搞一份,准备把之前写的mysql查询平台放到github上,之前同事有要。想了想虽然没啥技术含量,放到github上搞个镜像,写个脚本,一键启动。这样方便安装,虽然项目我基本都写安装文档,但是还是一键启动的爽。初步想法是写个Dockerfile,执行安装脚本build。这样更新的话还是需要重新build。先这么搞搞看看。
动动鼠标,然后就安装成功了?
-:> docker version
Client:
Version: 17.09.1-ce
API version: 1.32
Go version: go1.8.3
Git commit: 19e2cf6
Built: Thu Dec 7 22:22:25 2017
OS/Arch: darwin/amd64
Server:
Version: 17.09.1-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: 19e2cf6
Built: Thu Dec 7 22:28:28 2017
OS/Arch: linux/amd64
Experimental: true
Read more...