Java 11 新特性学习

Java 11 在 2018 年 9 月 25 日发布。这是 Java 8 之后首个长期版本。

安装

因为我本地使用 asdf 来管理 Java 的多个版本,所以直接使用 asdf 来安装:

asdf install java adoptopenjdk-11.0.17+8
asdf global java adoptopenjdk-11.0.17+8
java -version

HTTP Client 升级

Http Client 几乎被重写,支持异步非阻塞。

包名从 jdk.incubator.http 改为 java.net.http,通过 CompleteableFutures 提供非阻塞请求。新的 HTTP Client 提供了对 HTTP/2 的支持,兼容 HTTP/1.1 ,与主流的开源库(Apache HttpClient,Jetty, OkHttp)性能相差无几。

Java 在 Reactive-Stream 的实践,广泛使用了 Java Flow API。

模拟 GET 请求:

HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
      .uri(URI.create("http://openjdk.java.net/"))
      .build();
client.sendAsync(request, BodyHandlers.ofString())
      .thenApply(HttpResponse::body)
      .thenAccept(System.out::println)
      .join();

Epsilon 低开销垃圾回收器

Epsilon 目标是开发一个内存控制器,不执行任何垃圾回收,提供完全消极的 GC 实现,最大限度降低内存占用和内存吞吐延迟时间。

通过 JVM 参数 -XX:+UseEpsilonGC 来开启。

为什么要开发一个不回收内存的垃圾回收器

一些特殊的场景可以不开启垃圾回收以方便进行比如性能测试,内存压力测试等等。

简化单个源代码文件的启动方法

Java 11 可以直接运行一个单一的源码文件,Java 解释器可以直接在内存中编译,然后执行。所有的类都必须定义在同一个 Java 文件中。

这个功能特别适合想要简单了解一下 Java,写一些脚本文件的时候非常有用。

本地变量类型推断

Lambda 参数的局部变量语法

Java 10 开始就引入了 var 关键字,允许局部变量推断。

但在 Java 10 中有几个限制:

  • 只能用于局部变量
  • 声明时必须初始化
  • 不能用于方法参数
  • 不能在 Lambda 表达式中

Java 11 中允许开发者直接在 Lambda 表达式中使用 var 进行参数声明。

低开销的 Heap Profiling

Java 11 中提供了一种低开销的 Java 堆分配采样方法,能够得到堆分配的 Java 对象信息,并能够通过 JVMTI 访问堆信息。

  • 低开销,可以默认开启
  • 定义好的程序接口访问
  • 堆所有堆分配区域进行采样
  • 给出正在和未被使用的 Java 对象信息

ZGC 可伸缩低延迟垃圾收集器

ZGC 是 Z Garbage Collector ,GC 停顿时间短,不超过 10ms,能处理 T 级别堆大小。

实验阶段,只在 Linux/x64 上可用,在编译时加入参数才可以启用,并且使用时需要增加 JVM 参数。

飞行记录器

低开销的事件信息收集框架。

启用参数:

-XX:StartFlightRecording

reference


2022-12-20 java , java-11 , jdk , openjdk

项目管理工具 Backlog 使用介绍

Backlog 是一个在日本非常流行的项目管理工具,用于追踪项目进度,查看甘特图,查看进度消费图。

Backlog 的英文原意指的是积压的工作,一系列的任务,或者待完成的事情。这个词通常被用在项目管理,软件开发中。

相关的术语

Backlog 上有一系列的术语

  • スペース(Space),空间,为每一个 Backlog 组织提供的 URL 划分的共享空间。一个空间由多个项目组成。
  • プロジェクト(Project)项目,包含每个组的任务、文件、团队成员等
  • プロジェクトの例(工程实例)
  • 課題,Backlog 中需要负责人处理的事项、任务,被称为「課題」,課題 可以设置开始时间、结束时间、负责人、内容、主题等等信息

每一个任务都有四种状态:

  • 未対応,还没有开始
  • 処理中,进行中
  • 処理済み,工作完成,等待确认
  • 完了,确认并完成

这个任务状态也可以通过后台的设置进行自定义。

技术栈

  • [[Phaser]]
  • [[Linear]]
  • [[Trello]]
  • [[ClickUp]]
  • [[Asana]]
  • [[Hive]]
  • [[Jira]]

2022-12-19 project , project-management , backlog , software , software-development

《天朝的崩溃:鸦片战争再研究》读书笔记

《天朝的崩溃:鸦片战争再研究》 是茅海建教授对于鸦片战争研究的集大成之作,是系统研究鸦片战争十余年所得的成果。在阅读之前,我本以为是一部非常学术的类似论文一样的著作,然而我只阅读了一章就改变了我的观点,作者以人物为核心,将历史事件以人物为核心串联,并收集各方面的文献材料,去还原历史的本来面貌,去摆正对一个历史人物的是非判断。并且作者的笔法流畅通顺,非常易读。

怎么知道的这一本书

这本书很早就在待看列表中,不断地有人在不同的场合曾经提到过,在豆瓣的时间线看到过,在 Twitter 上看到过有人推荐。鸦片战争几乎是中国人尽皆知的近代耻辱的开始,1840 年就像是一个烙印,相信很多人都记得。但唯独很多人不知道的是鸦片战争究竟是如何爆发的,又是如何一步步战败的。我们的教科书只是让我们对鸦片战争有了一个大概的印象,但每一个细节都缺失了。这也是让我对这一本副标题为「鸦片战争再研究」的书产生兴趣的一个原因。

关于作者

[[茅海建]],我还是第一次读这位教授的书,同样看介绍,这一本《天朝的崩溃》也是茅海建教授的成名之作。茅海建是华东师范大学历史系教授、北京大学历史学系兼职教授,师从陈旭麓教授。

几句话总结书的内容

这是一本还原鸦片战争前后相关人物、相关事件的历史著作,作者以翔实的文献材料,理性中立的评价,使得鸦片战争中的道光帝、林则徐、琦善、奕山等等人物形象跃然纸上。每次读到中途放下,就像是看电视剧中途休息,意犹未尽。

启发或想法

这本是一本讲述近 200 年前清王朝和英国的战争前因后果的历史著作,却不时的让我回想起过去三年的新冠疫情,主「剿」和主「抚」和如今的清零和开放;道光皇帝的优柔寡断,坚信祖宗留下来的制度尽善尽美只是朝廷存在诸多腐败的问题和如今左右摇摆的政策变化,动辄就以腐败问题查处高官,却从来似乎不曾真正解决问题;各地大臣欺瞒,克扣军饷和如今各地防疫政策,防疫数据以及通过疫情大赚核酸检测的钱。这一系列已经发生了近 200 年的事情再一次因为病毒而重新在这片大地上演,虽然因为科技发展,生活的变化,大多数事情的发生已经改变了其面貌,以前从广州到北京的一封奏折需要一个月,现在的通信技术发展只需要几毫秒,但欺瞒的手法却如此相同,知情不报,顾左右而言他。

另外一个让我非常敬佩的是作者在文献、参考资料上的引用数量,往往看完一个章节才意识到作者的脚注竟然会多达上百个。如此翔实,具体的,从这个方面收集的材料也使得这本历史著作在学术和可信度上更加可靠。

谁应该看这本书

所有想要更进一步了解鸦片战争的人。

印象深刻的句子

  • 这里绝无意为伊里布的谎言辩护,而是指出,对促发这种谎言的体制和君主也也应当批判。
  • 道德的批判最是无情。而批判一旦上升至道德的层面,事情的细节便失去了原有的意义,至于细节之中所包含的各种信息、教训更是成了毫无用处的废物。
  • 战争的现实就是这么冷酷,丝毫也不照顾正义的一方。
  • 战争的权威性,就在于强迫对方顺从。
  • 知识给人以力量,愚昧也给人以力量,有时甚至是更大的力量。

2022-12-16 reading , reading-2022 , reading-2022q4 , 读书笔记 , 鸦片战争

editorconfig 配置文件说明

在一些开源项目的根目录中会有一些 .editorconfig 文件,看名字也能大致猜出来是编辑器的配置文件,这个文件的主要内容就是编辑器编码、缩进等等配置。

editorconfig 可以跨不同编辑器,为不同的 IDE 维护一份一直的编码风格配置文件。

  • 使用 Tab 还是空格进行缩进
  • 缩进多少格

样式定义举例:

[*]
end_of_line = lf
insert_final_newline = true

第一行为通配符。

文件通配符

editorconfig 中可以使用正则来匹配文件,对匹配的文件使用之后定义的配置。

比如例子中的 [*] 就表示的是匹配所有的文件。

这个通配符类似正则表达式。

  • * 匹配除 / 之外的任意
  • ** 匹配任意字符
  • ? 匹配单个字符
  • [name] 匹配指定字符
  • [!name] 匹配非指定字符
  • {s1, s2, s3} 匹配多个字符
  • {num1..num2} 匹配 num1 和 num2 之间的任意字符。

指定文件

如果要指定为 Markfile 文件设定格式:

[Makefile]
indent_style = tab

也可以指定多个文件,使用 , 分隔:

[{package.json,.travis.yml}]

指定文件类型生效

如果要匹配所有的 Python 源文件和 JavaScript 源文件可以使用:

[*.{js,py}]

指定路径

指定路径下的所有文件:

[lib/**.js]
indent_style = space
indent_size = 2

配置语法

缩进风格:

indent_stype

可选值:

  • space 空格
  • tab Tab 制表符

缩进大小:

indent_size

通常会设定 2 字符或 4 字符。

换行符号类型:

end_of_line

可以是:

  • lf 换行,Unix 和 Linux 下的换行
  • cr 回车,macOS 下的
  • crlf 回车换行,Windows 和 Dos 下

编码格式:

charset

通常会:

  • utf-8
  • utf-8-bom
  • utf-16be
  • utf-16le

文件末尾是否插入空行:

insert_final_newline

如果配置 true 则在文件末尾插入空行。

常用的例子:

# top-most EditorConfig file
root = true

# all files
[*]
indent_style = tab
indent_size = 4
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

# .md file
[*.md]
trim_trailing_whitespace = false

所有其他的配置可以见 官方 Wiki

IDEA 配置 editorconfig

JetBrains 的 IDEA 可以安装 editorconfig 插件。

Vim 配置 editorconfig 插件

在 Vim 下使用 vim-plug 插件管理器,添加 editorconfig-vim 插件

Plug 'editorconfig/editorconfig-vim'

source .vimrc ,然后 : PlugInstall 即可。

其他编辑器可以查看 官网

reference


2022-12-10 editorconfig , editor , ide , vscode , indent , code-format

发布和制作 torrent 文件

本文主要总结和记录一下制作和发布 torrent 的过程。

制作种子文件

制作一个种子文件的方式有很多,熟悉命令行的朋友可以直接使用命令行制作,如果在 Windows,或 macOS 下的朋友也可以使用 UI 界面,或相关的工具来制作。

种子文件是用来维护和协调文件下载和分享的一种文件格式。这种文件通常包含了文件的哈希值(即校验和)、文件名和文件大小等信息,以及用于协调文件下载的若干个服务器的地址。这些服务器的地址被称为 trackers。

在 BitTorrent 协议中,trackers 用于协调客户端之间的文件分享。当一个用户想要下载文件时,他可以打开种子文件并把其中的 tracker 服务器地址提交给客户端。客户端会向这些 tracker 服务器发送请求,然后 tracker 服务器会返回一组已经下载了文件的客户端地址。客户端可以通过这些地址找到其他已经下载了文件的用户,并从他们那里获取文件。

在制作种子文件的过程中有几个概念需要提前了解一下:

  • Trackers,协调客户端之间的文件分享
  • Private,种子文件中有一个 Private 标志,文件 Private 设置为 True 则表示文件的下载和分享只能在特定的 tracker 服务器或客户端之间进行

命令行制作种子

通过命令行制作种子,可以参考 这篇文章

主要借助的命令行工具是:

  • mktorrent
  • transmission-cli 中的 transmission-create

通过界面制作种子

通过 UI 界面制作种子一般需要本地安装一个 客户端 ,比如常用的 Transmission,或 qBittorrent,等等。

这里以 Transmission 客户端为例,来演示如何制作种子文件。首先准备需要分享的文件内容,记住其所在的位置。

首先打开 Transmission,点击左上角的 + 号,创建一个 torrent 文件。

create torrent in transmission

这个时候 Transmission 会要求你选择一个文件,或者选择一个文件夹,此时选择需要分享的文件(或文件夹)。

然后 Transmission 会弹出如下的弹窗。

transmission torrent

  • Trackers 中填入服务器提供的地址。
  • Comment 中可以任意填写
  • 勾选 Private
  • 选择 Torrent File 的位置

最后点击 Create 创建。

对于另外一些客户端,可能会要求用户选择区块的大小,如果文件大小比较适中,选择 4M 或 8M 即可,如果分享的文件内容超过 TB 级别,可以适当选择 16M 或更多。

上传种子文件

制作好种子文件,下一步就是将种子文件分享出去。登录一个 PT 站点, 比如 GTK ,然后访问 发布 页面。

编写标题

按照要求,一般在标题中填写资源的英文名称。

副标题中填写中文译名。

pt title rule

获取简介

PT-Gen

pt introduction

油猴脚本:豆瓣资源下载大师

可以通过在浏览器中安装 油猴脚本:豆瓣资源下载大师 ,然后在设置中开启「电影简介生成」。

douban userscript pt gen

刷新页面,就能在词条页面中看到 movieinfo

douban movie info

复制该信息即可。

如果怕豆瓣图片的防盗链机制,可以将海报封面重新上传到稳定的图床。[[电影海报网站]]

MovieInfoGen

电影信息查询脚本 是一个专注与通过豆瓣页面生成 PT 简介信息的用户脚本。

其他

获取 mediainfo

mediainfo 的内容一般会用 quote 代码框起来,比较美观

  • 使用 ffprobe 查看 Media Info
  • 使用 MediaInfo 软件生成
  • 一般在你源文件所在的 pt 站的种子页面会有
  • 可以用 ruTorrent 获取
  • PotPlayer 仅限 Windows

使用 ruTorrent 获取 mediainfo

  • 可以用 ruTorrent 获取
    • 点击种子,然后选择文件(Files)
    • 在文件上右击获取媒体信息(Media Info)

rutorrent media info

本地 PotPlayer 获取

仅限于 Windows。本地用 PotPlayer 打开媒体文件,右击,选择属性(Ctrl+F1),然后在文件信息中,将信息复制到粘贴板。

如果发布的是原盘,可以使用 bdinfo 软件获取。

[quote] Mediainfo/BDinfo [/quote]

发布种子

完成所有信息的填写,之后,点击发布。PT 站会自动重新下载一个新的种子,该种子包含了用户的个人信息,然后重载在客户端添加此种子,即可开始做种。

种子信息编辑

  • [[BEncode Editor]] Windows only
  • [[Torrent File Editor]] Windows, macOS

2022-12-09 torrent , mktorrent , tracker , private-tracker , transmission , rtorrent

动态规划问题梳理

很久以来一直没有好好地梳理一下 Dynamic Programming 的问题,虽然 DP (动态规划)的问题一直出现,但每次遇到总是会卡壳一下。既然前人已经将这一类问题总结成一个专有名词了,那就证明这一类的问题已经可以用一套现成的模式来解决,这篇文章就整理一下 DP 问题的常见模式。下面的部分内容是看了 MIT Dynamic Programming 的公开课之后总结得出,教授用一个 Fibonacci 的问题,自顶向下,自底向上,去系统的讲了什么是 DP。 DP 就是递归问题再加上把求解的子问题结果存储「记忆」。这个教授将什么是 DP 问题一下子就解释清楚了。

动态规划是一种分阶段求解问题的思想。用简单的话归纳动态规划就是 递推+记忆。通过子问题递推出原始问题,通过额外的空间来存储子问题解。

Simplifying a complicated problem by breaking it down into simpler sub-problems ( in a recursive manner)

类似递归问题,没有本质区别,但是动态规划的区别在于,只需要存最优的状态,推导出全局最优。

DP 算法最初由 Richard Bellman 发明。DP 就是 recursion(递归) + memorization (子问题结果记忆)

DP 问题如果从子问题开始往上推导,那么就可以将递归的写法变成循环的写法。这也就是为什么在讲斐波那契数列的递推的时候,通常会有两种写法。如果已经求解了子问题,那么从下往上递推,就可以使用循环(而非递归)来求解问题了。

Fibonacci

先来看看最经典的 Fibonacci 数列的求解方法。

如果使用递归,指数级复杂度 O(2^n)。

public int fib(int n) {
    if (n == 0 || n == 1) {
        return n;
    }
    return fib(n - 1) + fib(n - 2);
}

但是如果引入一个数组来存储以及计算过的结果,可以进一步降低时间复杂度,从指数级降到 O(n) 的复杂度。

更进一步可以将空间复杂度也从 O(n) 降到 O(1)

    public int fib(int n) {
        if (n == 0 || n == 1) return n;
        int[] dp = new int[2];
        dp[0] = 0;
        dp[1] = 1;
        for (int i = 2; i <= n; i++) {
            int temp = dp[0] + dp[1];
            dp[0] = dp[1];
            dp[1] = temp;
        }
        return dp[1];
    }

如果我们在脑海里模拟 Fib(n) 的原始求解步骤,自顶向下会发现是一棵向下的二叉树,求解 Fib(n) 首先要求解 Fib(n-1) 和 Fib(n-2),而与此同时又需要进一步求解 Fib(n-2), Fib(n-3) …….等等,并且向下求解的过程中我们会发现很多重复的计算过程。这个时候就需要看到 DP 问题的第二个特征,memorization(子问题的记忆化)。如果能够将子问题的结果保存下来,那就可以避免很多的重复计算过程。

Climbing Stairs

再来看一个相似的简单爬楼梯问题,假设有一个 n 阶的楼梯,每次可以爬 1 阶或 2 阶,问有几种方式可以爬到顶。

同样如果 n 是 2,那么可以是 1+1,或者 2。如果是 n 是 3,那就可以是在 n = 2 的时候往上爬 1 阶,加上 n = 1 的时候往上爬 2 阶。

Count the paths

再来看看延伸一些的问题,如果在一个 m * n 的棋盘上从左上角走到右下角,每次只能走右或下,请问有多少种走法。

将原始的问题拆分为子问题:

count path solution

编写伪代码:

int countPaths(boolean[][] grid, int row, int col) {
    if(!validSquare[grid, row, col]) return 0;
    if(isAtEnd(grid, row, col)) return 1;
    return countPaths(grid, row+1, col) + countPaths(grid, row, col+1);
}

状态转移方程:

opt[i, j] = opt[i+1, j] + opt[i, j+1];

if a[i,j] is 空地:
    opt[i,j] = opt[i+1, j]+opt[i,j+1]
else:
    opt[i,j] = 0

解决动态规划问题的一般思路

5 个步骤:

  • define subproblems 定义子问题,分治思想
  • guess (part of solution) 递推方程
  • relate subproblem solutions 子问题的解合并
  • recursive & memoize or build DP table bottom-up 递归和记忆,DP 状态表(存储中间状态),自底向上递推
  • 解决原始问题

如果要去学习和理解 DP 问题就必须打破原有的思维习惯,去理解机器思维,因为机器只能执行 if, while, for,条件,循环,递归等等。也必须要去锻炼拆分复杂问题的能力。


2022-12-09 dp , dynamic-programming , algorithm , computer-science

我们的尊严来自于自由

「自由」这一个词是一个非常抽象的词汇,最近这个词出现的频率越来越多,新闻自由,言论自由,信仰自由,政治自由,人们走向街头不断地呼喊自己所理解的「自由」。我们只有更好的理解我们所说的「自由」才能更有自信地去争取自由。

用英文去表达自由有两个词,freedom 和 liberty。

  • liberty
    • 在牛津词典中的解释是
      • freedom to live as you choose without too many restrictions from government or authority
      • the legal right and freedom to to something
    • 在 Longman 字典中的解释是
      • the freedom and the right to do whatever you want without asking permission or being afraid of authority
      • legal right
    • 在 American Heritage English 词典中:
      • Freedom from unjust or undue governmental control
  • freedom,再来看看字典上对 freedom 的解释
    • 牛津词典:
      • the right to do or say what you want without anyone stopping you
      • the state of being able to do what you want, without anything stopping you
      • 与之相对的就是 prisoner 或 slave
    • Longman 词典:
      • the right to do what you want without being controlled or restricted by anyone
    • American Heritage English 词典中进一步补充到:
      • Exemption from an unpleasant or onerous condition,免于不愉快,麻烦的状况
      • the capacity to exercise choice; free will,选择的能力

从这个英英的解释中我能够提取出来几个关键字,without restrictions from authoritythe capacity to exercise choice,自由意味着免于「任何人」,「任何组织」,「任何政府」的控制,自由的人可以根据自己的意愿选择做什么,说什么。在牛津字典中给出了两个自由的反例,恰好也回答了我们为什么要争取自由,不自由的两个例子就是 prisoner 或 slave。

但上面的解释都是字面的含义,真正的自由当然不是想做什么就做什么。

什么是自由

  • [[黑格尔]] 说,为了纯粹的明誉甘愿冒死决斗,才是人之为人的东西,这是自由的基础。
  • [[密尔]] 说,公民自由是社会所能合法施用于个人的权力的性质和限度。自由是对于政治统治者暴虐的防御。
    • 密尔在[[论自由]]一书中讨论的不是自由意志,而是「公民自由和社会自由」,即社会可以合法地施加于个人的权利之性质和界限。
  • [[卢梭]] 在 [[社会契约论]] 中说,只有服从了社会为自己所设之规定,谓之法律的,才叫做自由。
  • [[波普尔]] 在 [[通过知识获得解放]] 说,自由不单是观念形态,而是使生活更美好、更值得度过的一种生活方式。
  • [[康德]] 说,自由不是想干什么就干什么,而是想不干什么就不干什么。
    • 自律即自由
  • [[勒尼德·汉德]] 说,自由就是对「何为正确」不那么确定的精神。
  • [[罗斯福]] 总统提出过「四大自由」,[[言论自由]],信仰自由,免于匮乏的自由,免于恐惧的自由。
    • 每一个人对自己生命和公权力之前的关系,有稳定的、正当的预期。
  • [[赛亚 伯林 伯林]] 说,「自由的根本意义是摆脱枷锁、摆脱囚禁、摆脱他人奴役的自由。」
  • [[哈耶克]] 说,「愿意放弃自由来换取保障的人,他最终既得不到自由,也得不到保障。」
  • [[赛亚 伯林]] 更进一步将自由分成 [[消极自由]] 和 [[积极自由]],对应着英文的「free from」和 「free to」。消极自由指的是免于「干涉」的自由,我不想做什么就可以不做什么;而积极自由指的是我想做什么就可以做什么,实现目标的自由,成为自己的的主人。

言论自由、思想自由、出版自由

密尔在《论自由》中沿袭了密尔顿、洛克等英国自由主义传统,广泛的出版自由。密尔将人类获得真理视为绝对的善,因为获得真理可以使人进步,思想言论自由的价值并不在于它是个人的权利,而在于它能够有助于人类获得真理。

每个时代都曾持有很多被后代认为不仅错误而且荒谬的看法,可以确定的是,现在流行的很多看法将会被未来的时代所抛弃。只有经过讨论,错误的意见和行为才会逐渐屈服于事实和论证,这更一步地反证了只有思想自由才能促进社会进步。

即使我们认为我们已经掌握了真理,也要坚持言论自由,如果禁止对真理的挑战,真理就会僵化,变成死板的教条,最后丧失为自己辩护的能力。真理只有在谬误公开的冲突中得到考验,才能使真理充满活力,使大众对真理的认识更加全面、深刻。

[[霍姆斯大法官]] 为言论自由辩护,人们所希望的最终的善,最好通过思想的自由交流实现,对真理的最佳检验,在于思想在市场竞争中获得的力量。

霍姆斯认为政府没有必要,也没有能力,干预不同思想的之间的自由竞争,因为政府或者任何人都无法实现对真理的垄断。

霍姆斯甚至认为美国制度就是一场自由探索的实验,一种制度并不一直提供一劳永逸的乌托邦的思想,但可以为制度之下的人们走向真善美提供自由的机会。也只有不断的自由交流和公共讨论的过程中,这种制度才会修正错误,赢得稳定和活力。

真理自由观的问题在于,通过思想市场的自由探索是不是一定能够获得真理,或者实现真理战胜谬误。

言论在某种意义上是更好被操纵的,[[罗尔斯]]在政治自由主义中看到的那样,不能指望具有理性力量的人们,即使在自由讨论之后都达到同样的结论。

那这样真理自由的意义何在,我想最大的意义并非是能够找到某种确定的答案,而在于思想竞争和自由交流的过程本身,它们使得一个社会成为了开放的社会,使得一个人成为了开放的人,无论开放的社会有多少的问题,生活在开放的社会,总比生活在封闭的社会,对人的发展而言总要更加值得。

政治自由

政治自由,通常指的是公民有权利参与到公共事务,包括选举和被选举,对权力发表不同的意见,广义的政治自由还包括上面提及的出版自由,集会自由,结社自由,游行示威自由,无罪推论。1

自由的原则成为了民主的重要途径,公共事务必须交给公众决定,这并不是因为公众的意见本身是对的,或者有见地的,而是因为公众的意见不可忽视。

民主的决策很多时候无关专业科学的判断,而只关乎利益,立场的决择,所以让每个人都发出声音,这在进行民主决策时非常重要,这样依赖, 自由本身就蕴含着平等,甚至深化了民主的平等。

自由不仅意味着随心所欲,而且意味着公共责任,民主的自由观,之所以相信自由在民主生活中的价值,还有更深刻的理由,人的天赋,条件,能力,千差万别,只有通过自由的言说,自由的实践,才能为人的才能的发挥提供最大化的机会,才能使人们更理性,更明智,更有判断力,从而减少被统治者欺骗的可能。正确的看待政府与人民的关系,并且把人们从非理性的恐惧中解脱出来,人们曾经因为害怕巫婆就烧死女人,人民曾经因为激情盲目而选择了纳粹,正如美国 [[布兰代斯大法官]] 所言,对自由的最大威胁,在于人的惰性,不鼓励思想、希望和想象是危险的,恐惧会产生镇压,镇压会产生仇恨,仇恨会威胁政府的稳定,言论自由是有风险,但是压制言论自由的风险更大。

自由对理性责任精神的强调则蕴含着民主的有限政府理念。自由的重要性不仅在于不受政府和他人的干预,更在于通过积极的行动来推进公共政策,实现利益的妥协和社会的正义。

西方社会已经认识到,词语比刀剑更有影响力。完美的社会是不可能的,但是一些秩序要胜过一些秩序。立法的任务是允许每个个人的最大自由和其他人的最大自由并存。自由必须受到法律的限制。秩序是自由的必要平衡。

当社会本身就是暴君时,当社会集体凌驾于组成它的个体之上时,暴政的实施就不限于借助政治机构之手而行的各种措施。社会如果执行了错误而非正确的命令,或者对它根本不应干涉的事务发号施令,那么它便实行了一种比其他各种政治迫害更为可怕的社会暴政,不以严厉的惩罚为支撑,但却由于更深入地渗透到人们生活的细节,束缚了人的身心,从而使人们更加无法逃脱。

为什么要争取自由

从伯林对自由的分类正好可以总结出两点:

  • 免于被奴役,被控制
  • 追求自己的理想和目标

上至苏格拉底,到集大成者的康德,都强调自由代表了人的尊严和美德。人必须过一种神圣的、善的生活,没有这种内外统一的实践,人就不能称其为人,自由意志合乎道德的意志,「人是目的,而非手段」,人要理性自律,不能屈从他律。

reference

  • [[论自由]]
  • [[言论的边界 美国宪法第一修正案简史]]

2022-11-30 freedom , free , pree-freedom , political-liberty , liberty , freedom-of-speech , free-speech

在日本生活必备的应用收集整理

在上一篇梳理了一下如何 注册日区的 Apple ID ,其实主要是为了这一篇整理做准备,有很多的应用,如果不是日区就安装不了,并且如果要在日本生活有一些应用还是非常重要的,所以就提前梳理一下需要用到的应用。

免责声明,因为本人此刻并没有在日本长期生活过,下面的所有内容都是我个人在搜集资料的过程中,或因本人需要,或因为其他人推荐,才收集整理得出,可能会有一些偏差,如果有读者发现任何问题,可以随时留言告诉我,我会立即修正。 另外如果有朋友长期居住在日本,平时有用到一些不错的本土应用也欢迎留言告诉我,待我尝试之后我也会补充到文章中。 希望本文可以给想要去日本旅游,或者想要去日本常居的朋友一些帮助。

租房

  • SUUMO,日本最大的租房网站

交通

要加深对日本的印象就首先从地理位置上开始认识,而城市规划,尤其是公共交通的设计,在没有用乗換案内之前我都只能在网页版的 Google Maps 上一点点得搜站点的名字,然后查看其相对的位置。

我在出门旅行也好生活也好,通常都会提前看一个这个城市的轮廓,以及集中重点的景点的位置,在 Google Maps 上用 Star 标记一下,有时间了还会用 My Maps 规划一个最优的路线,以免在陌生的地方来回重复的走回头路。

  • 「Yahoo!乗換案内」,日本的电车非常发达,下载了一张东京都的地铁线路图得放大好几倍才能找到我想要查的站点,乘换案内解决了电车换乘的问题,当然用 Google Maps 也可以,但这个应用在换乘,列车到站时间等方面给的信息更多
    • 千万要注意,这个应用的图表是下图所示,中国区和美国区都有一些假冒的应用
    • yahoo transit
    • 在日区乘换案内名字的应用还挺多的,还有一个推荐较多的是一个红色 Logo 的,Jorudan Co. Ltd 出品的,我两个都下载试用了之后,还是果断推荐 Yahoo 的这个,界面设计好,并且 Yahoo 的还能提供地图线路,路线可以按照时间优先,换乘次数,以及金额排序
    • 还有一个叫做「乗換 NAVITIME」的应用,Logo 是一辆绿色的电车,使用起来体验也不错
  • Suica,电车票
  • DIDI,出行打车

翻译

  • VoiceTra,日本的情报通信研究机构开发的一款翻译应用,我之后也写了一篇文章介绍,最主要是的符合日本的国情,翻译的日语内容比较符合日本人使用习惯。我去区役所的时候工作人员也是用的这一款应用。
  • Google Translate,这就不用多说了,之前就常用
  • Papago,去韩国的时候偶然间发现的一款翻译应用,多年用来感觉比 Google Translate 还顺手,主要是界面比较简洁,并且 Papago 不仅有语音翻译,我还常用的一个功能就是拍照翻译,个人感觉比 Google 的要快一些
  • Felo 实时翻译,这是一个非常简洁的应用,设置好语言之后,只有一个按钮,就是开启实时翻译,如果设置中文和日语,在界面上马上就能识别出当前说话的内容。

Ufd3

美食

外卖

  • Uber Eats,点外卖
  • HAYA,订外卖,注册送 3000 元券,3 KM 内免费配送,支持支付宝,微信,信用卡

美食排行

  • 食べログ,美食点评,一款类似于大众点评的应用,听朋友说这上面的打分超过 3.2 的就可以尝试一下了,日本人打分可能比较严格吧。
  • ホットペッパーグルメ,Hot Pepper,可以在上面发现新餐厅,预约餐厅
  • ぐるなび,也是一款发现餐厅的应用,但是相较于上面两个信息没有那么全面

UXwL

其他

  • クックパッド,学习做菜,以及学习食材的日语
  • クラシル
搜索 {予約 よやく}{可 か} 可以筛选可以预约的餐厅。

日常生活

  • Yahoo!防災速報,第一时间通知这种自然灾害,或人为犯罪危害
    • NHK ニュース 防災 (ぼうさい) ,灾情相关通知以及新闻直播,可以用来学习日语
  • マルチコピー,打印,将文件上传到应用内,到便利店打印即可
  • SpaceMarket,租借场地,空间租赁,过生日,聚会,吃火锅比较合适
  • 楽天チケット Web 演唱会、音乐会购票
  • イープラス,演唱会门票
  • チケジャム, Web ,二手门票
  • SHEIN,衣服
  • アインズトルペ,AINZ TULPE,药妆店

理发

  • ホットペッパー ビューティー(Hotpepper Beauty),美容美发美甲等等预约,男生也可以在这上面预约理发
  • ミニモ,minimo,一个可以获得免费理发机会的应用,理发师见习,练手,所以有一定的机会可以获得免费的理发,当然你不建议被理坏的话。

    旅行

  • じゃらん 官网 日本本土最大的旅游预订网站,汇集了日本各地景点,可以用来订酒店,订机票。因为 Jalan 会和众多的民宿、酒店合作,在上面搜索说不定能找到价廉物美的温泉酒店。
    • 週刊じゃらん,一个注重周末旅行的应用,可以在上面预约啤酒厂见习,温泉旅行等等周末活动。
  • アソビュー,アソビュー是一款由日本 NTT DOCOMO 开发的应用,旨在为用户提供各种娱乐活动的信息和预订服务。该应用提供了包括餐厅、旅游、演出、运动等在内的各种娱乐活动的信息和预订服务,并且可以根据用户的兴趣和位置推荐相应的活动。用户可以通过该应用轻松地查找并预订各种娱乐活动,享受丰富多彩的生活。
  • YAMAP,一个为登山爱好者定制的地图,可以查看登山路线
  • アソビュー! ,一个集合了游乐园,水族馆,博物馆,展望台,美术馆的应用,可以在里面预约,买票等等

    网购

  • Amazon JP
  • メルカリ,日本的二手物品交易市场,虽然日本的线下二手店市场已经非常发达,但是在线的市场还是得用它。
    • 同类型的还有:
    • ヤフオク,Yahoo 旗下的二手拍卖网站 Web
    • ラクマ,乐天旗下 Web
  • 楽天市場, Web
  • [[PayPay]],移动支付,使用之前需要注册账户,绑定银行或电子钱包。

其他

  • Lemon8,日本的小红书
  • iMuseum,不知道看什么展,可以在这个 App 上查看
  • チラシミュージアム,展览的海报,培养自己的美感
  • LUUP,一个电动滑板车的租赁应用,类似于国内的共享电动车。
  • くらしのマーケット,预约维修,除虫,除草等等

2022-11-28 japan , applications , daily-life , japanese , japan-life

如何注册日区 Apple ID 以及初次登录日区 App Store

之前一直使用美区的账号,但突然发现有一些 App 在美区也没有,比如去日本经常需要用到的「乗換案内」就搜不到,美区里面尽是一些冒牌的,还穿插各种广告的应用,还有很多日本本地的一些应用也几乎都没有上架美区。

比如:

  • 美食点评的「食べログ」 官网
  • 闲置物品出售的「ジモティー」 官网
  • 冲洗照片的 ノハナ(nohana) 官网
  • 等等

注册日区 Apple ID

  1. 进入日本苹果官方主页 https://www.apple.com/jp/ ,在页面下方找到 「Apple ID の管理」。
  2. 进入新页面之后,找到 「** Apple ID を作成 **」
  3. 接下来就是开始填写账户的具体信息,包括姓名,出生年月,邮箱,密码等。
    1. 这个地方可以教大家一个 Gmail 的技巧,比如你的 Gmail 账号是 demo@gmail.com ,那么 demo+jp@gmail.comdemo+hk@gmail.com 都是你的账号,Gmail 是会忽略 + 后面的内容的,另外还有一个小技巧是 Gmail 用户名中的点都是会被忽略的,所以 de.mo@gmail.comd.emo@gmail.com 同样也是你的账号 。那么这就非常方便了,我就用 demo+jp@gmail.com 来注册日区的账号就行了。
    2. 密码直接用 Bitwarden 生成一个复杂随机密码
    3. 电话号码这里一定要注意填写你能收到验证码的手机,Google Voice 的号码这里也是可以的
    4. 下面两个可选项「お知らせ」,「App、音楽、テレビ番組など」可以不用勾选
  4. 然后点击「次に進む」,猜意思也能知道是「Next」的意思

经过以上的步骤就注册了一个没有绑定支付方式的 Apple ID 了。以后的步骤就是在 iPhone 上登录这个日区账号,并完成最后的注册。

  • 在 iPhone 上的设置(Settings)中,点击最上方的头像,然后找到其中的「Media & Purchases」,记住这里一定是点击这个蓝色中间带 A 字的选项,然后点击「Sign Out」
  • 等登出之后,再点击,此时会问是否要以原来手机的账户登录 App Store,这里一定要选择「不是」
  • 然后再使用日区的用户名和密码登录,此时手机会收到二步验证的验证码
  • 下一步之后,为了保证操作步骤没有问题,可以先使用 代理 ,使用日本的 IP,然后 App Store 会弹出当前大致意思是当前 Apple ID 还没有使用过 App Store,需要完善一些一些信息,从上到下依次是:
    • 首先选择的是支付方式,需要选择 None 或者 ない
    • 然后填写姓、名,正常情况下填写英文名就可以了,如果要求一定要使用假名的名字,可以到 这个网站 生成一下自己中文名的假名名字
    • 地址的话,可以到 Google Map 中选择一个自己喜欢的地方,同样城市,邮编,电话等等,就按照个人情况填写即可,我在中间遇到的一个问题是,我复制了日语的街道名字,但是我的手机全局设置的是英文的系统,然后校验说我有非法字符,无奈我只能把地址也全用英文转写了一遍,这里可以参考 Google Map。
    • 最后点击右上方的 Next,就完成了全部的注册。

登录成功之后就会发现 App Store 中的搜索关键字也变成日文了,热门推荐应用也变了就表示可以了。

下一篇再整理一下在日本常用的 App 吧。

另外如果有人需要日区的 Gift Card,也可以到这里 咨询购买。

另外本人开设了 日本生活记录 的新博客,如果想要了解日本的真实生活欢迎访问。


2022-11-24 apple-id , apple-store , app-store , japan , 日本 , 应用市场

一键将本地的照片展示在网页 Photoview 使用

在调研个人的照片托管方案的时候,发现了一款不错的,很简洁的,开源照片展示程序 Photoview。下面就简单的介绍一下。

Photoview 是一款可以在线展示相册的应用,使用 Go 和 TypeScript 编写。

Photoview 可以将本地的文件夹变成一个在线的相册,Photoview 会定期扫描本地的文件,包括照片,视频,然后将起展示在 Web 中,Photoview 还还有一个手机客户端。

Photoview 的特性:

  • 和文件系统同步,自动扫描发现,可以在 [[Samba]],[[FTP]] 甚至可以和 [[NextCloud]] 一起使用
  • 多用户支持
  • 支持共享
  • 可以提取照片中的地理位置信息,并使用 [[Mapbox]] 来在地图中展示照片
  • 支持 Raw
  • EXIF Metadata
  • 共享照片

photoview overview

使用

如果不想自己安装,那么可以通过之前我介绍的 PikaPods 来安装体验一下。注册登录之后,找到 Photoview,然后一件安装即可。

缺点

在使用的过程中,发现唯一不足的是,Photoview 正如其名,只能查看,没有任何上传和编辑的功能。


2022-11-22 photo , docker , photo , photo-management

电子书

本站提供服务

最近文章

  • 2024 年台北之行 去年的时候就得知了海外的大陆人可以通过官方网站申请入台证,从而可以在海外直接入境台湾,所以 4 月份女朋友过来日本之后就通过线上系统申请了入台证,入台证申请通过并付费之后是只有 3 个月有效期的,因为我们申请的比较晚,所以有效期的三个月正好落在了最热的 7,8,9 月份,但考虑到暑假有假期,我们还是决定硬着头皮买了机票。
  • macOS 上的多栏文件管理器 QSpace QSpace 是一个 macOS 上的多窗口平铺的文件管理器,可以作为 Finder 的代替,在 Windows 上曾经用过很长时间的 [[Total Commander]],后来更换到 Linux Mint 之后默认的文件管理器自带多面板,反而是用了很多年 macOS ,才意识到原来我缺一个多窗口,多面板的文件管理器。
  • Dinox 又一款 AI 语音转录笔记 前两天介绍过 [[Voicenotes]],也是一款 AI 转录文字的笔记软件,之前在调查 Voicenotes 的时候就留意到了 Dinox,因为是在小红书留意到的,所以猜测应该是国内的某位独立开发者的作品,整个应用使用起来也比较舒服,但相较于 Voicenotes,Dinox 更偏向于一个手机端的笔记软件,因为他整体的设计中没有将语音作为首选,用户也可以添加文字的笔记,反而在 Voicenotes 中,语音作为了所有笔记的首选,当然 Voicenotes 也可以自己编辑笔记,但是语音是它的核心。
  • Emote 又一款 AI 语音笔记应用 继发现了 Voicenotes 以及 Dinox 之后,又发现一款语音笔记 Emote,相较于前两款应用,Emote 吸引我的就是其实时转录的功能,在用 Voicenotes 的时候时长担心如果应用出现故障,没有把我要录下来的话录制进去,后期怎么办,而 Emote 就解决了这个问题,实时转录的功能恰好作为了一个声音录制的监听。
  • 音流:一款支持 Navidrome 兼容 Subsonic 的跨平台音乐播放器 之前一篇文章介绍了Navidrome,搭建了一个自己在线音乐流媒体库,把我本地通过 [[Syncthing]] 同步的 80 G 音乐导入了。自己也尝试了 Navidrome 官网列出的 Subsonic 兼容客户端 [[substreamer]],以及 macOS 上面的 [[Sonixd]],体验都还不错。但是在了解的过程中又发现了一款中文名叫做「音流」(英文 Stream Music)的应用,初步体验了一下感觉还不错,所以分享出来。