centos 安装mysqlclient,mysql session错误的问题

折腾了我一个周五下午加一个周末的问题。 写的代码上线两个周了,之前只测试了同步跟列表的功能,展示没问题,上周测试了一下更新问题,开始删除没刷新,我还以为是前端老版本的编译有问题,发现接口确实调用了就没管了。 直到测试一个更新功能,发现接口调用成功了,但是数据没更新。还返回了http 200。我就看了一下代码,返回200不可能没执行到更新保存的代码。 发现只有在提交commit之前有查询操作,就会导致表更新失败。所以应该是个session问题。 试了我本机环境没问题,然后我就想到装的python包的版本问题,踩什么bug了吧。然后我对比了一下版本,我管理都是只写主要包的版本,依赖包的版本没有写,所以依赖包有的版本会高一点。 我选了几个可能的包,更换版本,发现不是这个原因。周末想想,如果是这个包的问题,应该早就发现了,会打补丁。 然后我就想到数据库的问题,我用的mariadb,测试系统是centos,然后我看了一下有新版本的mariadb,更新了一下,这里现在想想数据库的问题的概率也十分小了,而且是这么明显的bug。 mariadb的源巨慢无比,我又在尝试更新mysqlclient包,因为我记得安装的时候mariadb-devel不能用,网上说的用mysql-devel。我又从新试了一次,各种方法,发现不成功。 到下午快下班,安装完mariadb,又试了一遍mariadb-devel也不行。觉得还是用mysql,又安装称mysql。 但是发现数据库数据文件不兼容,升级的命令好像也不太行,我备份的导出数据库数据,导入又有外键关联的限制,懒得搞数据了。下班了。 周末有时间的时候就想了想,我之前虽然抓包测试环境mysql,发现没问题,但是没对比本机的。如果周一mysql不行,试试本机环境连线上数据库,排除一下是包的问题还是数据库问题。感觉周五的时候应该先排除问题再更新数据库才对。 周一来,同步了一下数据,更新了一下发现mysql还是不行。然后重新编译mysqlclient,测试发现通过了。 最后还是mysqlclient编译依赖有问题,使用mysql-devel编译,连接mariadb有问题。好像还不是所有的版本有这个问题。
Read more...

tampermonkey 豆瓣豆油提醒脚本

网页豆瓣豆油提醒本来就慢,然后干别的时候还不知道来豆油了。写个油猴子脚本搞定了。 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...

Previous Page 1 2 3 4 5 6 7 8 9 10 Next Page 最后一页