解决腾讯云的yum源头无用问题

腾讯云提供的那个镜像三天两头出问题,动不动报错

 

http://mirrors.tencentyun.com/centos1/7/updates/x86_64/repodata/repomd.xml: [Err no 14] curl#6 – “Could not resolve host: mirrors.tencentyun.com; No address asso ciated with hostname”

这个似乎是要修改dns解析地址,有人说加什么8.8.8.8就好了

其实没什么用,腾讯云的镜相完全是垃圾。

直接访问不了。

所以我觉得还是一劳永逸比较好,直接换网易的吧。

如果忘了系统是什么,先查清楚自己是什么系统,我用命令查的并没有什么卵用,得直接上云管理平台上去看,咱是centos7.2,差点还以为用的是6呢。

首先备份一下:

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

然后下载并且覆盖掉原来的文件

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo

然后再生成缓存,顺带清一下垃圾

yum makecache && yum clean all

最后一步很重要,修改一个文件。

cd /etc/yum.repos.d/

看到三个文件repo,一个是刚才备份的,一个是刚才覆盖进去的。

那就编辑剩下那个吧

vim CentOS-Epel.repo

里面有个baseurl,原来带着$search和另外几个变量呢,说明这是腾讯云提供你可修改的查询链接。

直接改成baseurl=http://mirrors.163.com/centos/7/os/x86_64/repodata/repomd.xml

完事了。

之前装git失败,四个包下载成功1个,现在安装git,直接一步成功。

在windows上使用vim,直接从git-bash出发

 

今天突然想到在windows下使用vim,又记得原来vim我好像已经安装过,到硬盘上一搜,结果搜到git-bash文件夹里有vim,想想这个vim应该是比较原始一点吧,就不再去找单独安装的版本了。

进入vim

随手存储一个新的文件:w something.txt

不错。

修改git-bash默认文件夹

以前装git-bash的时候,没有修改设置,导致它把乱七八糟的东西统统放到administrator下面,没法管理,所以到git-hub上面下载源码的时候一般都不用它,毕竟咱基本上只是学习,并不会fork。

结果前几天发现git-hub用git命令下载源码速度是噌噌快,于是又用起来,但是一堆不知所以的源码全放在administrator里实在是太吓人了。于是想修改默认文件夹,好在网上有人已经提供了方法。

也就是修改git-bash快捷方式的“起始位置”,结果呢?没用!

ls一看,还是原来的东西嘛。

看来还是得从git-bash自身入手,找到方法如下:

打开Git安装位置下的etc文件夹,下面有个profile文件,找到

{STRINGCACHE:MD5:3d9a0cea6f64b5d1b2d8e3e21c522a2d}

增加两行,修改后结果如下:

{STRINGCACHE:MD5:ac9ca5b0d50513c9edd064394aec55e0}

如果找不到那几行,也无所谓,直接在末尾加就好了

不过我改完一打开看 No such file or directory

吓我一跳,原来是没创建目录,先建好了再说啊。

修改快捷方式那个,完全是个屁。没用的。至于说能不能把启动命令 cd加到快捷方式里,我是不知道。

史上最无聊的最变态的一次攻坚

有一套免费且漂亮的源码。

不知道谁放网上的。

版本号还按最新版写的,但是安装完了你看不到到底是什么版的。

几天前我费了点周折把它安装上线。

然后发现其中有一部分采集功能隐约是不可用的。

真的是隐约。

感觉还有救。

不想放弃。

毕竟这个采集的可用的是某宝的API,光明正大,不至于偷偷摸摸吧?

按照该公司的说明关注了公众号,拿到了采集功能所需的KEY(不是某宝的KEY)。

OK,进到相关采集页面,默认采30页,1页、2页、3页……最后毛都没有。

好吧,没报错,没说不能采,那么应该是可以的。

过了几天,我也知道写这套源码的公司不想免费了,不维护免费版了,但是由于网上的人说新版安装完的版本号和旧版一样,所以我也心存侥幸,想看看是不是运气不错,还能用。

今天晚上就专门来修理这采集模块。

首先看到了一个奇怪的错误, Illegal mix of collations (gbk_chinese_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE)

研究了半天,无非就是编码不一至的问题。

为什么编码不一致的,因为为了避免重复入库,采集程序拿新采回来的数据去Like库里的数据,如果是一样的,就不入库了。

这个好啊,但是由于新采的数据可能是gbk的,而库里的字符是utf8的,所以就出问题了。

当然这是我的分析,实际情况复杂得多,mysql默认的collation是utf8,但有两个变量死都是latin,set几次一重启就回来了。

而这个数据库当初安装的sql脚本设置的字符默认是gbk,但是实际上因为我安装时的设置,把它弄成了utf8,具体到出错的表,它的collation又是gbk。

我一怒之下,把所有能设成gbk的都设了,但是历史数据是不能改的。

然后在mysql_query方法执行前加入了set names gbk。

结果是页面上全是乱码。

好吧,我改成set names utf8。

然后把报错的那两个字段的排序改成utf8,其他不变。

结果呢,页面显示是不出错了,但是那个mix错误还在,因为每次Like的时候还是会遇到gbk。

于是我找到like前的准备语句,用iconv方法把字符串先转成utf8再说。

结果呢,mix问题不存在了。

但又遇到了Warning: Illegal string offset问题,网上的人说是因为数组为空,好吧,我做一下检查,如果数据为空就不入库。

结果发现没用,因为入库的数组本身并不是空的,只是数组没有内容。

嗯,好坑啊。

所以我决心把整个代码都给看一下,梳理一下采集的流程,找到错误最开始的地方。

可我没有在本地安装开发环境,完全是在线上调试的。

线上嘛,你只能看到一部分的错误,有些东西你是看不到的,因为有些错误被程序给处理掉了。

最后找到采集列表的部分,把curl拿到的原始数据写到一个文本文件上(没有专门的写日志语句只好自己撸fsopen了),结果很顺利,得到了一个很短的json:

{“state”:”0″,”msg”:”\u514d\u8d39\u7248\u4f18\u60e0\u5238\u670d\u52a1\u5668\u5df2\u5173\u505c\uff01″}

然后把这玩意用js的decodeURIComponent一处理,结果如下:

{“state”:”0″,”msg”:”免费版优惠券服务器已关停!”}

真是心都凉了。

其实我一开始是把那个采集目标页访问过了的,明明可以访问,我就不明白怎么用浏览器可以,用curl就不行,难道非要我假装成浏览器才行吗?

不过代码也没仔细看完,估计并不是直接用原始URL,可能是什么API的URL吧。

算了,暂时不理会了。

这件事情最神奇的是:刚装完这套代码的时候,遇到有些页面报fatal错误,说找不到class,我一开始眼尖,发现代码里有时候大写有时候小写,大小写和文件名还不一致,比如有个Page.php文件是大写开头的, 结果代码里一会儿大写一会小写,所以我以为是大小写问题,冲这个问题想了好多办法。结果发现根本不是。

后来我下载了“另一个”版本的源码,覆盖了文件之后问题自动就好了!

其实真不是大小写问题。

因为今天又出了这个问题。

我认真搜索一下,有人说这是命名空间的问题,因为同样用这个类来实例化,有时候他们写成new etc\framework\page,有时候写成new etc\framework\page().

其实我以前没想过php还可以这么干,直接写个路径在这里new?原来这个就是命名空间的效果。

当我以为完全是命名空间的锅的时候,发现问题的触发因素了:

一搞数据库,页面就出这个问题。

特别是测试采集报错的时候,随机性地出现甲乙丙丁不同的页面报fatal错误,同一个页面,一会儿正常,一会儿说找不到。

不搞采集,直接开着phpmyadmin,也会出现这个事情,一关掉一重新登录,一切又正常了。

真的是神奇的代码。

为了这么一个不是问题的烂问题,我竟然花了一个晚上!

影影绰绰学了不少东西,实际上屁用也没有,就是增长了点知识和经验,下次遇到类似的问题,只能说可以加速破案吧。

还是本地装个开发环境来得合适,目前这样搞,简直是要死人。只差没建个“日志”表直接把数据写到数据库里去了。

哦,对了,今天还玩了一堆插件的源码,帮它们改BUG。也是醉了。

微信公众号自动回复无法生效?

自己通过接口调用自动回复功能。

一切设置都没有问题,appid和appsecret都没问题。

问题出在哪儿?

跑去把官方后台的自动回复给关掉,也没用。

后来跑到“基本配置”里一看,原来开发的配置没有启用。

当这里显示为停用的时候,才是启用状态……

我去。

没有启用怎么定自义菜单可以搞定呢?

难道自定义菜单不需要调用接口生成吗?

突然想了一下,跳转类型的自定义菜单只是向官方发送一下链接地址,在使用的时候不需要响应事件,可能因为这个,微信不需要调用响应地址,所以它允许你在url和token没有启用的情况下设置自定义菜单。

大抵如此吧。

零技术制作真实3d人物

你有没有想过给自己或者女友打造一个3D模型呢?

又或者你需要一张包含特殊人物和场景的海报,然而你不会PS,而且就算会,效果也不怎么样,毕竟光影什么的都不合适。

那些常见的3D软件又太过复杂。

网上有一款很流行的人偶制作工具,效果嘛,又太不真实了。

终于,被我从网上找到一款极度好用的免费软件,名字翻译过来,就叫造人……机器?

听起来有点污。

有意思的是,这款软件在你打开的时候,会主动提示你:这是一款造人软件,所以会有一些暴露的场面,你确定把持得住?

玩法可深可浅,你手工撸也行,到高级的时候,可以写脚本批量处理一些模型,这是开源软件,英文不烂的话,在网上可以找到相关资源哦。

Random2 2 0.png

下面来欣赏一下效果:

 

忍者

真实的lady

运动

有点污,这是要干啥?

屎了

下载链接:https://pan.baidu.com/s/1c1SmpiC

获取密码请扫码关注

突然发现用git下载githup源码比百度网盘速度还快

百度网盘只有100多K的时候,git能达到300多k。

而直接在github上用浏览器下载就慢很多了。

其实我就是要下个three.js,这个玩意我在不同的电脑上下载了N次了,但是当前这台电脑上好像真没有。带示例的150多m,不过很值。

系统无法获取到您在阿里妈妈注册时的手机号,无法申请权限!

申请淘宝客app key的时候,遇到提示“系统无法获取到您在阿里妈妈注册时的手机号,无法申请权限!”

淘宝万象给的答案是错误的,你必须从首页中进入产品,然后点淘宝联盟,然后再进入“商家后台”,再点账号。这个时候一定不要被右边的提示语给吓着了,点右边的按钮就好了。

 

害我半夜睡不着,折腾死人。

 

vim怎么批量注释

说明:
ctrl+v其实是视编辑模式,核心是要按大写I,shift+i其实就是输入大写I,只不过不会影响下次的大小写而已。

方法一

ctrl+v 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I(shift+i),再插入注释符,比如”//”,再按Esc,就会全部注释了
批量去掉注释

ctrl+v,进入列编辑模式,横向选中列的个数(如”//”注释符号,需要选中两列),然后按d, 就会删除注释符号

方法二

使用下面命令在指定的行首添加注释:
:起始行号,结束行号s/^/注释符/g
取消注释:
:起始行号,结束行号s/^注释符//g
例子:
在10 – 20行添加 // 注释
:10,50s#^#//#g
在10 – 20行删除 // 注释
:10,20s#^//##g

windows下通过dos命令行将文件由utf-8变为ansi编码

大excel文件导出的时候程序搞不定,只好用csv导出,打开csv的时候excel不能认utf8,只好导入,但导入操作繁琐。我在想,如果有命令行工具或脚本,可以把结果打包成压缩包,下载完后让用户点击可执行的命令行把csv转一下码。然后就可以直接打开了。

上网搜了半天,发现原来微软自己提供了一个脚本,其实也不过是用标准API存取文件而已。不过奇怪的是:这vbs代码报错,搞半天还没搞清楚问题在哪里。

一、Copy a Unicode File to an ANSI File

WiToAnsi.vbs文件:

复制代码代码如下:
‘ Utility to rewrite a Unicode text file as an ANSI text file
‘ For use with Windows Scripting Host, CScript.exe or WScript.exe
‘ Copyright (c) 1999, Microsoft Corporation

Option Explicit’ FileSystemObject.CreateTextFile and FileSystemObject.OpenTextFile
Const OpenAsASCII   = 0
Const OpenAsUnicode = -1

‘ FileSystemObject.CreateTextFile
Const OverwriteIfExist = -1
Const FailIfExist      = 0

‘ FileSystemObject.OpenTextFile
Const OpenAsDefault    = -2
Const CreateIfNotExist = -1
Const FailIfNotExist   = 0
Const ForReading = 1
Const ForWriting = 2
Const ForAppending = 8

Dim argCount:argCount = Wscript.Arguments.Count
If argCount > 0 Then If InStr(1, Wscript.Arguments(0), “?”, vbTextCompare) > 0 Then argCount = 0
If (argCount = 0) Then
Wscript.Echo “Utility to copy Unicode text file to an ANSI text file.” &_
vbNewLine & “The 1st argument is the Unicode text file to read” &_
vbNewLine & “The 2nd argument is the ANSI text file to write” &_
vbNewLine & “If the 2nd argument is omitted, the Unicode file will be replaced”
Wscript.Quit 1
End If

Dim inFile, outFile, inStream, outStream, inLine, FileSys, WshShell
If argCount > 1 Then
outFile = Wscript.Arguments(1)
inFile  = Wscript.Arguments(0)
Else
outFile = Wscript.Arguments(0)
inFile  = outFile & “.tmp”
Set WshShell = Wscript.CreateObject(“Wscript.Shell”)
WshShell.Run “cmd.exe /c copy ” & outFile & ” ” & inFile, 0, True
End If

Set FileSys = CreateObject(“Scripting.FileSystemObject”)
Set inStream  = FileSys.OpenTextFile(inFile, ForReading, FailIfNotExist, OpenAsDefault)
Set outStream = FileSys.CreateTextFile(outFile, OverwriteIfExist, OpenAsASCII)
Do
inLine = inStream.ReadLine
outStream.WriteLine inLine
Loop Until inStream.AtEndOfStream
inStream.Close
outStream.Close
If argCount = 1 Then WshShell.Run “cmd.exe /c del ” & inFile, 0

批处理中调用:

复制代码代码如下:
cscript WiToAnsi.vbs [path to Unicode file][path to ANSI file]

二、Copy a ANSI File to an Unicode File

只需对OpenTextFile和CreateTextFile的打开方式做调整即可。

三、参考

http://msdn.microsoft.com/en-us/library/aa368046%28VS.85%29.aspx

四、OpenTextFile和CreateTextFile的使用

CreateTextFile 方法

创建指定文件并返回 TextStream 对象,该对象可用于读或写创建的文件。

复制代码代码如下:
object.CreateTextFile(filename[, overwrite[, unicode]])

参数

object

必选项。应为 FileSystemObject 或 Folder 对象的名称。

filename

必选项。字符串表达式,指明要创建的文件。

overwrite

可选项。Boolean 值指明是否可以覆盖现有文件。如果可覆盖文件,该值为 True;如果不能覆盖文件,则该值为 False 。如果省略该值,则不能覆盖现有文件。

unicode

可选项。Boolean 值指明是否以 Unicode 或 ASCII 文件格式创建文件。如果以 Unicode 文件格式创建文件,则该值为 True;如果以 ASCII 文件格式创建文件,则该值为 False。如果省略此部分,则假定创建 ASCII 文件。

OpenTextFile 方法

打开指定的文件并返回一个 TextStream 对象,可以读取、写入此对象或将其追加到文件。

复制代码代码如下:
object.OpenTextFile(filename[, iomode[, create[, format]]])

参数

object

必选项。应为 FileSystemObject 对象的名称。

filename

必选项。字符串表达式,指明要打开的文件名称。

iomode

可选项。输入/输出模式,是下列三个常数之一:ForReading,ForWriting,或 ForAppending。

create

可选项。Boolean 值,指出当指定的 filename 不存在时是否能够创建新文件。允许创建新文件时为 True,否则为 False。默认值为 False。

format

可选项。三个 Tristate 值之一,指出以何种格式打开文件。若忽略此参数,则文件以 ASCII 格式打开。

设置

iomode 参数可为下列设置之一:

描述
ForReading 1 以只读模式打开文件。不能对此文件进行写操作。
ForWriting 2 以只写方式打开文件。不能对此文件进行读操作。
ForAppending 8 打开文件并在文件末尾进行写操作。

format 参数可为下列设置之一:

常数 描述
TristateUseDefault -2 以系统默认格式打开文件。
TristateTrue -1 以 Unicode 格式打开文件。
TristateFalse  0 以 ASCII 格式打开文件。