多图杀猫
| 文章存档 | 技术乱炖 | 二维空间 | 所思所想 | English |
|
完了,四个都成了黑历史。找出了明显的翻译错误……我说怎么读都读不通……
09-19
学校网络最近总是时好时坏,坏的时候只能顺畅打开百度首页和博客园,其他的126啊Bangumi啊B站啊GH啊全都连接超时。
Python 对新手很不友好,这是它留给我的第一印象,虽然很多人说入门语言应该选 Python。隐式的类型推断(但是执行时是强类型)让智能感知很费劲。
我选用的 IDE 是 PyCharm。想从一个简单的示例入手:
1 | import urllib2 |
到此为止,都是能从名称中看出来的。但是当我尝试使用 reponse 的时候,敲下“.”却没有任何提示——我根本就不知道它返回的类型是什么。是字符串吗?应该不是,至少要有一个网络错误时的 fallback 吧。如果是一个类,公开了哪些方法呢?看不出。
后来我从网上看到 urllib2 的使用,后面是
1 | print response.read() |
突然就冒出一个 read() 方法。由此又得想,如果我只需要读取一部分数据呢?如果网络状况不佳导致超时呢?Python 肯定提供了相关的机制,可是根本就看不到。
去看 Python 的 urllib2 文档,关于 urlopen() 方法是这样描述的:
This function returns a file-like object with three additional methods:
geturl()— return the URL of the resource retrieved, commonly used to determine if a redirect was followedinfo()— return the meta-information of the page, such as headers, in the form of anmimetools.Messageinstance (see Quick Reference to HTTP Headers)getcode()— return the HTTP status code of the response.
这才知道,原来返回的是一个和普通文件类似的 object。那么文件对象有什么成员呢?
1 | f = open("") |
然后查看 f 的成员,才能看到文件对象的成员。很不幸,如果我要使用的话,必须要记住每个常用类型的成员,如果是函数还加上签名,要不由 urlopen() 返回的东西在 PyCharm 眼中就是白板,根本就不知道怎么用。也就是说,如果我现在要去写 Python,要不智能感知就得做好一点,要不就得抱着整个文档去查。
VS + IronPython 还没有尝试,不过估计会好一些。
VB 和 VB .NET 有着强大的延迟绑定(late binding)能力,后来 C# 4.0 中引入了 dynamic。这功能我总觉得是烫手山芋,因为如果没有目标的文档根本就难以开发和维护。例如:
1 | Dim o As Object |
接下来知道怎么干些什么吗?不知道,因为此时 o 的类型还是普通的 Object,不带具体的成员信息。相比之下,如果引用了类库,强类型化后再操作就好多了:
1 | ' VB 在工程中添加对 Excel 的类型库引用即可 |
剩下就好办了。因为类型是契约(contract)的一种(我指的不只是接口意义上的契约),有了明确引导后沟通就方便多了。例如,PHP(PhpStorm 下)和 JavaScript(WebStorm 下)都可以在注释中指定类型来影响智能感知的行为:
1 | /** |
当你输入“$mysqli->”的时候,就会弹出合适的自动完成列表。这样很适合在类型不熟悉的时候帮助探索。
效率很高,但是部分效果很惊悚。
推送到了 pixi 分支:https://github.com/Hozuki/Bulletproof/tree/pixi。
效果请展开查看。
Visual Studio 2015(自带 IronPython 和 Python Tools for Visual Studio)在上一篇日志中的同一个测试下表现很好。
嗯,不过对于即时的键入,和内置方法的完成有点缺陷。例如同一个示例,如果我在后面新行输入“ur”,PyCharm 会提示输入“url”,但是 VS 没有反应;PyCharm 会内置一些方法数据,如 __INIT__、__ADD__,VS 没有提示。
9月17日凌晨的脑洞,有可能能优化 Canvas2D 版的实现
按照杨彦君的提议,如果支持 CSS Shader(现名 CSS Custom Filter)的话,应该可以大大减轻绘制的工作强度。
但是实际应用中,上面的文章中的示例根本没有起到效果。查看元素发现,-webkit-filter: custom 被自动禁用了。
有人尝试用 WebGL 计算 CSS Shader,不过很不幸,其中需要用到 html2canvas,而且只能进行静态的渲染(也就是说,渲染是手工控制的,不是应用样式后自动进行的),改变一下 DOM 元素就知道,完全是图像平面的顶点/贴图变换。
话说 CSS Shader 是有安全问题的。一封 WebKit 开发组的邮件表明,Chrome 很久之前就已经不再支持相当部分的 CSS Shader 了。
本来这个草案是由 Adobe、Apple 等联合提议的。Adobe 还专门有介绍提议的文章和介绍 CSS FilterLab 的文章(CSS FilerLab 是 Adobe 用于测试开发 CSS Shader 的网页工具)。CSS FilterLab 里面的工具链接早已跳转到其 GitHub 页面。而这个项目的状态看起来不管是代码更新还是 issue 都停留在了两年前。
真是悲惨。想到还是得用 Three.js 我汗毛都立起来了。
今天被学校的一个小工具折腾得不行,想自己写一个(毕竟都知道原理了)。打开 Visual Studio,映入眼帘的是刷新的新闻。9月3日发布,过了快两周我才看到……
MSBuild 三月开放了 GitHub repo,现在已经得到了大量的社区支持。下一步 MSBuild 就要开始跟着 .NET Core 跨平台了。由元数据(metadata)驱动(毕竟 CLR),MSBulid 本来就有良好的依赖管理能力(不用像 CMake 那样手工写一堆),而且充分利用多核处理器(这个或许 CMake 有,我没关注过)。微软计划将为其添加云构建的支持——很令人兴奋,如果和 .NET Native 技术结合的话对于应用而言编译就成了轻松快捷的事情——虽然我在想应用到大型软件上效果也会不错的。
很久以来微软都被开源社区(主要是某些 hardcore 的 geeks)称为 M控制,快跳到 Linux”。自从 .NET Core 和 BCL 宣布开源之后,微软给人的印象是越来越好了。
叫嚣“M$”的人,否定了他人的选择权利。你用 C++ 和 Python,我偏爱 C#;你喜欢命令行,我认为 GUI 比较便利(又不是不能用 CLI)。有错吗?为什么要歧视呢?就和几乎被所有人鄙视的 Visual Basic(我指的是 VB .NET 之前的 VB),都其实能做一些很漂亮的 hack,只不过异常晦涩难懂罢了。CLR 上的语言照样可以写操作系统。
Mono Project 的苦战也好,微软在趋势冲击下的拥抱开源策略也好,都是值得称赞的。
Bulletproof 的 SVG-Canvas 融合测试不那么尽如人意,测试分支在 https://github.com/Hozuki/Bulletproof/tree/deprecated-svg-canvas。
晚上开了一下脑洞,从最基础的 JavaScript Image Processing 开始找起,发现了有趣的东西。性能瓶颈有可能可以突破。具体等待明天(今天?)实验,然后将过程与结果记录下来。
VS Code 尝试,与代码重构(算得上么)时发生各种事情,追根溯源看的 TypeScript 编译
滤镜在 Bulletproof 中的应用,算法选用
即将完成的发光、模糊滤镜与灵感来源
睡前来一发,写了简单的 MotionGroup(忽略了 easing 函数,暂时只实现线性——其他的其实在函数库有了,处理再说吧,反正要睡觉了)。
于是可以流畅运行小圆脸和绿坝娘的demo了。
效果(GIF)请展开阅读。
解决了之前重绘重影、效率低的问题;对 VS+NTVS vs. WebStorm 的评论