organicCola's House

Organic cola is good for your happiness

0%

PotPlayer

PotPlayer: An excellent video player on Windows.(You can’t find an alternative on MacOS)
you can create A Local File Navigator album playlist in playlist interface. This playlist will auto explor the videos in the folder you set.
However, there are some glitches tingling me when I want to also explore the pictures in the folder.

The official way: what at least you can do

First PotPlayer do support Picture Association in album playlist based on folder out of box.
You can config it here:

1
Prefrences - Association - Set File Extension in File Open Dialog

you can add the pic formats here and it will work.

However, if you want to turn the pic support off(maybe too many pics will disturb you from exploring videos), you have to go to that setting again and delete that pic formats string manually which is almost unbearable.

A tricky way to do it

ini file

potplayer load the ini files (which include the pic extension setting) every time it lauches a instance, if we set it to run it that way.
first we need to config it to use a ini file to store its preferences. You need to check the following setting.

1
Prefrences - General - Store settings into .ini file

you can be navigated to the path of the ini file by clicking the dot button next to it.

duplicate and modify the ini files into different versions

here is the deal: we could change the content of it or just replace it with a file containing waht we want before it lauch the instance. And you can have different instances with different ini at the same time.
PotPlayerMini64_Default.ini
PotPlayerMini64_Pic.ini
in the PotPlayerMini64_Pic.ini, you should find the following content which control the Picture extension string and add the Extension string you want:

1
2
[FileFormat]
Video= jpg jpeg png .....

replace the default ini file with bat before launching a instance

bat is file for batch processing in Windows.

  • This is for default config
    PotPlayerDefault.bat
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @echo off
    setlocal

    rem Setting path variables
    set INI_SOURCE="D:\Apps\PotPlayer\PotPlayerMini64_Default.ini"
    set INI_DEST="D:\Apps\PotPlayer\PotPlayerMini64.ini"
    set EXE_PATH="D:\Apps\PotPlayer\PotPlayerMini64.exe"

    rem copy INI file
    echo copying INI file
    copy /y %INI_SOURCE% %INI_DEST%

    rem Launching PotPlayer
    echo Launching PotPlayer...
    start "" %EXE_PATH%

    echo Done
    endlocal
    exit
  • This is for Picture extension

    You can make a shortcut link toi PotPlayerMini64.exe, and set a different icon for this instance to indicate this one is with a picture extension config.
    PotPlayerPic.bat

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @echo off
    setlocal

    rem Setting path variables
    set INI_SOURCE="D:\Apps\PotPlayer\PotPlayerMini64_Pic.ini"
    set INI_DEST="D:\Apps\PotPlayer\PotPlayerMini64.ini"
    set SHORTCUT_PATH="D:\Apps\PotPlayer\PotPlayerMini64_Pic.lnk"

    rem copy INI file
    echo copyingv INI file
    copy /y %INI_SOURCE% %INI_DEST%

    rem Launching PotPlayer
    echo Launching PotPlayer...
    start "" %SHORTCUT_PATH%

    echo Done
    endlocal
    exit

Done

Now you should be able to click bat to launch a diffeent instance with its corresponding config

What’s more

You could pack the bat file into a executable file, and this allow you to add a quick launch icon on the taskbar if you want to. Which is more convenient to use.

马丁 · 海德格尔
孙周兴 译
收录于 上海三联书店 《海德格尔选集》孙周兴 选编

时间和空间中的⼀切距离都在缩⼩。过去⼈们要以数周和数⽉的时间才能达到的地⽅,现在坐上飞机⼀夜之间就可以到了。早先⼈们要在数年之后才能了解到的或者根本就了解不到的事情,现在通过⽆线电随时就可以⽴即知道了。植物的萌芽和⽣长,原先完全在季节的轮换中遮蔽着,现在⼈们却可以通过电影在⼀分钟内把它展⽰出来。电影显⽰出各种最古⽼⽂化的那些遥远遗址,仿佛它们眼下就在今天的街道交通中。此外,电影同时展⽰出摄影机以及操作⼈员,由此还证实了它所展⽰的东西。电视机达到了对⼀切可能的遥远距离的消除过程的极顶。电视机很快就会渗透并且控制整个交往联系机关。

⼈类在最短时间内⾛过了最漫长的路程。⼈类把最⼤的距离抛在后⾯,从⽽以最⼩的距离把⼀切都带到⾃⼰⾯前。

不过,这种对⼀切距离的匆忙消除并不带来任何切近;因为切近并不在于距离的微⼩。在路程上离我们最近的东西,通过电影的图象,通过收⾳机的声响,也可能离我们最远。在路程上⼗分疏远的东西,也可能离我们最近。⼩的距离并不就是切近。⼤的距离也还不是疏远。

如果在我们把最长的路程缩短为最短的间距之后,切近也还付诸阙如,那么,到底什么是切近呢?如果我们对距离的不断消除甚⾄拒绝了切近的出现,那么,究竟什么是切近呢?如果与切近的缺失⼀道,连疏远也杳⽆影踪,那么,到底什么是切近呢?

如果通过对⼤距离的消除,⼀切都变得同样地疏远同样地切近,那么,这⾥到底发⽣了什么事情呢?在这种同样中,⼀切既不远也不近,变得仿佛没有距离了 —— 这种千篇⼀律的同样究竟是什么呢?

⼀切都被冲⼊这种千篇⼀律的⽆距离状态之中,都搅在⼀起了。那⼜怎么样呢?难道把⼀切都推⼊⽆距离状态中,不⽐把⼀切都搞得⽀离破碎更可怕吗?

⼈类关注着原⼦弹的爆炸可能会带来的东西。⼈类没有看到久已到来并且久已发⽣的事情,也就是 —— 只还作为它最后的喷出物 —— 原⼦弹及其爆炸从⾃⾝喷射出来的东西,更不⽤说氢弹了,因为从最⼴⼤的可能性来看,氢弹的引爆可能就⾜以毁灭地球上的⼀切⽣命。如果令⼈惊恐的东西已经发⽣,那么,这种⽆助的畏惧还在指望着什么呢?

令⼈惊恐者( das Entsetzende )就是那个东西,它使⼀切存在者从它原先的本质中脱离出来。这个令⼈惊恐者是什么呢?它以万物如何在场的⽅式⾃⾏显⽰并且⾃⾏遮蔽,也即以这样的⽅式:尽管有种种对距离的克服,存在者的切近却仍然杳⽆影踪。

切近( Nähe )的情形究竟如何呢?我们如何才能经验到它的本质呢?表⾯上看来,我们是不能径直发现切近的。⽽不如说,要做到这⼀点,我们就要去追踪在切近中存在的东西。在切近中存在的东西,我们通常称之为物( Ding )。但什么是物呢?迄今为⽌,对于物之为物,就如同对于切近⼀样,⼈们还极少作过思索。壶是⼀个物。什么是壶呢?我们说:是⼀个器⽫;它把其他东西容纳于⾃⾝。在壶中起着容纳作⽤的是壶底和壶壁。这个容器本⾝⼜有⼀个把⼿,可供⼈们把握。作为器⽫,壶是某种⾃⽴的东西。这种⾃⽴标明壶是某种独⽴的东西。作为⼀个独⽴之物的⾃⽴( Selbststand ),壶区别于⼀个对象( Gegenstand )。如若我们把⼀个独⽴之物摆在我们⾯前,⽆论是在直接的感知中,还是在回忆性的想象中,这个独⽴之物就可能成为对象。然⽽,物之物性因素既不在于它是被表象的对象,根本上也不能从对象之对象性的⾓度来加以规定。

不论我们是否对壶进⾏表象,壶都保持为⼀个器⽫。作为器⽫,壶⽴于⾃⾝中。但说这个容器⽴于⾃⾝中,这是什么意思呢?器⽫的这种⾃⽴已经把壶规定为⼀物了么?实际上,壶作为器⽫⽽站⽴,只是因为它已经被带向⼀种站⽴( Stehen )了。但这是已经发⽣的事情,⽽且是通过⼀种摆置( Stellen )⽽发⽣的,也就是通过置造( Herstellen )发⽣的。陶匠⽤专门为此选择和准备好的泥⼟制造出这个陶制的壶。壶由泥⼟做成。通过壶由以构成的东西,壶也能站⽴于⼤地上,或是直接地,或是间接地通过桌凳的媒介。通过这样⼀种置造⽽构成的东西,就是⾃⽴的东西。如果我们把壶看作被置造的器⽫,那么,表⾯看来,我们就是把它把握为⼀个物,⽽绝没有把它把握为⼀个纯粹的对象。

或者,即使是现在,我们始终也是还把壶当作⼀个对象了么?确实如此。 虽然壶不再仅仅被视为纯粹表象的对象,但对于这种表象来说,壶却还是⼀个对象,是由⼀种置造摆到我们⾯前并且置放于我们对⾯的对象。看起来,⾃⽴乃是壶之为物的标志。⽽事实上,我们是从置造⽅⾯来设想这种⾃⽴的。这种⾃⽴乃是置造的⽬的所在。但即使如此,这种⾃⽴ ,始终还是从对象的角度被思考的,尽管被置造者的对立(Gegenstehen)不再基于单纯的表象。然而,从对象和自立的对象性出发,没有⼀条道路是通向物之物性因素的。

什么是物之物性呢?什么是物⾃⾝呢?只有当我们的思想⾸先达到了物之为物时,我们才能达到物⾃⾝。

壶是⼀个作为器⽫的物。虽然这个起容纳作⽤的东西需要⼀种置造,但陶匠带来的被置造状态决不构成壶之为壶所特有的东西。壶之为器⽫,并不是因为被置造出来了;相反,壶必须被置造出来,是因为它是这种器⽫。

的确,置造使壶进⼊其本⼰因素之中。但壶之本质的这种本⼰因素决不是由置造所制作出来的。从制作过程中释放出来后,⾃为地⽴⾝的壶已然集⾃⾝于容纳作⽤。在置造过程中,壶当然必须预先向置造者显⽰出它的外观( Aussehen )。但这种⾃⾏显⽰者,即外观( ε í δος [爱多斯], í δέα [相]),只是从⼀个⾓度标志出这把壶,也就是从这个器⽫作为有待置造者与制造者相对⽴的⾓度标志出这把壶。

可是,具有这种外观的器⽫作为这把壶是什么,作为这种壶-物( Krug-Ding )的壶是什么,如何是?这是决不能通过对外观即 í δέα [相]的观察得到经验的,更不消说由此得到合乎实事的思考了。因此之故,柏拉图这位从外观⽅⾯来表象在场者之在场状态的思想家,并没有思考物之本质,亚⾥⼠多德以及所有后来的思想家也不出其右。⽽⽏宁说,柏拉图把⼀切在场者经验为置造之对象了,⽽且这对于后世来说是决定性的。如若不说 “ 对象 ” ,我们可更准确地说: “ 站出者 ” ( Herstand )在站出者( Her-Stand )的全部本质中,起⽀配作⽤的是⼀种双重的站⽴( Her-Stehen ):⼀⽅⾯,是 “ 源出于 ……” 意义上的站出,⽆论这是⼀种⾃⾏⽣产还是⼀种被置造;另⼀⽅⾯,站出的意思是被⽣产者站出来⽽站⼊已然在场的东西的⽆蔽状态之中。

然⽽,对站出者和对⽴者意义上的在场者的⼀切表象都决不能达到物之为物。壶之物性因素在于:它作为⼀个容器⽽存在。当我们装满⼀把壶时,我们发觉这个器⽫的容纳作⽤。显然,是壶底和壶壁承担着容纳作⽤。但别忙!当我们装满⼀壶酒时,难道我们是在把酒注⼊壶壁和壶底么?我们顶多能说,我们把酒倒在壶壁之间、壶底之上。壶壁和壶底当然是这个器⽫中不透⽔的部分。不过,这个不透⽔的部分也还不是起容纳作⽤的东西。当我们灌满壶时,液体就在充灌时流⼊虚空的壶中。这种虚空( die Leere )乃是器⽫的具有容纳作⽤的东西。壶的虚空,壶的这种虚⽆( Nichts ),乃是壶作为有所容纳的器⽫之所是。

可是,壶其实是由壁和底构成的。壶通过这些构成物⽽站⽴起来。⼀个站⽴不住的壶会是什么呢?⾄少是⼀个做坏了的壶;可见总还是⼀把壶,也就是这样⼀个壶,它虽然容纳,但却不断地倾倒下来⽽让所容纳的东西流出。然⽽,只有⼀个器⽫才可能流空。

构成壶并且使壶得以站⽴的壁和底,并不是真正起容纳作⽤的东西。⽽如果真正起容纳作⽤的东西在于壶之虚空,那么,在转盘上塑造成壶壁和壶底的陶匠就并没有真正地制作这把壶。他只是塑造陶⼟⽽已。不对 —— 他只是塑造虚空⽽已。为这种虚空,进⼊虚空之中并且从虚空⽽来,他把陶⼟塑造成形体。⾸先⽽且始终地,陶匠把握到不可把捉的虚空,并且把它置造出来,使之成为有容纳作⽤的东西⽽进⼊器⽫形态中。壶之虚空决定着任何置造动作。 器⽫的物性因素绝不在于它由以构成的材料,⽽在于起容纳作⽤的虚空。

然则壶果真是虚空的吗?

物理科学让我们确信,壶⾥⾯充满着空⽓以及所有空⽓混合物。当我们诉诸壶之空虚,以便规定在壶中起容纳作⽤的东西时,我们便让⾃⼰为⼀种半诗性的考察⽅式所迷惑了。

可是,⼀旦我们勉强以科学的⽅式来探究现实的壶的现实性,就有⼀种不同的实情显⽰出来。我们把酒注⼊壶中,就只是排去了先前充满壶的空⽓,并且代之以⼀种液体。从科学的⾓度来看,把壶充满也就是把⼀种充满状态换成另⼀种充满状态。

这些物理学上的说法是正确的。科学通过这些说明来表象某种现实之物,以之为客观⽬标。但是 —— 这种现实之物就是这把壶吗?不是的。 科学始终只能针对它的表象⽅式预先已经允许的东西,亦即对它来说可能的对象。

⼈们说,科学的知识是强制性的。的确如此。但它的强制⼒在哪⾥呢?在我们眼下的情形⾥,就在于那种强制,它迫使我们放弃盛满酒的壶,⽽代之以其中可盛液体的空⽳。科学使壶这个物( Krug-Ding )变成某种虚⽆的东西,因为它不允许物成为决定性的现实之物。

科学知识在它⾃⼰的区域⾥,亦即在对象区域⾥,是强制性的。早在原⼦弹爆炸之前,科学知识就已经把物之为物消灭掉了。 原⼦弹的爆炸,只不过是对早已发⽣的物之消灭过程的所有粗暴证实中最粗暴的证实: 它证实了这样⼀回事情,即物之为始终是虚⽆的。物之物性始终被遮蔽、被遗忘了。物之本质从未达乎显露,也即从未得到表达。这就是我们所讲的对物之为物的消灭过程的意思。这种消灭是⼗分可怕的,因为它在⾃⾝前⾯具有两重的蒙蔽:其⼀是这样⼀种看法,即认为科学先于其他一切经验,击中了现实之物的现实性;其二是这样一种假象,似乎尽管我们对现实之物作了科学的研究,但物依然可能是物,而这是有前提的,其前提就是:物根本上向来已经是现⾝成其本质的物了。但是,倘若物向来已经作为在其物性中的物显⽰出⾃⾝,那么,物之物性早就该⼤⽩于天下了。这样的话,它早就该要求思想去思它了。然⽽,事实上,物之为物依然受到了阻挡,依然是虚⽆的,⽽且在此意义上依然被消灭掉了。这种情形已经发⽣过,⽽且还在发⽣着,它如此根本地发⽣着,以⾄于不仅物不再被允许成为物,⽽且物根本上还决不能作为物向思想显现出来了。

物之为物不再显现出来,其原因何在呢?仅仅是⼈们耽搁了对物之为物的表象么?⼈只可能耽搁那种已经被指派给他的东西。不论以何种⽅式,⼈只能表象那个东西,这个东西预先已经从⾃⾝⽽来⾃⾏澄明、并且已经在它共同带来的光亮中向⼈显⽰出来了。

那么,物之为物究竟是什么?其本质尚未能显现出来的物究竟是什么呢?

难道物还从未完全进⼊那个切近处,以⾄于⼈还不能充分地学会对物之为物的关注么?什么是切近呢?我们已经发过此问。为了经验这种切近,我们已经探究过切近处的壶。

壶之壶性因素基于何处?前⾯我们突然中断了对壶的考察,⽽且是在那样⼀个时刻,当时出现了⼀个咄咄逼⼈的假象:仿佛关于现实的壶的现实性,科学能够给予我们⼀种启发。我们已经把这个器⽫的作⽤,它的容纳作⽤,即空虚,表象为⼀个充满了空⽓的空⽳。后者其实就是虚空,⽽从物理学上来看,却并⾮壶的虚空。我们并没有让壶的虚空成为它⾃⼰的虚空。我们并没有注意这个器⽫中起容纳作⽤的东西。我们未曾考虑过,这种容纳作⽤本⾝是如何成其本质的。因此之故,我们势必也就忽略了壶所容纳的东西。对于科学的表象来说,酒变成了⼀种纯粹的液体,这种液体⼜成了物质的⼀种⼀般的、处处都可能出现的固态。我们没有去思索,壶容纳什么以及它如何容纳。

壶之虚空如何容纳呢?它通过承受被注⼊的东西⽽起容纳作⽤。它也通过保持它所承受的东西⽽起容纳作⽤。虚空以双重⽅式来容纳,即:承受和保持。因此 “ 容纳 ” ( fassen )⼀词是有歧义的。但 对倾注的承受,与对倾注的保持,却是共属⼀体的。⽽它们的统⼀性是由倾倒( Ausgießen )来决定的,壶之为壶就取决于这种倾倒。虚空的双重容纳就在于这种倾倒。作为这种倾倒,容纳才真正如其所是。从壶⾥倾倒出来,就是馈赠。在倾注之馈赠中,这个器⽫的容纳作⽤才得以成其本质。容纳需要作为容纳者的虚空。起容纳作⽤的虚空的本质聚集于馈赠中。但馈赠⽐单纯的斟出更为丰富。使壶成其为壶的馈赠聚集于双重容纳之中,⽽且聚集于倾注之中。我们把群⼭之聚集称为⼭脉。同样地,我们把⼊于倾注的双重容纳的聚集 —— 这种聚集作为集合才构成馈赠的全部本质 —— 称为赠品。 [1] 壶之壶性在倾注之馈品中成其本质。连空虚的壶也从这种赠品⽽来保持其本质,尽管这个空虚的壶并不允许斟出。但这种不允许为壶所特有,⽽且只为壶所特有。与之相反,⼀把镰⼑,或者⼀把锤⼦,在此就⽆能为⼒了,做不到对这种馈赠的放弃。

倾注之馈赠可以是⼀种饮料。它给出⽔和酒供我们饮⽤。

在赠品之⽔中有泉。在泉中有岩⽯,在岩⽯中有⼤地的浑然蛰伏。这⼤地⼜承受着天空的⾬露。在泉⽔中,天空与⼤地联姻。在酒中也有这种联姻。酒由葡萄的果实酿成。果实由⼤地的滋养与天空的阳光所⽟成。在⽔之赠品中,在酒之赠品中,总是栖留着天空与⼤地。⽽倾注之赠品乃是壶之壶性。故在壶之本质中,总是栖留着天空与⼤地。

倾注之赠品乃是终有⼀死的⼈的饮料。它解⼈之渴,提神解乏,活跃交游。但壶之赠品时⽽也⽤于敬神献祭。如若倾注是为了祭神,那它就不是⽌渴的东西了。它满⾜盛⼤庆典的欢庆。这时候,倾注之赠品既不是在酒店⾥被赠予的,也不是终有⼀死的⼈的⼀种饮料。倾注是奉献给不朽诸神的祭酒。作为祭洒的倾注之赠品乃是真正的赠品。在奉献的祭酒之馈赠中,倾注的壶才作为馈赠的赠品⽽成其本质。奉献的祭酒乃是 “ 倾注 ” ⼀词的本意,即:捐赠( Spende )和牺牲( Opfer )。 “ 倾注 ” ( Guß )、 “ 流注、倾注 ” ( gießen )在希腊⽂中叫作 χέειν ,在印度⽇⽿曼语系中叫作 ghu 。其意思就是牺牲( opfern )。在它得到本质性的完成之际,这种倾注才充分地得到思考,并且真正地被表达为:捐赠、牺牲,因⽽也是馈赠。惟因此之故,倾注的本质⼀旦萎顿,就可能变成为单纯的斟⼊和斟出,直到最后在通常的酒馆⾥腐烂掉。倾注并不是单纯的倒进倒出。

在作为饮料的倾注之赠品中,终有⼀死的⼈以⾃⼰的⽅式逗留着。在作为祭酒的倾注之赠品中,诸神以⾃⼰的⽅式逗留着,它们复⼜接收作为捐赠之赠品的馈赠之赠品。在倾注之赠品中,各各不同地逗留着终有⼀死的⼈和诸神。在倾注之赠品中逗留着⼤地和天空。在倾注之赠品中,同时逗留着⼤地与天空、诸神与终有⼀死者。这四⽅( Vier )是共属⼀体的,本就是统⼀的。它们先于⼀切在场者⽽出现,已经被卷⼊⼀个惟⼀的四重整体( Geviert )中了。

在倾注之赠品中逗留着四⽅之纯⼀性( die Einfalt der Vier )。

倾注之赠品乃是赠品,因为它让⼤地与天空、诸神与终有⼀死者栖留。 [2] 不过,栖留( Verweilen )现在不再是某个现成的东西的单纯坚持。栖留有所居有( Verweilen ereignet )。它把四⽅带⼊它们的本⼰要素的光亮之中。从其纯⼀性⽽来,这四⽅相互信赖。在这种相互依存中统⼀起来,这四⽅乃是⽆蔽的。倾注之赠品让四⽅之四重整体的纯⼀性得以栖留。⽽在赠品中,壶之为壶成其本质。 赠品聚集那属于馈赠的东西:双重的容纳、容纳者、虚空和作为捐赠的倾倒。 在赠品中被聚集起来的东西集 ⾝于这 ⼀回事,即在有所居有 际让四重整体栖留。这种 化的质朴聚集乃是壶的本质因素。我们德语⾥⽤⼀个古⽼的词语来命名这种聚集。这个古⽼的词语叫做: thing [物]。壶的本质是那种使纯⼀的四重整体⼊于⼀种逗留的有所馈赠的纯粹聚集。壶成其本质为⼀物。壶乃是作为⼀物的壶。但物如何成其本质呢?物物化。物化聚集。 [3] 在居有着四重整体之际,物化聚集着四重整体的逗留( Weile ),使之⼊于⼀个当下栖留的东西( ein je Weiliges ),即:⼊于此⼀物,⼊于彼⼀物。

对于如此这般得到经验和思考的壶之本质,我们给予 “ 物 ” ( Ding )这个名称。在这⾥,我们是根据已得思考的物之本质来思考这个名称的,也就是根据作为聚集着-居有着的四重整体之栖留来思考这个名称的。但同时,我们也回忆起古⾼地德语中的 thing ⼀词。这种语⾔史的说明容易诱使我们误解我们现在对物之本质的思考的⽅式。看起来,仿佛我们现在所思的物之本质是从偶然抓住的 thing 这个古⾼地德语的名称中捉摸出来的。⼈们会⽣出⼀种疑⼼,怀疑我们现在所尝试的对物之本质的经验乃是基于⼀种词源学游戏的随⼼所欲。有⼀种意见凝固下来,并且已经流⾏开来,这种意见认为:我们在此并不思索本质之实情,⽽只是在玩弄词典。

然⽽,实际情况恰恰与上述担⼼相反。确实,古⾼地德语中的 thing ⼀词意味着聚集,⽽且尤其是为了商讨⼀件所谈论的事情、⼀种争执的聚集。因此,古德语词语 thing 和 dinc 就成了表⽰事情( Angelegenheit )的名称;它们表⽰⼈们以某种⽅式予以关⼼、与⼈相关涉的⼀切东西,因⽽也是处于⾔谈中的⼀切东西。处于⾔谈中的东西,罗马⼈称之为 res ;在希腊语中, ειρω ( ρητός , ρήτρα , ρή µ α )的意思是:谈论某事,讨论某事。 res publica 的意思并不是国家,⽽是显然关涉到每个公民、 “ 拥有 ” 每个公民并且因此被公开讨论的东西。

只是因为 res 意味着这种与⼈相关涉的事情,所以才能产⽣出 res adversae 和 res secundae 这样的词语合成;前者是指对⼈不利的事情,后者是指对⼈有利的事情。虽然各种词典正确地把 res adversae 译为恶运,把 res secundae 译为好运;但词典极少能表达⼈们经过深思⽽说出的这些词语的意思。因此,实际上,在这⾥以及在其他情形下,我们的思想并不乞灵于词源学,相反地,词源学始终不得不去思索这些词语作为话语未经展开地指称的东西的本质实情。

罗马词语 res 表⽰与⼈相关涉的东西,事情、争执、事件。罗马⼈也⽤ causa ⼀词来表⽰这个意思。 causa ⼀词真正的和起先的意思绝不是 “ 原因 ” ; causa 指的是事件( Fall ),因⽽也是指这样⼀种情况,即某事发⽣并且到时候了。只是因为 causa ⼏乎与 res 同义,都有 “ 事件 ” 的意思,所以, causa 这个词后来才获得了原因的含义,即⼀种作⽤的因果性的意思。古德语词语 thing 和 dinc ,由于它有聚集之义,亦即为商讨某个事情的聚集,才最适合于被⽤来恰当地翻译罗马词语 res ,即关涉者( das Angehende )。但从罗马语的那个与 res 相应的词语中,从具有事件和事情之意义的 causa ⼀词中,⼜发展出罗曼语的 la cosa 和法语的 la chose ;那就是我们所说的 “ 物 ” ( das Ding )。在英语中, thing ⼀词还保留着罗马词语 res 的丰富的命名⼒:英语中所讲的 “ 他知道他的事情 ” ( he knows his things ),意思就是说,他明⽩他的 “ 事情 ” ( Sachen ),知道与他相关涉的事情;英语中讲的 “ 他知道如何处理事情 ” ( he knows how to handle things ),意思是说,他知道必须如何去应付事情,也就是应付各个具体事情的症结所在; “ 那是⼀件⼤事 ” ( thats a great thing ),意思是说,那真是⼀件伟⼤的(美好的、巨⼤的、壮丽的)事情,亦就是⼀件出于⾃⾝、与⼈相关涉的事情。

不过,在这⾥,关键的东西绝不是我们上⾯简略提及的诸如 res 、 Ding 、 causa 、 cosa 以及 chose 、 thing 等词语的语义历史,⽽是某种完全不同的、迄今根本尚未得到思索的东西。罗马词语 res 指的是以某种⽅式与⼈相关涉的东西。这种相关涉的东西乃是 res 的实在。 res 的实在性( realitas )在罗马⼈那⾥被经验为关涉( Angang )。然⽽,罗马⼈从没有恰当地思考他们如此这般地经验到的东西的本质。⽽⽏宁说,罗马⼈由于采纳了晚期希腊哲学,就在希腊的 όν [存在者]意义上来表象 res 的 realitas [实在性]。 όν [存在者],即拉丁⽂中的 ens ,意味着站出者( Herstand )意义上的在场者。 res 变成了 ens ,变成了被置造者和被表象者意义上的在场者。罗马⼈原始地经验到的 res (即关涉)的独特的实在性( realitas ),作为在场者的本质,始终被埋没了。相反地, res 这个名称在后世,特别是在中世纪,被⽤来表⽰每⼀个 ens qua ens [作为存在者的存在者],即每⼀个以任何⽅式在场的东西,即便它与 ens rationis [理智存在者]⼀样仅仅在表象中站出来和在场。与 res ⼀词相同的情况也发⽣在 dinc 这个相应的名称上;因为 dinc 指的是以⽆论某种⽅式存在的任何东西。因此,艾克哈特⼤师既⽤ dinc 这个词来表⽰上帝,⼜⽤这个词来表⽰⼼灵。在他看来,上帝是 “ ⾄⾼⽆上的物 ” ( hoechste und oberste dinc ),⼼灵是⼀个 “ 伟⼤的物 ” ( groz dinc )。这位思想⼤师绝不是想说,上帝和⼼灵都是像⼀块⽯头⼀样的东西,即某个质料性的对象;在这⾥, dinc 乃是⼀个表⽰某种根本存在的东西的细⼼⽽审慎的名称。所以,艾克哈特⼤师借⽤狄奥尼修斯 · 阿雷欧帕杰塔 [4] 的⼀句话,说: diu minne ist der natur, daz si den menschenwandelt in die dinc, die er minnet [爱具有这样⼀种本性,它改变⼈,使⼈进⼊他所爱之物中]。

因为在西⽅形⽽上学的⽤语中,物( Ding )⼀词指的是根本上以某种⽅式存在的某种东西,所以, “ 物 ” ( Ding )这个名称的含义的变化,就与那种对存在者的解释的变化亦步亦趋。康德以⼀种与艾克哈特⼤师相同的⽅式来谈论物,并且以此名称来表⽰存在着的某物。但是,在康德那⾥,存在者变成了表象的对象,⽽表象是在⼈类⾃我的⾃⾝意识中运⾏的。在康德那⾥,⾃在之物( das Ding an sich )意味着:⾃在之对象。对康德来说, “ ⾃在 ” ( An-sich )这个特征的意思是:对象本⾝就是对象,⽽没有与⼈类表象发⽣关系,亦即没有那种⾸先使对象⽴于表象⾯前的 “ 对⽴ ” ( dasGegen )。严格地按照康德的⽅式来看, “ ⾃在之物 ” 意味着⼀个对象,这个对象对我们来说并不是对象,因为它是在没有⼀种可能的对⽴的情况下站⽴的,也就是说,对于与之相对的⼈类表象来说,它并不是⼀个对象。

然⽽,⽆论是哲学所使⽤的 “ 物 ” ( Ding )这个名称的早已被⽤滥了的⼀般含义,还是 “ 物 ” ( thing )这个词语的古⾼地德语的含义,都丝毫不能帮助我们去经验、并且充分地思考我们现在关于壶之本质所说的东西的本质来源。实际情形恰好 相反,从 thing ⼀词的 ⽼⽤法中得来的⼀个含义要 ,也即 “ 聚集 ”versammeln ,倒是道出了我们前⾯所思的壶的本质。

壶是⼀个物,这既不是在罗马⼈所讲的 res 的意义上来说的,也不是在中世纪⼈们所表象的 ens 的意义上来说的,更不是在现代⼈所表象的对象意义上来说的。 壶是⼀个物,因为它物化。从这种物之物化( Dingen des Dinges )出发,壶这种在场者的在场才⾸先得以⾃⾏发⽣,并且得以⾃⾏规定。

今天,⼀切在场者都同样地近,⼜同样地远。⽆间距的东西占了上风。但是,所有对距离的缩短和消除都没有带来任何切近。什么是切近( die Nähe )呢?为了发现切近之本质,我们已经思索过切近的壶。我们已经寻找过切近之本质,并且已经发现了作为物的壶的本质。⽽在这种发现中,我们同时也体察到切近之本质。 物物化( Das Ding dingt )。物化之际,物居留⼤地和天空,诸神和终有⼀死者;居留之际,物使在它们的疏远中的四⽅相互趋近,这⼀带近即是近化( das Nähren )。近化乃切近的本质。切近使疏远近化( Nähe nähert das Ferne ),并且是作为疏远来近化。切近保持疏远。在保持疏远之际,切近在其近化中成其本质。如此这般近化之际,切近遮蔽⾃⾝并且按其⽅式保持为最切近者。

物并不是 “ 在 ” 切近 “ 之中 ” ,仿佛这种切近是⼀个容器似的。切近在作为物之物化的近化中运作。

物化之际,物居留统⼀的四⽅,即⼤地与天空,诸神与终有⼀死者,让它们居留于在它们从⾃⾝⽽来统⼀的四重整体的纯⼀性中。

⼤地( die Erde )承受筑造,滋养果实,蕴藏着⽔流和岩⽯,庇护着植物和动物。

当我们说到⼤地,我们同时就已经出于 “ 四⽅ ” 之纯⼀性⽽想到了其他三⽅。

天空( der Himmel )是⽇⽉运⾏,群星闪烁,是周⽽复始的季节,是昼之光明和隐晦,夜之暗沉和启明,是节⽇的温寒,是⽩云的飘忽和天穹的湛蓝深远。

当我们说到天空时,我们同时就已经出于 “ 四⽅ ” 之纯⼀性⽽想到了其他三⽅。

诸神( die Göttlichen )是暗⽰着的神性使者。从对神性的隐⽽不显的⽀配作⽤中,神显现⽽成其本质。神由此与在场者同伍。

当我们说到诸神,我们同时就出于 “ 四⽅ ” 之纯⼀性⽽⼀起想到了其他三⽅。

终有⼀死者( die Sterblichen )乃是⼈类。⼈类之所以被叫做终有⼀死者,是因为他们能够赴死。赴死( Sterben )意味着:有能⼒承担作为死亡的死亡。只有⼈赴死。动物只是消亡⽽已。⽆论在它之前还是在它之后,动物都不具有作为死亡的死亡。死亡乃是⽆之圣殿( der Schrein des Nichts );⽆在所有⾓度看都不是某种单纯的存在者,但它依然现⾝出场,甚⾄作为存在本⾝之神秘( Geheimnis )⽽现⾝出场。作为⽆之圣殿,死亡庇护存在之本质现⾝于⾃⾝之内。作为⽆之圣殿,死亡乃是存在之庇所( das Gebirg des Seins )。现在,我们把终有⼀死者称为终有⼀死者 —— 并不是因为他们在尘世的⽣命会结束,⽽是因为他们有能⼒承担作为死亡的死亡。终有⼀死者是其所是,作为终有⼀死者⽽现⾝于存在之庇所中。终有⼀死者乃是与存在之为存在的现⾝着的关系。

与之相反,形⽽上学则把⼈表象为 animal [动物],表象为⽣物。即使 ratio [理性]完全⽀配了 animalitas [动物性],⼈之存在还是由⽣命和体验来规定的。理性的⽣物必须⾸先变成终有⼀死者。

当我们说到终有⼀死者,我们就出于四⽅之纯⼀性⽽⼀起想到其他三⽅。

⼤地和天空、诸神和终有⼀死者,这四⽅从⾃⾝⽽来统⼀起来,出于统⼀的四重整体的纯⼀性⽽共属⼀体。四⽅中的每⼀⽅都以它⾃⼰的⽅式映射着其余三⽅的现⾝本质。同时,每⼀⽅⼜都以它⾃⼰的⽅式映射⾃⾝,进⼊它在四⽅的纯⼀性之内的本⼰之中。这种映射 ( Spiegeln )并不是对某个摹本的描写。映射在照亮四⽅中的每⼀⽅之际,居有它们本⼰的现⾝本质,⽽使之进⼊纯⼀的相互转让( Vereignung )之中。以这种居有着-照亮着的⽅式映射之际,四⽅中的每⼀⽅都与其他各⽅相互游戏。这种居有着的映射把四⽅中的每⼀⽅都开放⼊它的本⼰之中,但⼜把这些⾃由的东西维系为它们的本质性的相互并存的纯⼀性。

这种进⼊⾃由域的维系着的映射乃是游戏( Spiel ),这种游戏出于转让过程的合抱起来的⽀持⽽使四⽅中的每⼀⽅都与其他每⼀⽅相互信赖。四⽅中没有哪⼀⽅会固执于它⾃⼰的游离开来的独特性。⽽⽏宁说,四⽅中的每⼀⽅都在它们的转让之内,为进⼊某个本⼰⽽失去本⼰。 [5] 这样⼀种失去本⼰的转让就是四重整体的映射游戏( Spiegel-Spiel )。由 , ⼀ 。 天、地、神、⼈ [6] 之纯⼀性的居有着的映射游戏,我们称之为世界( Welt )。世界通过世界化⽽成其本质。这就是说:世界之世界化( das Welten von Welt )既不能通过某个它者来说明,也不能根据某个它者来论证。之所以不能说明和论证,并不是由于我们⼈类的思想⽆能于这样⼀种说明和论证。⽽不如说,世界之世界化之所以不可说明和论证,是因为诸如原因和根据之类的东西是与世界之世界化格格不⼊的。⼀旦⼈类的认识在这⾥要求⼀种说明,它就没有超越世界之本质,⽽是落到世界之本质下⾯了。⼈类的说明愿望根本就达不到世界化之纯⼀性的质朴要素中。当⼈们把统⼀的四⽅仅仅表象为个别的现实之物,即可以相互论证和说明的现实之物,这时候,统⼀的四⽅在它们的本质中早已被扼杀了。

四重整体之统⼀性乃是四化( Vierung )。但这种四化决不是这样进⾏的,即:它包括四⽅并且作为这样⼀个包括者⽽事后附加到四⽅上。四化同样也并不限于这样⼀回事情,即:四⽅,⼀度现成的四⽅,只是相互并列⽽已。

四化作为纯⼀地相互信赖者的有所居有的映射游戏⽽成其本质。四化作为世界之世界化⽽成其本质。世界的映射游戏乃是居有之圆舞( der Reigen des Ereignens )。因此,这种圆舞也并不只是像⼀个环那样包括着四⽅。这种圆舞乃是起环绕作⽤的圆环( Ring ),在嵌合之际起⽀配作⽤,因为它作为映射⽽游戏。它在居有之际照亮四⽅,并使四⽅进⼊它们的纯⼀性的光芒之中。这个圆环在闪烁之际使四⽅处处敞开⽽归本于它们的本质之谜。世界的如此这般环绕着的映射游戏的被聚集起来的本质乃是环化( das Gering ) [7] 。在映射着游戏着的圆环的环化( das Gering ) [8] 中,四⽅依偎在⼀起,得以进⼊它们统⼀的、但⼜向来属⼰的本质之中。如此柔和地,它们顺从地世界化⽽嵌合世界。

柔和地、柔顺的、柔韧地、顺从地、轻巧地,在我们古德语中叫做 “ring” 和 “gering” 。世界化的世界的映射游戏,作为圆环之环化,强⾏释放( entringt ) [9] 统⼀的四⽅进⼊本⼰的顺从之中,进⼊它们的本质的圆环之中。从圆环之环化的映射游戏⽽来,物之物化得以发⽣。

物居留四重整体。物物化世界( Das Ding dingt Welt )。每⼀个物都居留四重整体,使之⼊于世界之纯⼀性的某个向来逗留之物( ein je Weiliges )中。

如果我们让物化中的物从世界化的世界⽽来成其本质,那么,我们便思及物之为物了。如此这般思念之际,我们⼀任⾃⾝为物的世界化本质所关涉了。如此思来,我们就为物之为物所召唤了。在词语的严格意义上讲来,我们乃是受限制者( die Be-Dingten )。 [10] 我们已经把⼀切⽆限制者的狂妄抛弃了。

如果我们思物之为物,那我们就是要保护物之本质,使之进⼊它由以现⾝出场的那个领域之中。物化乃是世界之近化( Nähern ) [11] 。 近化乃是切近之本质。只要我们保护着物之为物,我们便居住于切近中。切近之近化乃是世界之映射游戏的真正的和惟⼀的维度。

在对距离的种种消除活动中,切近付诸阙如。切近之缺失已经使⽆间距的东西占居了统治地位。在切近之缺失中,我们上⾯所讲意义上的物作为物被消灭掉了。但究竟物之为物何时以及如何存在呢?我们置⾝于⽆间距的东西的统治下,仍有此⼀问。

物之为物何时以及如何到来?物之为物并⾮通过⼈的所作所为⽽到来。不过,若没有终有⼀死的⼈的留神关注,物之为物也不会到来。达到这种关注的第⼀步,乃是⼀个返回步伐( Schritt zurück ),即从⼀味表象性的、亦即说明性的思想返回来,回到思念之思( das andenkende Denken )。

然⽽,从⼀种思想回到另⼀种思想,这种返回步伐绝不只是态度的转变。它决不可能是这样⼀种态度的转变,原因仅仅在于:⼀切态度连同它们转变⽅式,都拘执于表象性思想的区域中。的确,这个返回步伐离开了纯粹态度的区域。这个返回步伐寓于⼀种应合( Entsprechen ),这种应合 —— 在世界之本质( Weltwesen )中为这种本质所召唤 —— 在它⾃⾝之内应答着世界之本质。对于物之为物的到达,⼀种纯然的态度之转变⽆能为⼒,正如今天作为对象⽴⾝于⽆间距者中的⼀切东西都不能简单地转变为物。如果我们仅只避开对象,仅只回忆从前的古⽼对象,那些也许⼀度会变成物甚⾄作为物⽽在场的对象,那么,物之为物也是决不会到来的。

物是从世界之映射游戏的环化中⽣成、发⽣的。惟当 —— 也许是突兀地 —— 世界作为世界⽽世界化( Welt als Weltweltet ),圆环才闪烁⽣辉;⽽天、地、神、⼈的环化从这个圆环中脱颖⽽出( entringt ) [12] ,进⼊其纯⼀性的柔和之中。

依此环化,物化本⾝是轻柔的( gering ) [13] ,⽽且每个当下逗留之物也是柔和的,毫不显眼地顺从于其本质。柔和的是这样的物:壶和凳、桥和犁。但树⽊和池塘、⼩溪和⼭丘也是物,也以各⾃的⽅式是物。苍鹰和狍⼦、马和⽜,也是物,每每以⾃⼰的⽅式物化着。每每以⾃⼰的⽅式物化之际,镜⼦和别针、书和画、王冠和⼗字架也是物。

但是,与⽆数处处等价的对象相⽐,与过量的作为⽣物的⼈类群体相⽐,物在数量上也是轻微的。

惟有作为终有⼀死者的⼈,才在栖居之际通达作为世界的世界。惟从世界中结合⾃⾝者,终成⼀物。 [14]

孙周兴 译

注释:

[1] 在德⽂中,前辍 Ge- 有 “ 聚集 ” 之义,故 “ ⼭脉 ” ( Gebirge )是 “ 群⼭ ” ( Berge )之聚集,相应地, “ 赠品 ” ( Geschenk )是 “ 馈赠 ” ( Schenken )的聚集。 —— 译注
[2] 带⼊栖留之中。 —— 作者边注
[3] 此为海德格尔的典型⾔说。 “ 物物化 ” 原⽂为: Das Ding dingt 。 “ 物化聚集 ” 原⽂为: Das Dingen versammelt 。 —— 译注
[4] 狄奥尼修斯 · 阿雷欧帕杰塔( Dionysius Areopagita ):五世纪希腊新柏拉图主义哲学家普罗克洛( Proclus ,约 410 - 485 )的化名。 —— 译注
[5] 此处 “ 转让 ” ( Vereignung )、 “ 失去本⼰ ” ( enteignen ,或译 “ 失本 ” )均与海德格尔后期所思的 “ 本有 ” ( Ereignis )及其 “ 居有 ” ( ereignen )相关,中译⽂未能显明这些词语之间的词根(即 eigen )联系。 —— 译注
[6] 此处 “ 天、地、神、⼈ ” 是 “ 天空、⼤地、诸神、终有⼀死者 ” 的简译。 —— 译注
[7] 四⽅之共属⼀体的有所纯⼀化( einfalten )的嵌合的聚集。 —— 作者边注
[8] 什么聚集⼊环绕者( das Ringende )中 —— 有所闭合的维系 —— 但它⼜解放 —— 敞开者之真实 —— ⾃由之物。 —— 作者边注
[9] 解放。 —— 作者边注
[10] 按其字⾯含义,这⾥的 “ 受限制者 ” ( die Be-Dingten )亦可译为 “ 被物化者 ” 。 —— 译注
[11] 世界的纯⼀性在何处逗留。 —— 作者边注
[12] 消解⼊⾃由之境中 —— 环化( das Gering ):进⼊⾃⾏解放的聚集 —— ⾃⾏顺从 —— 进⼊四⽅的共属⼀体中。 —— 作者边注
[13] 抑制于毫不显眼者中 —— 质朴之物。 —— 作者边注
[14] 此句德语原⽂为: Nur was aus Welt gering, wird einmal Ding ,我们在此根据英译⽂译出,英译⽂作: Only whatconjoins itself out of world becomes a thing 。参看海德格尔:《诗 · 语⾔ · 思》,英⽂版,纽约 1971 年,第 182 页。 —— 译注

A bricks break game

Recently I suddenly miss a 2d bricks break game once played. In my memory it’s around 2005, but I don’t know the game name since at that time I am not very sensitive about English and just start learning it, and it’s from a CD.
With so few clues, I started searching on the web, like bilibili, Youtube and anything I can check. I also tried to search some bricksbreak-like game topic or collection, but none of them hit. I also tried the Gemini, but no luck.
After at least several hours efforts, that turns out to be nothing. The results are almost those most famous game, a typical one is DX-Ball, though I have played it, but not the one I mean. Guess the one I am looking for is not that popular.

Reddit

Then since it’s an English game, I try to dig it in the English BBS, like Reddit. In fact that turns out be the smartest decision. Things turns around when I check a post:
[PC][2000s] A polished, futuristic brick breaker game that came out during windows 98 or xp
there is an anwser by Karzons:

“It would be quite the marathon to go through them all, but there’s a long list of this type of game with screenshots here.
Then I check the website, after several minutes search, I finally find it:
Wilkanoid
That’s the game I am digging for, and it’s actually published at year 2001.

Wilkanoid

download

you can still check its official website
Wilkanoid2
However, you can’t download the 1st generation one. There is only Wilkanoid 2 now.
Luckily, you can still download the old version from other source archive website like:
wiLkANoiD v1.52

installation

Wilkanoid 1 has some issue about installation.
In modern OS like Win10, you could be stucked when install it with installation package.
I tried install it in the WinXP virtual machine(actually it’s the system I played it at the first place), with no doubot that works.
Then copy the whole extracted folder into host Win10 machine, game will perform better than it does in the virtual machine.
Wilkanoid 2 is also considerable, it has no installation issue, but has different flavor.

Human can solve the complicated problem.

The quest is actually solved by a real human answer. Human solve problems with more complex experience and multiple aspects, and can use more imagination to do it, our fuzzy memory and emotion can also help. Not work every time, but still built this huge and sophisticated information world, machine is just the extension of our meat and flesh brain.

Pre

Got some videos to process with, task was simple, so don’t wanna use a gui app like davinci pr or whatever.
And cli based ffmpeg is an option.

Issue

Platform

Most tutorial or usage cases are based on linux, after all FFmpeg is widely used by programers which more likely using a linux.
However there is a high chance that your best performance computer is with an Windows OS. If you don’t wanna install a wsl, you could still use a msys2 porject compiled version.
Besides it got some glitches on file system communication between wsl and Windows, and may cause system laggy occasionally, so I think it may better to execute task in Windows directly.

Tweaks on Windows

  • You may wanna try these commands in powershell, cmd is little limited on interaction for these command.
  • And you have to deal with escape character in powershell, which is different from in linux.
  • Windows has its own date function, which is conflicted with the one in the usage cases from most tutorial.
    based on the above, you have to made some tweaks.

installation

comparing with download binary file manually, it’s simple to install it with winget.

1
winget install ffmpeg

Typical error

a parse error, something like below, usually caused by wrong escape character, misplaced punctuation.

1
Unable to parse option value ""

a syntax error, something like below, usually it

1
Either text, a valid file, a timecode or text source must be provided

usage case

some cases involved with date function

escape char

the colon must be escaped with escape char

elapsed time watermark

1
ffmpeg -i output_final.mp4 -vf "drawtext=text='\%\{pts\:hms\}':fontfile='C\:/Windows/Fonts/arial.ttf':fontcolor=white:fontsize=36:x=10:y=10" output_final_timed.mp4

date function

use a Windows date, this date is different from most tutorial you could find.
if you use the below one directly, it will fail, because you’re treating a Windows date function with a linux date syntax.

1
2
ffmpeg -i sample.mp4 -vf "drawtext=text=$(date +%s):fontfile='C\:/Windows/Fonts/arial.ttf':fontcolor=white:fontsize=36:x=90:y=10" output_formated.mp4
Get-Date : can't bind "Date"...

instead you should do this to use Windows date function syntax.

date and time watermark

1
2
$startTimeSeconds = [int64](Get-Date -Year 2024 -Month 10 -Day 13 -Hour 14 -Minute 10 -Second 50 -UFormat %s)
ffmpeg -i sample.mp4 -vf "drawtext=expansion=strftime:basetime=$($startTimeSeconds)000000:fontfile='C\:/Windows/Fonts/arial.ttf':fontcolor=white:fontsize=36:x=40:y=10:text='%Y-%m-%d %H\:%M\: %S'" output_formated.mp4

if you just wanna use a date from linux, you could use $(wsl date)

1
ffmpeg -i sample.mp4 -vf "drawtext=text=$(wsl date +%s -d '2018-10-13 14:10:50')000000:fontfile='C\:/Windows/Fonts/arial.ttf':fontcolor=white:fontsize=36:x=40:y=10:text='%Y-%m-%d %H\:%M\: %S'" output_formated.mp4

basetime: A confusing ffmpeg parameter
Be careful with those 000000 at the end of the basetime parameter, if it’s not there the start time will not be what we assigned.
The reason why this happen is because the basetime accept a designated length variable, the string converted from date is not comatible with it, but we could complete it with 000000.
ref: ffmpeg添加动态时间戳的问题

in wsl

Of course you could install wsl and install ffmpeg in it, and execute tasks from there. Then most cases from tutorial could be executed flawlessly without annoying tweaks.

1
2
sudo apt install ffmpeg
ffmpeg -i sample.mp4 -vf drawtext="expansion=strftime:basetime=$(date +%s -d '2024-10-13 14:10:50'):fontfile=arial.ttf:x=w-tw:fontcolor=red:fontsize=30:text='%Y-%m-%d %H\:%M\: %S'" output_formated.mp4

Appendix: Other usage cases

corp

1
ffmpeg -i sample.mp4 -filter:v "crop=1724:970:98:110,scale=1920:1080" output_final.mp4

delogo

1
ffmpeg -i sample.mp4 -b:v 548k -vf delogo=x=1:y=55:w=720:h=55:show=1 delogo_1_55_720_55.mp4

ref

ref: ffmpeg 踩坑实录 添加实时水印(二)
ref: ffmpeg Documentation

pre

Today when I tried git pull command, encountered an Error

1
2
3
4
5
6
7
nc: connect to 192.168.100.112 port 7890 (tcp) failed: Connection timed out
kex_exchange_identification: Connection closed by remote host
Connection closed by UNKNOWN port 65535
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

First, I should state my config, I config git with ssh Connection after all github has forbidden users connecting with Http.
Due to network situation, I have to use a proxy to reach github.com, so I config it through Clash for Windows.
192.168.100.112 is the Windows host ip.7890 is the proxy port used by Clash.

1
2
3
4
Host github.com
Hostname ssh.github.com
Port 443
ProxyCommand nc -v -x 192.168.100.112:7890 %h %p

It works well before today.
Actually, I get some errors like this occasionally, so I didn’t take it as a big deal. I am sure it would be solved after some casual tries.

TroubleShooting

Time Sychronization Error

Recently the error I found most is the Clash proxy Error due to the Windows system clock sychronization Error, I have always deal with it by manually synchronizing it.
but it didn’t work this time.

Ssh port error

Ssh use port 22 by default, I found this could not work with some proxy server, and the one I used is just the case. So you can see I set the Port 443 to avoid it. So I double check the Port Setting, nothing wrong.

It didn’t go through the Clash

So what’s happening here? After those tries I realize I can’t just make some casual try, but I have to analyze the situation.
Then I found the traffic didn’t got through the Clash at the first place, because the log was empty.

try Curl

for eliminate misleading errors stemming from SSH itself, I also tried curl with setting proxy by the environment vriable, proxy also can’t reach the Clash either.

1
alias proxyGo='export https_proxy=$host_ip:7890 http_proxy=http://$host_ip:7890 all_proxy=socks5://$host_ip:7890'

WSL networking

At this time I have to consider if it’s the the WSL problem. WSL use the NAT mode by default, and mirrored mode need a Win11 system support. Is there a chance a recent System Update change it to the mirror mode?
Again I read the Official guides:

Accessing network applications with WSL.

And found it didn’t change at all, but maybe the guide just didn’t keep up with Update in time? So I try the mirrored mode, and found no luck on the localhost ip. Set it to the mirrored mode manually also get An Error shows this version doesn’t supoort a mirrored mode.

Windows Firewall

I am not involved with any firewall setting changes from the very begining I use a Clahs for Windows, and since it works well before, this is the last thing I would like to look into.
But guess what, finally I hit the jackpot.
In the rules I found Clash has some Disallow state, and turn all on, proxy now works like a charm.
Considering that, it’s easy to understand why visiting websites using Clash proxy work well, as browser and Clash are in the same localhost network, and are not affected by firewall rules.
While proxy request from WSL was was treated by Windows as an incoming traffic rather than a local one.

Appendix: Config File

I still don’t know why the firewall setting changes, maybe the system or anti-virus software popped a prompt, and I click the “disallow” button accidently.
But I do know, all the system or software setting should be the form of config files or provide a way to produce a similar file so that people can easily check if it’s changed since last time, and I think it would help a lot when we want to know why things behave or work differently.

Pre

Though I prefer view/edit text with vim/emacs and indeed there is a native app called iVim on iOS, it’s more convenient to leverage the advantages of gesture operations by using GUI apps like Obsidian for single view/check documents purpose. And I do use Obsidian on iOS for that.
recently I found two Obsidian plugins Cloze and Spaced Repetition.

Cloze can turn the specific syntax format text into a cloze.
Spaced Repetition is to review flashcard by fighting forgetting curve like Anki.
so a memo line in my vocabulary notebook should look like below:

1
- assessment :: ==估价.noun.[A more accurate assessment would be that after a couple of days of practice]== ==[ref](https://karthinks.com/software/latex-input-for-impatient-scholars/#step-3-yasnippet-and-automatic-snippets)==

==...== is highligh format in markdown and also a cloze symbol I choose for Cloze usage.
:: is the seprator symbol for inline flashcards for Spaced Repetition, making the content around it into a set of question and awsner.

Read more »

Pre

I usually use tmux and vim in workflow, and they work well most time, especially in a TUI environment. They both have copy/paste function, but there’s still some issue bothering me sometime.

Issue

first their clipboard functions are not uniform depending on platforms.

GUI

In a GUI environment, they both have the ablility to copy content to the system clipboard.

Tmux

In default the content copied in tmux can be paste to the system clipboard, so when you copy in tmux/vim, you can paste into other applications.
However it’s not a two-way synchronization. when you copy outside the tmux, the content can’t be paste in the tmux with prefix + ]

Vim

for vim, you can configure to synchronize with system clipboard

1
set clipboard=unnamed

only if the execution binary compiled with “clipboard” function, you can check with :version in vim. a -clipboard means it doesn’t have it.)

between tmux and vim

They can’t really communicate. Let’s say you have a Vim pane in tmux, content copied with tmux prefix + [ can paste into Vim with prefix + ], that’s sure; but content copied in vim with y can’t be paste by tmux paste action prefix + ], and you could get very confused and annoying when you carelesslly use a y instead of the proper prefix + [

TUI

Without GUI, it’s the worst situation, you don’t have a system clipboard. though you could live in tmux at the very begining when you login in the shell, and do all the copy/paste using tmux clipboard, it’s not gentle enough, not mention the cluttered keystrokes may drive you crazy.

Solution

After standing the tingling from time to time, I decide to get rid of it.
In iSH, it’s very hard to select/copy using iOS gesture, so I use tmux copy/paste function to take care of that, keyboard can control it in a more precisely way. And what’s more, vim in alpine apk can’t paste from system clipboard even with set clipboard=unnamed config, because apparently it doesn’t be compiled with clipboard funcion, I happen to find a alternative way to copy content across sections with /dev/clipboard file when I search a solution for it in iSH repo issue: ref: Can’t copy text more than 50 lines · Issue #2092 · ish-app/ish.
In iSH, /dev/clipboard is the clipboard that communicate with iSH and the iOS system, the content is shared across them. Inspired by it, I realized that files could be used for a rough synchronization purpose between tmux/vim/system. We could take files like /dev/clipboard as a intermedia for text transfer between them.

Diagrams

flowchart TD;
C(/dev/clipboard pbcopy pbpaste wlip);
T(tmux) <--> C;
V(vim) <--> C;
S(system) <--> C;

Steps

iSH

  • for tmux, make C-b ] load into paste-buffer and then paste from the /dev/clipboard instead of default paste-buffer -p.
    1
    bind-key ] run-shell 'cat /dev/clipboard | tmux load-buffer - \; paste-buffer -p'
  • for vim(which comes with no clipboard function), tweak the yank/paste function would be enough.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function! WriteVariableToFile()
    " write content into clipboard from vim register
    let content = @"
    call writefile([content], '/dev/clipboard')
    " echo "Variable written to clipboard"
    endfunction
    command! WriteVariableToFile call WriteVariableToFile()
    " hook the yank event in vim, and make the copied content write into clipboard when yank text.
    autocmd TextYankPost * call WriteVariableToFile()

    function! ReplaceRegisterContent()
    let lines = readfile('/dev/clipboard')
    let content = join(lines, "\n")
    call setreg('"', content)
    endfunction
    command! ReplaceRegisterContent call ReplaceRegisterContent()
    " remap key `p` to retrieve the content from clipboard before paste.
    nnoremap <silent> p :call ReplaceRegisterContent()<CR>p

Archlinux

archlinux doesn’t have /dev/clipboard, so I just use a temp file ~/clipboard instead.

  • tmux
    1
    bind-key ] run-shell 'cat ~/clipboard | tmux load-buffer - \; paste-buffer -p'
  • vim
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function! WriteVariableToFile()
    " write content into clipboard from vim register
    let content = @"
    call writefile([content], expand('~/clipboard'))
    " echo "Variable written to clipboard"
    endfunction
    command! WriteVariableToFile call WriteVariableToFile()
    " hook the yank event in vim, and make the copied content write into clipboard when yank text.
    autocmd TextYankPost * call WriteVariableToFile()

    function! ReplaceRegisterContent()
    let lines = readfile(expand('~/clipboard'))
    let content = join(lines, "\n")
    call setreg('"', content)
    endfunction
    command! ReplaceRegisterContent call ReplaceRegisterContent()
    " remap key `p` to retrieve the content from clipboard before paste.
    nnoremap <silent> p :call ReplaceRegisterContent()<CR>p

MacOS

  • for tmux
    1
    bind-key ] run-shell 'pbpaste | tmux load-buffer - \; paste-buffer -p'
  • vim in MacOS is usually compiled with clipboard function, so we don’t have to tweak vim config.

msys2

msys2 has /dev/clipboard.

  • tmux installed with pacman got isssue at communication with system clipboard, plugin tmux-yank will do that for you.
    1
    set -g @plugin 'tmux-plugins/tmux-yank'
    and the same, tmux under msys2 now can copy into system clipboard though, won’t paste from system clipboard, so tweak C-b ] to load text into paste-buffer from system clipboard and then paste.
    1
    bind-key ] run-shell 'cat /dev/clipboard | tmux load-buffer - \; paste-buffer -p'
  • vim in msys2 compiled with clipboard function, so we don’t have to tweak vim config.

WSL

Defaultly you can use Shift+Insert to copy contents from system to wsl, and copy text selected by mouse with a Enter keystroke.
Though, that’s not elegant enough.
Luckily, at least we can communicate with system clipboard using clip.exe. But it seems to have some performance issue. Besides you have to call powershell.exe to execute the clip.exe to handle UTF-8 issue, and you have to config "$HOME\Documents\WindowsPowerShell\" to achieve it.

However luckily again, I found a tool wclip which handle the all the things for you, and it’s fast won’t lag you down.

Using wclip tool: a blazing fast one

ref: wsl-clipboard

donwload resource with wget

1
2
3
wget https://github.com/memoryInject/wsl-clipboard/releases/download/v0.1.0/wclip.exe
wget https://github.com/memoryInject/wsl-clipboard/releases/download/v0.1.0/wcopy
wget https://github.com/memoryInject/wsl-clipboard/releases/download/v0.1.0/wpaste

mv to path

1
cp wcopy /usr/bin && cp wpaste /usr/bin

run below in powershell (warning: as administrator)

1
cp \\wsl.localhost\Ubuntu\home\Anonymous\wclip.exe C:\Windows\System32\

That’s the wclip part.

Next we need to config wcopy/wpaste in wsl.vimrc and tmuxFile/wsl.tmux.conf"

for tmux

Defaultly tmux can copy content to system clipboard with its copy mode, while it can’t copy from the system clipboard.
So, override the paste function in wsl.tmux.conf:

1
bind-key ] run-shell 'wpaste | tmux load-buffer -\; paste-buffer -p'
for vim

Default Vim installed comes with no clipboard function. Though it’s heard that vim-gtk got clipboard funtion, didn’t try it.
Vimscript provide a TextYankPost, which is a kill for hooking copying aciotn.
in wsl.vimrc:

1
2
" 1. copy to system
autocmd TextYankPost * :call system('wcopy -i',@") "wcopy is indeed super blazing fast

For pasting, if implementation of the basic pasting function from system will satisfy you then it’s an easy job.
But if you want a behaviour highly obey the native one, that’s annoying. Vimscript does’t provide paste hook like a TextPasteHook, NO, there is no such thing.
But anyway, it’s done. More than basic, the following almost make it behave like a native paste performance, including:

  • override selected text in visual mode
  • receive multiply count repeat argument [count]
  • receive register designation argument "[x]
    in wsl.vimrc:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    function! CheckAndUpdateClipboardWithSystem()
    let clipboard_content = system('wpaste')
    let register_content = getreg('"')
    " update unless neccessary(because if there is a preserved content in register_0 after delete action, set value to unnamed register will also replace content of the register_0)
    if clipboard_content != register_content
    call setreg('"', clipboard_content)
    endif
    endfunction

    function! Hook_key_p()
    call CheckAndUpdateClipboardWithSystem()
    " simulate the origin p behaviour
    " echo v:register
    " v:register usage is inspired by: [ref: How can I define an operator that takes a register as an argument?](https://vi.stackexchange.com/questions/8934/how-can-i-define-an-operator-that-takes-a-register-as-an-argument)
    let count_arg = v:count ? v:count : 1
    let cmd = "normal! " .count_arg.'"'.v:register . "p"
    execute cmd
    " [pending: personally didn't use repeat for now] Relies on vim-repeat for repeatability by the . command.
    " [ref: vim-wsl-copy-paste](https://github.com/Konfekt/vim-wsl-copy-paste/blob/main/plugin/wsl-copy-paste.vim)
    " let repeat_cmd = 'call repeat#set("cp",' . v:count . ')'
    " execute repeat_cmd
    endfunction
    " [deprecated 1] input `10p` on this keymap will: execute [paste content in Hook_key_p function] and <CR> for 10 times, besides symbol `:` will interrupt visual mode
    " nnoremap p :call Hook_key_p()<CR>
    " [deprecated 2] if only use p like below(don't execute p in the Hook_key_p function), will
    " execute <CR> for 10 times, but only paste content for 1 time.
    " execute <CR> for 10 times, but only paste content for 1 time.
    " nnoremap p :call Hook_key_p()<CR>p
    " The special text <Cmd> begins a "command mapping", it executes the command directly without changing modes.
    nnoremap p <Cmd>call Hook_key_p()<CR>
    " [deprecated 3]
    " function! Hook_key_visual_p()
    " visual mode is highly possible to be interrputed by other operatons like input `:`, to ensure replacement of the selected text, better use `gv` to restore the visual mode.
    " execute 'normal gv'
    "" let cmd = "normal! " .'"'.v:register . "p"
    " execute cmd
    " endfunction
    vnoremap p <Cmd>call Hook_key_p()<CR>
    function! Hook_key_P()
    call CheckAndUpdateClipboardWithSystem()
    let count_arg = v:count ? v:count : 1
    let cmd = "normal! " .count_arg.'"'.v:register . "P"
    execute cmd
    endfunction
    nnoremap P <Cmd>call Hook_key_P()<CR>
    vnoremap P <Cmd>call Hook_key_P()<CR>

Finally

Finally, you could just copy/paste more carelesslly, Without considering which way to be used for copy/paste operation.

Pre

Assuming you have a machine connected to a monitor or television as a movie player, and the tv maybe keep a distance from you since you wouldn’t like to watch movies so close to it.

Issue

The machine is away from you which make it inconvenient to control it.

  1. Physical way: connect a keyboard with long wire or a wireless bluetooth one. For mouse, options are few here, a wireless one should be great.
  2. Remote way: use another machine to control it.
Read more »