笨熊之家

欢迎来到笨熊之家~

0%

要坐长途火车了,想着到zimuzu下载一些美剧在火车上看,在客户端下载里找到了Web远程管理版,适用于linux,下载下来研究了一下。

人人影视客户端下载地址

下载后解压,运行rrshareweb,浏览器打开”localhost:3301”,右上角登录之后,选择批量下载,贴入多行下载链接即可。

这里发现人人客户端下载地址下面没有批量复制链接的按钮,于是自己对着DOM写了个JS函数出来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//g1 for season 1, g2 for season 2, etc..
//Plain JS
//Example: copyAllUrl("tab-gn-APP")
function copyAllUrl(id) {
var links = document.getElementById(id).getElementsByClassName("down-links");
var str = "";
for(var i=0; i<links.length; i++) {
var link = links[i];
str += link.getElementsByClassName("btn")[0].getAttribute("href")+"\n";
}
copy(str);
console.log("Copied.");
}

//jQuery
//Example: copyAll("#tab-gn-APP")
function copyAll(selector) {
var text = "";
$(selector).find(".down-links").each(function() {
text += $(this).find(".btn").eq(0).attr("href") + "\r\n";
});
copy(text);
console.log("Copied.");
}
Read more »

Lambda 表达式的翻译

原文: Translation of Lambda Expressions

MethodType 以参数类型与返回值类型的Class对象表示
MethodHandle

  1. invoke时检查MethodType
  2. 与反射不同的是,MethodHandle创建时才检查访问权限,之后使用就不再检查权限

函数式接口是一个有非继承自Object的一个方法的接口,例如Runnable,Comparator等,Java库使用这样的接口来表示回调已经很多年了。

编译器生成的用来捕获这些Lambda表达式的代码取决于Lambda表达式自身和它被赋予的函数式接口类型。

翻译需要用到JSR 292中的几个特性,包括invokedynamic,method handles和method handles与method types的增强的LDC字节码形式。因为这些无法表示在Java的源码中,所以我们的例子中将会用一种伪语法来表示这些特性:

Read more »

Spigot 1.8

Lombok

Project Lombok

Project Lombok is a java library that automatically plugs into your editor and build tools, spicing up your java.
Never write another getter or equals method again. Early access to future java features such as val, and much more.

Lombok将我们从频繁书写getter和equals等方法中的麻烦中脱离出来,源码中通过注解标记,搭配各种编辑器、构建工具的相应插件,Lombok将这些注解在编译前转化为对应的方法实现。

Read more »

学校开了IOS开发的课,机房电脑运行MacOS虚拟机又比较卡,遂决定在自己的笔记本电脑上装一个,方便写作业。

安装VirtualBox

在官方网站选择合适的包下载以后安装。

会弹出提示Secure Boot in UEFI相关的提示,按照提示设置密码之后重启,在弹出的窗口中输入密码,之后就可以正常使用VirtualBox了。

这里如果没配置好,会出现一些问题,如提示你”/dev/xboxdrv不存在”之类的。

Read more »

前言

初次接触到Lambda calculus是在SICP ex2.6,题中涉及到Church numerals(丘奇数),然后看到了这几篇文章,当时看了几篇,看得不是很懂,搁置了。

我在学习SICP 4 Metalinguistic Abstraction,在做习题4.9的时候遇到一个lambda递归的问题,想到之前看的lambda演算中好像有提到,于是去找了相关论文,从其中选取了一个讲的比较清晰的入门介绍,算是加深了了解。

本篇算是我的笔记啦。

Reference:

Read more »

经典算法

蒙特卡洛算法求PI

蒙特卡罗方法是一种计算方法。原理是通过大量随机样本,去了解一个系统,进而得到所要计算的值。
它非常强大和灵活,又相当简单易懂,很容易实现。对于许多问题来说,它往往是最简单的计算方法,有时甚至是唯一可行的方法。

蒙特卡洛方法入门

蒙特卡洛方法代码实例(包含面积法和cesaro算法,用到了函数指针和结构体)

Read more »

1
2
3
whereis idea #找到idea启动脚本的路径
#如 idea: /usr/local/bin/idea
file /usr/local/bin/idea #查看脚本是用什么语言写的

实际上是通过设置环境变量XMODIFIERSQT_IM_MODULE来解决这个问题的。

如果是Python写的脚本,那么可以这样写

1
2
os.environ["XMODIFIERS"] = "@im=fcitx"
os.environ["QT_IM_MODULE"] = "fcitx"

如果是Bash写的脚本,那么可以这样写

Read more »

这篇文章是SICP一书中第二章的笔记。
文章中用到的图来源Sarabander.github.io/SICP
例子中的;后的内容表示输出。

Scheme语法简述

1 ;数值
(+ 1 1) ;表达式,+为操作符,1 1为操作数
(define a 2) ;定义变量
(define (f i)
  (+ i 1)) ;定义过程
(define f
  (lambda (i)
    (+ i 1))) ;定义过程 -- 将f与lambda表达式关联
(if (> a 1) 
    a 
    1) ;条件结构
(cond ((= a 1) 1)
      ((> a 1) a)
      (else 2)) ;条件结构

数据抽象导论

数据抽象的基本概念就是构造一个在“抽象数据”上操作的程序,也就是说它是在用复合数据对象。

Read more »

前言

很早前就对VIM和Emacs有所了解,但适应不了Emacs那种快捷键,按Ctrl按到手指不舒服,于是就选择了VIM。

最近学习SICP,其中用到了Scheme,一种Lisp方言,昨天突然又想到了Emacs。

又有心思折腾了,sudo apt-get install emacs装上了Emacs,一装上就觉得不习惯,一方面还是Ctrl的问题,还有一方面是因为习惯了VIM的命令模式和插入模式分开的操作方式。

有没有结合VIM的命令操作和Emacs的配置形式的编辑器?一搜还真有,叫Spacemacs。

Read more »

使用uGet+aria2下载东西的时候,关了运行uGet的终端,然后发现启动不了uGet了,无论是从终端还是从图形界面。

尝试过删除所有uGet的配置文件(Path: ~/.config/uGet),没用。

然后我就想,是不是aria2还在运行?用pgrep aria2c命令查了下,果然,kill进程之后再打开uGet就没问题了。

重新添加下载任务后,发现下载进度快跑慢了(之前是40%,现在是98%),所以说刚才我在鼓捣的时候,aria在后台疯狂工作 :)

最大连接数 16,设置之后速度基本能跑满
非正常关闭uGet,再次启动时如果之前aria2的进程没有关闭的话,是无法再继续下载任务的,这个时候可以尝试关闭uGet,然后检查aria2的进程,确认其终止了之后打开uGet就可以正常使用了。

Read more »

这篇文章是SICP一书中第一章的笔记。
文章中用到的图来源MIT.EDU SICP Full text
原书中例子是用scheme写的,这里用JavaScript改写。
例子中的>表示输入,<表示输出。

编程的基本元素

表达式

原始表达式

原始表达式由一个值(字面量)构成,其运算结果也是这个值。

Read more »

记一次有趣的搜索过程

今天在写CSAPP练习题的时候,用到了printf这个函数,仅输出结果而没有在最后加上换行\n,结果ZSH中显示的是输出加上一个高亮的百分号,这让我百思不得其解。

这里先附上当时的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

char is_little_endian()
{
int val = 1;
return *((char *) &val);
}

int main(int argc, char const* argv[])
{
printf("%.2x", is_little_endian());
return 0;
}

然后我就去google了。

Read more »

之前是偶尔打开虚拟机来使用Ubuntu系统,但毕竟不是很方便,最近下定决心换系统,备份好后直接重装上了Ubuntu 16.04 LTS

安装系统—分区

安装时没在原Windows下重新分区,而是通过USB启动后直接在安装过程中重新分区,格掉了windows的boot分区,并且无视了分配新boot分区的提示,结果重启之后无法正常进入系统。

这个问题在重新运行安装过程并分配boot分区后解决了。

软件使用相关

Read more »

阅读时间 2018.2.14-2018.2.27

编码·笔记

2018.2.14-2018.2.27

夜会好友

临睡前,你想着和住在街对面好友交谈一会儿,你会怎么做?
打个电话?那确实挺简单的,那如果让我们回到电话还没有出现的时间呢?
或许你可以通过电筒的闪烁次数来表示一个字母表中的字母,但如果这样,一个句子也太费时费力了。
有没有更省事的方案呢?让我们去找找资料。
查阅资料你会发现有个叫摩尔斯码的东西,其通过将不同的”点”和”划”组合起来表示不同的字母,进而构造出完整的句子。
那么我们可以用手电筒的短闪烁表示”点”,长闪烁表示”划”,这样就可以传递摩尔斯码了,你和你的好友各备一份摩尔斯码对应字母的对照表即可。
(至亲密友 编码与组合 布莱叶盲文与二进制码 手电筒的剖析)

Read more »

开发环境

  • Python 3.6.4
  • Flask 0.12 pip install Flask
  • UIkit 3.0.0
  • Vue.js 2.x

配置环境

Linux

在官网下载Python3的源码包,解压并进入目录

1
2
3
4
./configure && make
sudo make install
python3 -V #如成功输出版本号等信息则表示安装成功
sudo pip install Flask

Windows

Read more »