玩游戏

经常有人玩着英雄联盟、王者荣耀问我平时玩不玩游戏,我说不玩。

仔细想想,其实也不是完全不玩,只是很少玩,而且玩的都是些小游戏,毕业之后玩得最多的应该是电商活动小游戏,比如淘宝、京东、支付宝APP里的小游戏。

当然偶尔也会玩一下其他的游戏。比如前年,我偶然在一个网站上看到一个游戏介绍(链接)。跟其他游戏相比,这界面——神秘无比,啥都没有~,你甚至会怀疑这到底是不是游戏。我试着玩了一下,发现还挺有意思~~,接下来花了一个星期,每天玩一会儿,把游戏通关了。

继续阅读“玩游戏”

突破技术封锁发布二维码的方法

现在有些网站出于安全或者利益考虑,已经不允许用户直接发布二维码图片了,比如淘宝、知乎等等,上传的二维码图片会被自动屏蔽或者替换为文本信息。

当然,非要发布还是有办法的。

首先我们要知道网站屏蔽二维码的技术原理,以及你的目标用户对二维码的使用方式(长按识别/摄像头扫描)。

屏蔽二维码的原理:

一般原理应该是,用户上传图片后,服务器上的二维码识别程序会对图片进行扫描,如果发现二维码就进行对应的操作。

应对方法:

应对的核心思想就是对二维码动手脚,让服务器上的程序检测不到二维码,但是又要能让摄像头扫描或者微信识别。

应对方法有多种,适用于不同的场景。

继续阅读“突破技术封锁发布二维码的方法”

Debian 8 GRUB2 自定义默认启动内核

参考链接:http://www.linuxquestions.org/questions/slackware-14/grub2-change-default-to-custom-kernel-4175547962/#post5391277

总结:

1、编辑 /etc/default/grub

GRUB_DEFAULT=saved

2、查看所有启动菜单入口

grep "submenu\|^\smenuentry" /boot/grub/grub.cfg | cut -d "'" -f2,4

输出格式为:标题’ID (中间以 ‘ 号间隔)

结果中含“Advanced options”的一行是 submenu ,底下紧跟的行是 menuentry。

3、设置默认启动菜单(内核),使用步骤2中的 ID 而非标题

#grub-set-default  "(submenu ID)>(menuentry ID)"

4、重新生成 /boot/grub/grub.cfg

#grub-mkconfig -o /boot/grub/grub.cfg

继续阅读“Debian 8 GRUB2 自定义默认启动内核”

更改 git 提交记录里的名字和邮箱

更改名字和邮箱(作者和提交者):

git filter-branch -f --commit-filter 'if [ "$GIT_AUTHOR_NAME" = "xxxxxxxx" ];then GIT_AUTHOR_NAME="yyyyyy";GIT_AUTHOR_EMAIL="[email protected]";GIT_COMMITTER_NAME="yyyyyy";GIT_COMMITTER_EMAIL="[email protected]";git commit-tree "$@";else git commit-tree "$@";fi' HEAD

git filter-branch 会生成备份,可以删除:
删除某个分支备份:

git update-ref -d refs/original/refs/heads/分支

或者(删除所有备份):

git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d

 

纯CSS让视频始终居中的四种简单方法

前段时间看到一个有意思的视频展示效果,简而言之就是左右两个视频总是显示各自中间的部分。文章作者通过 JS 同时改变每个视频的视窗宽度和视频的位置来实现,属于底层操作,我觉得应该可以更简单一些,只要让视频始终处于容器中间就不用对视频进行位移了。本来想看看文章中提到的 beoplay 页面里是如何做的,结果已经打不开了。。没关系,反正我也做出来了,而且找到了4种方法,CSS 和 JS 均只控制 width,居中则由浏览器自动完成,请看效果

当时看到这个效果的时候,首先就想到了 flex 布局,因为常规布局下当图片以及视频内容宽度超过容器宽度时,常用的 text-aglin:center 和 margin:0 auto 已经无法让内容处于容器的中间,不行不行,给容器加上 overflow:hidden 也不行,但 flex 布局的居中却可以轻松实现此需求。

然后又在学习过程中,想到了另外3种办法:

继续阅读“纯CSS让视频始终居中的四种简单方法”

Debian中安装、更新Dropbox

在Debian中可以通过

#aptitude install nautilus-dropbox

来安装Dropbox,而且在朝内需要先翻Q才行:

#export http_proxy=http://xxx.x.x.x:xxx

或者使用VPN等手段……

 

Dropbox需要手动更新版本,同样需要先翻Q,然后:

#dropbox update

我的Linux之路

看到别人写的Linux学习之路,感触颇多,心里也有点痒,想记录一下自己的。

从上高中开始,我才算正式接触电脑(虽然很小的时候在别人家也玩过电脑游戏,但也就个把小时而已,没什么更多了解),由于高中自由支配时间比较多(相对而言),加上我的不自觉,所以花了不少时间在玩电脑上,不过我也不是纯粹的玩,我比较喜欢去了解事物的原理,所以在高中期间我还是学了不少电脑知识,不过记忆中好像整个高中我都还没有听说Linux这个词。

直到上大学后,才听说了Linux这个东西,觉得很神奇,就像发现了新大陆,买电脑后不久就开始折腾Linux系统了。 也不记得最开始看的是什么资料了,安装的第一个系统是Red Hat 9(旧资料坑爹呀,那时好像Fedora Core 5都出了,而我完全不知道),下载3CD安装镜像,花了不少流量,而那时学校上网还没有包月,心疼……安装采用的是VMware虚拟机方式,安装过程很顺利,但后来在vm-tools上面折腾得够呛。

由于看的资料不系统,又是初次接触Linux,很多地方都不懂,还好我知道搜索,不过不同教程里的命令都不太一样啊,只有按部就班的输入教程里的命令,一个一个试,最可悲的是我那时不知道bash有tab自动补全啊,只能SB般地完整输入那些又长又不知道意思的命令……不记得花了多少时间,终于安装好了该死的vm-tools,也许就是这个事情,让我以后对VMware一直没什么好印象。

我意识到我需要更系统的学习资料,于是就去图书馆借了《鸟哥的Linux私房菜》等书来看,慢慢的,我发现我以前所做的事情是多么SB。之后很长一段时间我都是看资料,我觉得我需要更多理论知识的支持。

后来出于对无线网络(Wi-Fi)的兴趣,我经常在某无线论坛潜水,接触到BackTrack这个Linux系统,当时还是BackTrack 2,我还专门去买了一个U盘,将它安装到了U盘里,后来又升级到了BackTrack 3。

08年4月,Ubuntu 8.04发布,我果断下载来安装,而且这次是直接安装到硬盘分区,和已有的XP组成双系统,随后开始了各种折腾……

看到我当时有多蛋疼了吧……

不过Ubuntu虽然有很多优秀的地方,但用一段时间后,我还是被其不时弹出的错误窗口整烦了,于是格式化掉,安装上了BackTrack3,同时也明白了原来系统安装就是复制文件加设置这么回事儿。

由于BackTrack4以前都是基于Slax(Slackware)的,我不是很喜欢其软件包管理系统,同时发现Debian的很多优点:系统超级稳定,apt包管理系统先进又好用……于是,我又将系统换成了Debian,它也是到目前我一直使用的系统。

我的开机画面(那时昵称还叫 小新),够自恋吧……背景图片来自腾讯TM网页。

 

感谢Linux,让我知道了Windows之外的美好世界!开源、自由、分享,这就是我所喜爱的。

自定义U盘/移动硬盘图标

说到U盘,我就想起了我以前那个制作好的Win7安装U盘,被人借走后就再也没有回来了……

好了,题外话啰嗦完了,下面进入正题。给U盘设置一个个性图标,在Windows中,一打开“我的电脑”或者“计算机”就可以看到,多酷!

效果图:

设置方法:

第一步:准备一个图标

这个图标可以是ICO格式,也可以是带有图标的EXE文件,也可以是打包为DLL格式的图标集。

这里有一些在线制作、转换ICO格式图标的网站:

http://www.damotou.com/http://www.ico.la/ 

http://converticon.com/http://tools.dynamicdrive.com/favicon/(这两个网站为英文界面,但支持一个图标包含多种分辨率)

 

也可以用本地软件制作、提取:AveIconifier2Axialis IconWorkshop图标终结者3

 

第二步:制作autorun.inf文件

这个文件是不是很眼熟?没错,它就是被U盘病毒弄出名的,但今天的工作跟病毒无关。

假设上一步准备的图标文件名为 upan.ico /tubiao.exe/tubiao.dll。在U盘根目录新建一个文本文件,用记事本打开,写入内容:

[Autorun]
icon=upan.ico

—————–到此为止,这是分割线—————

注:对于exe和dll文件

icon=tubiao.exe,0          (0表示第一个图标,依次类推)

icon=tubiao.dll,0           (同上)

然后将文本文件改名为“autorun.inf”(如果系统未显示文件名后缀,则写入内容后,选择另存为,文件名和前文一样,文件类型选“所有文件”)。

第三步:重新插一次U盘。

 

 

更多折腾:

1.在autorun.inf里写上

label=自定义U盘名字

名字可以写很长哦……,而且即使修改了卷标仍然显示这个名字

2.隐藏这两个文件

在CMD中,分别运行(X改为U盘盘符)

attrib +h +r +s X:\autorun.inf

attrib +h +r +s X:\upan.ico

用Python干掉星空极速

一说到星空极速,就跟说到x虎360一样让我不爽。以前在学校的时候就想方设法把它干掉,当然,在众人的帮助下也确实干掉了。当时为了使用方便,自己用C语言实现了一个破解程序,虽然不完美,但也基本够用。

前不久在别人电脑上又看到了星空极速这个垃圾软件……

现在刚好自己又在学习Python,于是我想到了用Python来重写一遍,想了一下,应该比用C实现起来更顺畅些。

纯属练习,fuckxkjs32-gbk.py   代码如下:

#!/usr/bin/env python

# -*- coding:gbk -*-
”’ 找回星空极速3.2真实拨号密码
    用法:
    1-直接运行,然后按提示输入密码
    2-加参数运行,参数为密码,多个密码用空格隔开
        比如:fuckxkjs32.py woshimima1 woshimima2
    感谢:http://blog.sina.com.cn/s/blog_48a42d5b0100cet2.html

    注:本程序只使用了部分字符加密表
”’

import sys

encryptdict = { “ch_0” : [ “E2”,“96”,“D0”,“AC”,“9D”,“A3”,“B6”,“8F” ],
“ch_1” : [ “E3”,“97”,“D1”,“AD”,“9C”,“A2”,“B7”,“8E” ],
“ch_2” : [ “E0”,“94”,“D2”,“AE”,“9F”,“A1”,“B4”,“8D” ],
“ch_3” : [ “E1”,“95”,“D3”,“AF”,“9E”,“A0”,“B5”,“8C” ],
“ch_4” : [ “E6”,“92”,“D4”,“A8”,“99”,“A7”,“B2”,“8B” ],
“ch_5” : [ “E7”,“93”,“D5”,“A9”,“98”,“A6”,“B3”,“8A” ],
“ch_6” : [ “E4”,“90”,“D6”,“AA”,“9B”,“A5”,“B0”,“89” ],
“ch_7” : [ “E5”,“91”,“D7”,“AB”,“9A”,“A4”,“B1”,“88” ],
                “ch_8” : [ “EA”,“9E”,“D8”,“A4”,“95”,“AB”,“BE”,“87” ],
“ch_9” : [ “EB”,“9F”,“D9”,“A5”,“94”,“AA”,“BF”,“86” ],
“ch_q” : [ “A3”,“D7”,“91”,“ED”,“DC”,“E2”,“F7”,“CE” ],
“ch_w” : [ “A5”,“D1”,“97”,“EB”,“DA”,“E4”,“F1”,“C8” ],
“ch_e” : [ “B7”,“C3”,“85”,“F9”,“C8”,“F6”,“E3”,“DA” ],
“ch_r” : [ “A0”,“D4”,“92”,“EE”,“DF”,“E1”,“F4”,“CD” ],
“ch_t” : [ “A6”,“D2”,“94”,“E8”,“D9”,“E7”,“F2”,“CB” ],
“ch_y” : [ “AB”,“DF”,“99”,“E5”,“D4”,“EA”,“FF”,“C6” ],
“ch_u” : [ “A7”,“D3”,“95”,“E9”,“D8”,“E6”,“F3”,“CA” ],
“ch_i” : [ “BB”,“CF”,“89”,“F5”,“C4”,“FA”,“EF”,“D6” ],
“ch_o” : [ “BD”,“C9”,“8F”,“F3”,“C2”,“FC”,“E9”,“D0” ],
“ch_p” : [ “A2”,“D6”,“90”,“EC”,“DD”,“E3”,“F6”,“CF” ],
“ch_a” : [ “B3”,“C7”,“81”,“FD”,“CC”,“F2”,“E7”,“DE” ],
“ch_s” : [ “A1”,“D5”,“93”,“EF”,“DE”,“E0”,“F5”,“CC” ],
“ch_d” : [ “B6”,“C2”,“84”,“F8”,“C9”,“F7”,“E2”,“DB” ],
“ch_f” : [ “B4”,“C0”,“86”,“FA”,“CB”,“F5”,“E0”,“D9” ],
“ch_g” : [ “B5”,“C1”,“87”,“FB”,“CA”,“F4”,“E1”,“D8” ],
“ch_h” : [ “BA”,“CE”,“88”,“F4”,“C5”,“FB”,“EE”,“D7” ],
“ch_j” : [ “B8”,“CC”,“8A”,“F6”,“C7”,“F9”,“EC”,“D5” ],
“ch_k” : [ “B9”,“CD”,“8B”,“F7”,“C6”,“F8”,“ED”,“D4” ],
“ch_l” : [ “BE”,“CA”,“8C”,“F0”,“C1”,“FF”,“EA”,“D3” ],
“ch_z” : [ “A8”,“DC”,“9A”,“E6”,“D7”,“E9”,“FC”,“C5” ],
“ch_x” : [ “AA”,“DE”,“98”,“E4”,“D5”,“EB”,“FE”,“C7” ],
“ch_c” : [ “B1”,“C5”,“83”,“FF”,“CE”,“F0”,“E5”,“DC” ],
“ch_v” : [ “A4”,“D0”,“96”,“EA”,“DB”,“E5”,“F0”,“C9” ],
“ch_b” : [ “B0”,“C4”,“82”,“FE”,“CF”,“F1”,“E4”,“DD” ],
“ch_n” : [ “BC”,“C8”,“8E”,“F2”,“C3”,“FD”,“E8”,“D1” ],
“ch_m” : [ “BF”,“CB”,“8D”,“F1”,“C0”,“FE”,“EB”,“D2” ],
}

def main():
password = “”
# charset = “0123456789abcdefghijklmnopqrstuvwxyz”
if len(sys
.argv) == 1:
while password == “”:
password = raw_input(“请输入待破解密码:”)
print “真实密码:%s % encrypt(password)
else:
args = sys.argv
print “原始密码:真实密码”
for p in args[1:]:
print %s%s % (p,encrypt(p))

def encrypt(password):
truepass = “”
for i in range(len(password)):
truepass += encryptdict[(“ch_” + password[i])][i % 8]
return truepass

if __name__ == “__main__”:
main()

 

 

————————————————————–

不完善的地方(TODO):

  • 直接运行程序输入不能包含空格
  • 对字符集以外字符的处理
  • 将结果写入文件