2020-04
7

阴魂不散的小海龟

By xrspook @ 21:56:27 归类于: 扮IT

LOGO语言小海龟,你为啥阴魂不散啊啊啊啊啊啊啊啊啊啊!!!!!对从前小学3年级的我来说是个噩梦,现在依然是个噩梦!Think Python 2的第四章正是用这个turtle讲故事,想死的心都有了。没有一定英语基础,没有足够强悍的数学基础,怎么可能玩得转小海龟,而且还要空间思维能力。小时候我对这个东西瑟瑟发抖实在太正常了…… 25年后再遇到,我继续纠结得死去活来……

第四章最后的习题1要求画一个堆栈图,不知道他们到底要画些什么,要画到什么程度,mindmanager了一个,画完以后的确对函数的嵌套有点开窍。

习题2要画3朵花,画得我死去活来…… 但总算完全不看答案能画出来,看完答案,得到那些偷偷摸摸设定的参数后能画得跟要求一模一样。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import turtle, math
def arc(t, r, angle):
    n = 20 # int(2*math.pi*r/4)+3 公式画图太细致太慢,直接赋值加速
    step_length = int(2*math.pi*r)*angle/360/n
    step_angle = angle/n
    t.lt(step_angle/2) # 据说折腾一下角度能消除像素误差?
    polygon(t, step_length, n, step_angle)
    t.rt(step_angle/2)
def polygon(t, length, n, angle):
    for i in range(n):
        t.fd(length)
        t.lt(angle)
def flower(t, p, r, a): # t for turtle, p for petal, r for radius, a for angle
    for i in range(p):
        for i in range(2): # 重复两次画花瓣,两次转向后和初始方向一致,非常重要!!!!!
            arc(t, r, a)
            t.lt(180-a)
        t.lt(360/p)
def move(t, length): # 一个画板画3朵花必须用暗中位移
    t.pu()
    t.fd(length)
    t.pd()
bob = turtle.Turtle()
move(bob, -100)
flower(bob, 7, 60, 60) # 偷偷设定半径和角度,万恶的例子,叫人怎么猜!于是我也直接搬!
move(bob, 100)
flower(bob, 10, 40, 80)
move(bob, 100)
flower(bob, 20, 140, 20)
turtle.mainloop()
2020-04
5

小米平板1重生记

By xrspook @ 23:15:43 归类于: 扮IT

2012-11-11,我入手了小米1s青春。从那时开始,一发不可收拾地成为了不折不扣的米粉,小米的东西买到我都记不清买了多少,尤其是一开始手机需要秒杀才能买到的时候。小米的手机我自己已经用到第3台,感觉寿命大概就3年的样子,或许你还能多扛一些时间,但超过3年那个东西通常你没办法不吐槽。

有可能是闪存太小,有可能是内存太小,有可能是电池尿崩,也有可能是MIUI升级到了一个糟糕透顶的版本,出现各种各样的bug,但系统却再也没有继续升级的版本。出厂时的版本已经早就回不去了,因为已经不知道跨过了多少个大版本,但手上的版本又非常的糟糕,当你想把现在的最新版本刷回从前的时候发现卡刷、线刷的官方版本都找不到,同样找不到的还有老掉牙的线刷软件。这个时候,意味着你除了换机这种解脱之外别无其它选择…… 如果是前面2个硬件问题,是没有任何办法的,谁也不会料到那些该死的app会越来越大,疯了一般吃内存;如果是电池问题,运气好淘宝到一个几十块钱的替代品,外加你有一定的动手拆机能力,再挺个一两年估计还是可以的;最后的软件问题,跟之前的买买买运气比起来,我觉得更靠RP运气,因为跟之前那个比起来,最后的软件找不找得到,适不适合你的老机完全是一场赌博。

之前我的小米1s青春始终找不到合适的版本,刷出来连不上wifi(sim卡槽早被我撬坏了,wifi也不行等于废掉),刷出来息屏待机堪比别人下载般烫手发热……今天,我的小米平板1却运气非常好地一次就找到了合适的官方软件和官方线刷包,重生来得太突然简单!但其实在刷机之前我已经研究了一个下午如何利用USB调试通过ADB停用或卸载系统的官方应用,无果。

为什么要把小米平板1拿去刷机?这个平板是我2014-07-22从小米官网抢回来了,同时还买了智能翻盖保护套和标准高透贴膜,合计1817元。这是个不小的数目,我至今买的3台小米手机都没有这台平板这么贵,但跟手机比起来,我平板的使用率很低,只需大概1个月充一次电,也正是因为这样,手机我换了2次,但我的平板还活着。现在,我会拿平板来听歌、看视频、看kindle。以前我也会在上面装不少乱七八糟的东西,但2+64GB的配置实在太难为它了,还记得2017年的双11,我还在里面装了很多阿里系app天天刷优惠。近期,我发现小米平板1非常耗电!平板我放家里,通常一个星期回来一次,一个星期充一次电,到我充电的时候居然电量低到自动关机了。怎么可能!!!我开的是飞行模式(这个平板根本不能插电话卡,飞行模式干嘛的我也不知道),没有开wifi,我有洁癖,所以不用的时候都要清内存,肯定是某些稀奇古怪的东西耗我的电!今天进而发现是某个叫做“网络定位服务”的东西,这只鬼软件耗电排第一,居然比我用来看Python教学视频的B站app还要耗电,非常没道理!拿这个东西去网上一查,用小米平板1的很多人都遇到了这个问题,大家用的都是最新版本的MIUI V9.2.4。那个耗电大户还不能禁止,不能删掉,即便手动停止,过一段时间又会偷偷重新开启,正是因为有那个恶心的存在,所以正常情况一晚待机消耗1%的电量变成了10%。不只是是电量掉得飞快,下载速度还受限了,网友说他们的下载速度只有几十KB,我没有那么惨,但我的下载速度也不超过300KB,这没道理,因为同样的东西,在同一个wifi之下我的手机能飞到MB的速度。小米平板1的MIUI已经很久都没有升级了,最后停留的版本是V9.2.4。也不知道是不是这个第一代的小米平板太耐用,官方觉得不手动杀死就没办法把现在的新货卖出去还是怎的。如果不是官方作孽,还能是什么原因呢?即便这个bug不是他们故意,都过去这么多时间了,还没处理,换而言之就是故意不处理。心碎……

有人说小米平板1要解锁,但实测是不用的,现在还有完全官方的线刷方式可行。我把小米平板1从MIUI V9.2.4线刷回了MIUI V6.6.6,一切正常,顺滑如丝,电量不尿崩了,“网络定位服务”不再出现在耗电排行榜了。

下面是线刷教程,摘抄过来帮助记忆力不好的自己,也帮助有需要的人。

1 下载小米官方的线刷Fastboot ROM完整包。小米的官方下载网页已经找不到,但幸好有好心人存了个列表,里面的东西是小米官方的下载链接,居然还下得动,而且还可以下得飞快,太感恩了!!!!!小米平板的官方代号是mocha,至于为什么,我也不知道。

2 下载小米官方的线刷工具包。注意了!最常见的小米线刷工具包是2018年版的,可能不适用于老掉牙的小米设备,因为那里支持的设备至少都是小米3,小米1和小米平板1这些东西最好还是用回老版本的线刷工具包比较好,老版本是2014年的。谢天谢地,老版本的线刷工具包小米官方虽然很难找到入口链接,但网页仍在,所以我赶紧摘抄一把

2.1 下载线刷工具包和线刷Fastboot ROM完整包。下载线刷工具包(大小:26M,29bc366214a42a048e6a7cfb1ca9cc25)
下载MIUI线刷Fastboot ROM完整包(请检查文件后缀名是否为”.tgz”,如果为”.gz” 请重新命名后缀为”.tgz”)(xrspook:自行解决,或见1)。

2.2 在平板上操作,关机状态下,同时按住音量下+电源键进入Fastboot模式将平板USB连接电脑。

2.3 线刷工具包下载完成后解压并安装(如遇到系统安全提示请选择允许安装),线刷Fastboot ROM完整包下载完成后双击运行解压,打开完整包文件夹,复制文件夹地址至地址栏,如下图。

2.4 点击黄圈刷新,刷机程序会自动识别手机,点击浏览旁的下拉箭头,选择高级设置——选择FastBoot脚本为线刷完整包文件夹路径中的flash_all.bat,点击红圈开始刷机。

2.5 等待刷机完成,如出现下图,表示已经刷机成功,小米平板会自动开机。

*线刷会清空所有用户数据,包括内置存储数据,请先备份再刷机,务必慎谨操作。

整个刷机过程我用了93秒。

PS:因为我的小米平板1是用来听歌、看视频和看kindle的,所以相关软件要装回去。foobar2000向来小米应用商店没有,我自行准备。想不到Kindle也匹配不到,因为现在最新的版本需要安卓5以上,最后支持安卓4.4.4的版本是Kindle阅读v8.23.0.21(2019年10月23日),有需要的人要自己收藏一下。

2020-04
3

四行四列的小网格

By xrspook @ 22:17:26 归类于: 扮IT

先放效果图

Think Python 2 第三章练习题三我的解决办法。只能用学过的语句(还没讲到循环),for啊,while啊都不许用,于是我只能很蛮很直接了。如果要绘制两行两列的小网格,我只需把do_twice里的a、b函数从现在的重复4次变成重复两次即可。我觉得自己的脚本比官方提供的四行四列的小网格绘制法更易懂肿么破。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
def plus():
    print('+ ', end='')
def minus():
    print('- ' * 4, end='')
def bar():
    print('| ', end='')
def space():
    print('  ' * 4, end='')
def do_twice(a,b):
    a()
    b()
    a()
    b()
    a()
    b()
    a()
    b()
def do_four():
    col()
    col()
    col()
    col()
def col():
    do_twice(bar,space)
    bar()
    print('')    
def row():
    do_twice(plus,minus)
    plus()
    print('') 
def print_grid():
    do_twice(row,do_four)
    row()
print_grid()
2012-05
3

ImageReady CS2做cinemagraphic

By xrspook @ 23:59:36 归类于: 扮IT

估计cinemagraphic是现在最热门的gif形式了。这到底是个什么东西呢?简单来说,就是一大个图片里只有一部分是动的,其它部分都处于静止。这有什么好处?你可以把注意力放在某个部位,从大处说,这是一张照片,但从小处说,这是一个视频,所以,你应该能理解为啥叫做“cinemagraphic”了吧,cinema + graphic是也!不过,你必须知道,这种神奇的图片其实是我们已经认识了很久的gif!这种区域动态的处理简直给了gif第二个春天!

第一次见识cinemagraphic是在Alberto Del Rio 2012年4月,WrestleMania XXVIII后他回归的第一场比赛的Smackdown上!各种喜感,各种笑爆!那些gif让我叹为观止!从我看到的第一眼开始我就非常有兴趣知道这到底是怎么做的。我寻觅了好久都未果。后来我知道了微软有个叫做Cliplets的软件,能用非常简单的操作制作这种效果的东西。这个软件好是好,但安装之前必须装这个那个,然后呢,最严重的是它只适用于WIN7以上的系统,XP和VISTA泪奔了。于是,我无可奈何,只好硬着头皮去刨各种中文英文的用Photoshop做的cinemagraphic教程。

10 Amazing Cinemagraphs Tutorials – Code Fear
动手制作一张Cinemagraph
教你怎么做会动的静态摄影 (1),Cinemagraph: Still Photos With Subtle Motion (part 1)

为什么只能用CS5去做?为什么PS就只能导入avi或mov呢?各种限制让我很不爽。

所以,经过一番尝试并最终成功后,我决定写一个用老掉牙的ImageReady CS2做cinemagraphic的教程!

照片录像我就木有了,我选择的是一个普通的.mp4视频,里面有一段ADR挑眉的镜头,我就用那个做cinemagraphic。

有视频,我们第一步做的是截图!我推荐使用KMP播放器,KMP播放器内置强大的截图功能,其中的高级捕获更是见神杀神类的(提醒,在高速和超高速模式下是无法使用捕获的,如果你不知道如何用KMP进行捕获请自行搜索解决)。这里,我们使用的是KMP的高级捕获。屏幕-右键-捕获-画面:高级捕获。

设置高级捕获很简单,但也有一定的学问。格式:通常jpeg就好;要捕获的数量必须是连续;捕获尺寸:原始就好;位数,默认吧;要捕获的帧,这里是一个看情况而定的项,通常来说,做一个简单表情/动作类的gif,一共截取15个图或以下就可以了,如果你要做一个复杂的动作gif,建议最多也不要超过30个图,这里的帧数和你最终得到的图片数量成反比关系,这里的设置你得琢磨琢磨,就我选取的那个挑眉视频来说,我觉得每5帧一截图就好了,我最后选取了截取到的15个图片。(常识:通常来说,影片都是每秒24帧的)在什么时候开始截图,什么时候结束,这都是很自由的,你截取完以后可以把你不需要的之前之后的东西给del掉。

PS用avi或mov导入的是所有帧,因此,你还得花很多时间和精力去删除不必要的帧,但用KMP的话,适用于各种格式的视频,且各种帧间隙你都可以轻易调节。

截图完毕,我么可以启动ImageReady CS2开始做gif了。

首先,文件-导入-作为帧的文件夹,把你刚才得到的一堆连续图放到一个文件夹,在这里导入到IR。

注意,在这个教程里将使用到“图层”、“动画”、“优化”这几个信息窗口,请勾上。

刚才的文件夹导入后你将发现动画和图层以及主视图里有了东西,动画和图层里更是有一堆的东西。莫慌,我们一步步来。首先,点动画的第一张,然后你看到图层里最后一个蓝了。在图层里先复制这个最底层的图层,也就是在蓝色图层的上面右键,按“复制图层”。重新选回原始的最底部的图层,然后点图层下面,锁定统一那一行的“统一图层可视性”。这个操作相当重要,这个设置就意味着你把这个图层作为“遮罩体”,就等于这个图层永远至于最上层,其它图层可以变化,但都在它之下,这就是cinemagraphic图片大部分区域静态的原因!

点击统一图层可视性后会弹出一个窗口,选择匹配就好。

然后呢,在动画栏选择除了第一个图以外的所有图,同时把所有图层都选上。在工具栏里点选框工具,把Berto的头给选上,因为我们就是要他的挑眉而已嘛。

接着,我们点一下最底层刚才那个被我们“统一图层可视性”的图层,然后按Delete,噢~~~Berto的头给我们弄没了,别担心,这是必须的。

然后呢,我们把除了底层外的图层全部选上,然后在主界面的选框里右键并点击“选择反向”。

点一下倒数第二图层,按Delete,你应该看到了,那个图层里除了Berto的头以外的东西都被干掉了!

同理,把除了底层以外的图层都这么处理。

现在呢,最底层的图层没有Berto的头,其它图层只有Berto的头了。哈哈哈,这就是我要干的!

在动画栏把所有帧都选上,在这里我们要设置每一帧的持续时间,我们选择其他。

我设置的是0.07秒,因为我觉得这个时间刚好,面对不同的视频不同的效果你们可以随意设置。

然后呢,我们必须记得动画栏的这个选择动画重复情况的选项得是永远。

最后,我们确认一下优化的数据,按截图来就好。优化在哪里?窗口-优化!

好了,我们已经大功告成了!就差把gif导出,导出在哪里呢?就IR CS2而言,文件-将优化结果储存为即可!

哇咔咔,这就是我们的最终作品!静态图片中挑眉的Berto!

当然了,如果你们足够无聊,也可以做一个这样的——在挑眉Berto面前乱入飞过的xrspook,偷笑~~~

教程写完鸟,有任何问题欢迎留言交流。或许这个教程里有些纯粹多余的步骤,希望高手批评指正。

最后,我把制作这个gif过程的所有素材(zip的密码为20120503_cg)和大家分享,其中包括:

1、mp4视频文件
2、用KMP播放器截下来的图片组
3、ImageReady CS2的psd文件(psd文件通常默认PS打开,你用IR打开这个就好,又或者,你在PS的窗口那里把“动画”勾上)
4、最终成品的gif

2011-01
19

网址自动重定向

By xrspook @ 12:15:36 归类于: 扮IT

在国内上http://www.wwe.com/*是很杯具的,通常都会得到这样一个页面。

于是你不得不把http://www.wwe.com/*手动更改为http://us.wwe.com/*,才能去到你要去的地方。很简单的一个操作,却麻烦。这么简单的事为什么要我们一次又一次人工完成呢?于是,今天我终于把目光投向了Greasemonkey,这个强大的油猴脚本控件。自写一个脚本实现网址自动重定向。

小白导向:

1、或许你压根不知道油猴是什么,所以请先看看wiki

2、知道油猴的神功后,你就得安装一个Firefox浏览器(你已经有了?忽略掉这步吧)。

3、安装Firefox油猴插件并激活。

4、打开xrspook写的WWE REDIRECT油猴脚本,右键油猴插件选择“新建用户脚本”。内容照抄下图。确定后需要你打开.js编辑,选择“记事本”就好,然后把WWE REDIRECT油猴脚本复制粘贴过去,保存。

大功告成了,开始无视http://www.wwe.com/*吧!

PS:附WWE REDIRECT油猴脚本源代码,很简单的说。如有需要你可以修改其中部分为你需要自动定向的内容。支持发散思维!

1
2
3
4
5
6
7
8
9
10
// ==UserScript==
// @name           rwwe
// @namespace      rwwe
// @include        http://www.wwe.com/*
// @exclude        http://us.wwe.com/*
// ==/UserScript==
 
(function(){
window.location.href = window.location.href.replace(/^http\:\/\/www.wwe.com/, 'http://us.wwe.com');
})();

说明:核心区域是“/^http\:\/\/www.wwe.com/”和“’http://us.wwe.com’”,前一个双引号里使用了字符转义,“\:”等同于“:”,“\/”等同于“/”,要知道,电脑不是人脑,你得用它懂的语言;至于后一个双引号的内容,不解释,纯粹字符串。

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress