shukebeta's notebookfor his bad memoryhttps://blog.shukebeta.com/feed/2024-03-11T18:10:02+13:00Chyrp/2023.02 (Cinereous)A reliable/fast way to know an APK file's api levelhttps://blog.shukebeta.com/id/post/248/2024-03-11T18:13:00+13:002024-03-11T18:10:02+13:00David Weihttps://shukebeta.com<p>I googled quite a while and found the following way is the best:</p>
<p>If you have Android Studio installed, using the "Build > Analyze APK" menu command is indeed a convenient way to quickly determine the supported API level of an APK file. Here are the steps:</p>
<p>Open Android Studio.</p>
<p>Go to "Build" in the top menu.</p>
<p>Choose "Analyse APK..."</p>
<p>Navigate to and select the APK file you want to analyze.</p>
<p>Android Studio will display information about the APK, including the minimum and target API levels.</p>
<p>Surely if you don't have Android Studio installed, then this way cannot help.</p>
Moq Tips 2 - check if a log message with a specific prefix/suffix and call a method with an object having a specific field valuehttps://blog.shukebeta.com/id/post/247/2024-03-11T17:51:44+13:002024-03-11T17:15:55+13:00David Weihttps://shukebeta.com<ol start="1">
<li>To check if a log message with a specific prefix is logged, you can use Moq's Verify method along with an appropriate assertion.</li>
</ol>
<pre><code class="language-C#">_logger.Verify(logger => logger.logInformation(
It.Is<string>(s => s.StartsWith("specific prefix"))), Times.Once);
</code></pre>
<ol start="2">
<li><p>To verify that a method is called with an object containing a specific property value, you can use Moq's <code>It.Is<T></code> matcher along with a lambda expression. Here's an example:</p>
<pre><code class="language-C#">_mockObject.Verify(x => x.MyMethod(It.Is<MyObject>(
obj => obj.PropertyValue == expectedPropertyValue)), Times.Once);
</code></pre>
</li>
<li><p>Correctly returns null: Sometimes we need to set up a Moq mock to return null but cannot directly do it as Moq doesn't allow. Please check the following way that you should use:</p>
</li>
</ol>
<pre><code class="language-C#">_bookStoreAccountRepository.Setup(
b => b.GetBookStoreAccountByUserName(It.IsAny<string>()))
.Returns((BookStoreAccount)null);
</code></pre>
<p>The key is to use <code>(BookStoreAccount)null</code> to explicitly cast null to the expected return type.</p>
我的新“玩具” - 电子墨水屏阅读器 BOYUE LikeBook S61https://blog.shukebeta.com/id/post/246/2024-03-05T22:20:41+13:002024-03-05T21:41:30+13:00David Weihttps://shukebeta.com<p>身为软件开发者,我工作时盯着屏幕,工作之余除了刷社交媒体就是看电子书,还是大大小小的屏幕。往往不等到休息时间,眼睛就干涩得不行。我不禁怀念起我那台多年前就不知道丢到哪里的老Kindle。还是要整一台e-ink 设备专门读书,而且一定得是安卓系统,这样我就能在墨水屏上用我最爱的 KOReader阅读器读书了。</p>
<p>预算不多,而且主要是看书,我的期望值并不高:屏幕不必大,CPU也不求多块,但存书的空间最好能大一点。</p>
<p>AliExpress 上一通搜索,这台BOYUE 阅读器吸引住我的眼球。</p>
<p>BOYUE LikeBook S61 6 inch 4核1.6G CPU 1G RAM 16G Storage NZ$ 102.97 运费 $4.25 再加上 15% 的GST,到手价才 $122.42。</p>
<p>这定然是老机器清仓甩卖。因为描述里写系统是Android 4.4,相当老了。但乐观的我想,应该总能找到第三方ROM刷机吧,于是乎就下单了。这次物流蛮给力,只等了十几天,我3月1日就收到货了。系统不是 4.4, 而是更老的 4.2.2。网上一通搜索,并没有找到合适的ROM刷机。于是乎拿到机器这几天,我只能因陋就简,在网上找能满足我需要的尚支持 Android 4.2.2 版本的软件。这个过程并不顺利,我甚至一度考虑别折腾了,要不干脆退货算了。然而在最初的挫折之后,后面却是越来越顺利。</p>
<p>经过一番调教之后,这台机器用起来已经相当顺手,甚至可以说是舒适了!</p>
<p>中间反复尝试的艰辛略去不提,今天这篇主要是分享一下我的成果, 如果能帮到也买了这台全新的老机器的网友,那我就再开心不过了。</p>
<ul>
<li>主阅读程序 koreader-v2023-06-1.apk</li>
<li>Launcher Simple.ink.launcher.apk</li>
<li>SSH server, SimpleSSHD-27.apk</li>
<li>Browser, com.UCMobile.intl_11.4.apk</li>
<li>File Manager es-file-explorer-4-2.apk</li>
<li>Mastodon client tusky.apk</li>
</ul>
<p>抽时间我会将这些apk打个包扔我一台破VPS上供大家下载,毕竟找这些安装包花了我不少时间。</p>
English Learning Memo 1https://blog.shukebeta.com/id/post/245/2024-02-23T21:43:24+13:002024-02-23T21:43:24+13:00David Weihttps://shukebeta.com<p>My boss sent a message in our office channel, which said she was WFH today, as "she have a bloke coming round to fix the garage door".</p>
<p><strong>BLOKE</strong> is a new word to me. so I learned this word today.</p>
<p>Other learnings</p>
<ul>
<li>"得不偿失" in English can be translated as "not worth the loss" or "the gains do not justify the losses."</li>
<li>"蒜苔" in English is "garlic scape" or simply "garlic shoots."</li>
<li>"In and out promotion" 广告术语中指的是一种快速进行的促销活动,通常是短期的、迅速产生效果的宣传推广。这可能包括限时折扣、特价促销等手段,旨在迅速吸引顾客。</li>
</ul>
Moq tips 1 - learn how to write unit tests from ChatGPThttps://blog.shukebeta.com/id/post/244/2024-03-01T12:10:13+13:002024-02-22T15:45:24+13:00David Weihttps://shukebeta.com<h3>When should I use mockObject.Reset() and when should I use mockObject.Invocations.Clear()?</h3>
<p>In the context of using a mocking framework like Moq in C# for unit testing, the choice between <code>mockObject.Reset()</code> and <code>mockObject.Invocations.Clear()</code> depends on what you want to achieve.</p>
<ol start="1">
<li><p><strong><code>mockObject.Reset()</code></strong>:</p>
<ul>
<li>This is specific to the Moq library.</li>
<li>It resets the mock object, removing any setups or custom behavior you might have defined for that mock.</li>
<li>It does not clear recorded invocations; you can still access them after calling <code>Reset()</code>.</li>
</ul>
<p>Example:</p>
<pre><code class="language-csharp">var mock = new Mock<MyClass>();
mock.Setup(x => x.MyMethod()).Returns("Original");
// ... code using the mock ...
// Reset the mock, removing setups
mock.Reset();
// Now, if you call the method, it won't use the previous setup
var result = mock.Object.MyMethod();
</code></pre>
</li>
<li><p><strong><code>mockObject.Invocations.Clear()</code></strong>:</p>
<ul>
<li>This clears the recorded invocations on the mock object.</li>
<li>It doesn't affect setups or custom behavior. It just removes the history of invocations.</li>
<li>This can be useful when you want to verify interactions or check the number of invocations without interference from previous test runs.</li>
</ul>
<p>Example:</p>
</li>
</ol>
<pre><code class="language-csharp"> var mock = new Mock<MyClass>();
mock.Setup(x => x.MyMethod()).Returns("Original");
// ... code using the mock ...
// Clear recorded invocations
mock.Invocations.Clear();
// Now, if you verify invocations, it won't consider previous calls
mock.Verify(x => x.MyMethod(), Times.Never());
</code></pre>
<p>In summary:</p>
<ul>
<li>Use <code>mockObject.Reset()</code> when you want to clear setups and start fresh with the mock.</li>
<li>Use <code>mockObject.Invocations.Clear()</code> when you want to clear the history of invocations, but keep the existing setups and behaviors.</li>
</ul>
<h3>If I set up a method with the same parameters multiple times, the last setup will take effect, right?</h3>
<p>In most mocking frameworks, including Moq for C#, the answer is <strong>YES</strong>. Each new setup for the same method and parameters overrides any previous setups.</p>
<p>Here's an example using Moq:</p>
<pre><code class="language-csharp">
// Setting up the method with the same parameters but different returns
mock.Setup(x => x.MyMethod()).Returns("FirstSetup");
mock.Setup(x => x.MyMethod()).Returns("SecondSetup");
// Now, if you call the method, it will return "SecondSetup"
var result = mock.Object.MyMethod();
</code></pre>
A neat way to remove trailing zeros from a decimal number in C#https://blog.shukebeta.com/id/post/243/2024-01-23T14:47:37+13:002024-01-19T10:53:59+13:00David Weihttps://shukebeta.com<p>We can get unexpected trailing zeros when we serialzie an object with decimal properties, normally it will not hurt. However, it does hurt when we want to compare two objects by serializing them to JSON string. I tried a few solutions and finally find the following one is the best.</p>
<pre><code>public static decimal Normalize(this decimal value)
{
return value/1.000000000000000000000000000000000m;
}
</code></pre>
<p><a href="https://stackoverflow.com/questions/4525854/remove-trailing-zeros/7983330#7983330">Reference</a></p>
Clear nuget cachehttps://blog.shukebeta.com/id/post/242/2023-12-15T10:21:49+13:002023-12-15T10:18:45+13:00David Weihttps://shukebeta.com<pre><code>cat ~/bin/clear-nuget-cache
nuget locals all -clear
</code></pre>
<p><a href="https://support.syncfusion.com/kb/article/6265/how-to-clear-nuget-cache">Reference</a></p>
读书笔记:两访中国茶乡(上下册https://blog.shukebeta.com/id/post/241/2023-11-30T17:40:48+13:002023-11-30T17:40:48+13:00David Weihttps://shukebeta.com<p>2023-11-23 19:16:28。
犁看起来很原始,但是却很管用,对于现阶段的中国人来说,公牛或水牛拖拉的小犁,比我们国家更先进的工具还要适用一些。水车则轻而易举地就可以把很多水汲引到高处,然后迅速流进各处的稻田,我经常长时间地站在一旁看着,赞叹这种装置的简单实用。</p>
<p>2023-11-24 09:46:38。
我住的这所房子密闭性太差了,冷风从各处缝隙中钻进来。窗户很大,不像英国装的是玻璃,这儿都是纸窗,而且很多地方连纸窗都没有,大大地敞开着口子。
注: 我斗胆猜一下,这是因为中国人安居的机会太少,太多时候都会优先选择权宜之计,久而久之,凑合精神就写到了中国人的基因里。</p>
<p>2023-11-24 15:07:45。
鱼鹰的脖子上套了一个小线圈,防止它把叼着的鱼吞下去,要非常小心这个线圈,不能让它松开,滑落到脖子下面去,否则鱼鹰便容易有哽咽窒息的危险。</p>
<p>2023-11-24 15:21:24。
房间里冷得让人难受,我们常常在早上醒来时发现,自己躺在床上,全身都已被雨水打湿 ,如果下雪的话,雪花就从窗户中飘进来,落在地板上,一环一环的,像花圏一样。
注: 一个不以苦为苦的人。</p>
<p>2023-11-24 15:23:29。
一到晚上,上海城的城门就都关闭了,而且郊区各条里弄之间的交通也被一重又一重大大小小的门给切断了,这些门大概在晚上十点或十一点就紧紧关闭了。这显然是一种古代习俗,用以防止来自敌人或作乱者的突然袭击,却在和平年代仍然沿用下来。
注: 我们中国人很擅长把临时政策变成永久政策。</p>
<p>2023-11-24 20:00:08
众所周知,上海已经成为我们英国棉纺制品的一大市场,我敢断定,几年以后,上海不仅会成为广州的有力竞争者,而且将成为一个无比重要的城市。此外,这儿的气候也更宜人;人们更守规矩;外国人受到尊重,可以随处走动、骑马,只要能在当天赶回来就行。应当承认,就居住而言,比起南方各地,上海也有很多优势。</p>
<p>2023-11-25 15:26:35
置身于这样一种场景当中,又是在一个陌生的国度,远离自己的家乡与朋友,很容易让人在头脑中生出一些终生难忘的感受。在这个夜晚,我与和尚们一起呆在天童寺里,那些在我脑中生出的莫名情愫,我想我一辈子也忘不了</p>
<p>2023-11-25 23:45:13
确实不假,输入和吸食鸦片,是被中国政府明令禁止的,但这种禁止,只是一种空言,并没有什么实际的意义。</p>
<p>2023-11-26 06:49:43
有一点应该大书特书,就我的经历而言,尽管每天有数百人趁我不在来参观我的小船,我在这个地方却从来没有失窃过任何东西。</p>
<p>2023-11-26 07:42:02
中国北方省份的农民们,他们通过各种办法来尽力延长生长季节,以便他们从肥沃的土地中多收获一些东西。</p>
<p>2023-11-27 15:29:16
不管有钱还是没钱,人们通常要把死者的遗骸在家中摆放很长一段时间。我看到了大量这样停放在家中的棺材,从我观察到的情形来看,许多棺材已经摆放好些年了。这些棺材用料厚实,非常坚固,接缝处仔细做过密固处理,所以尸体腐化的时候,并不会有臭味逸出来。
注: 这个中国通还是不够通。这棺材其实是家里的老人给自己预备的,尚未使用的。</p>
<p>2023-11-27 15:53:12
在旅行当中,中国人除了吃饭、抽烟和睡觉以外,很少做别的事情,在我游历中国的这整个期间,我不记得自己看到过中国人在旅途中阅读。
注: 今天的中国人里,会在旅行中阅读的人当然比那时候会多得多,然而不阅读的人依然更多。我真诚的希望,我们中国人,不论年龄,财富,都能爱上阅读,随时随地看到捧卷的人。</p>
<p>2023-11-27 18:31:55
我们现在前行的速度非常慢,因为水流太湍急了。不时出现的险滩,常常使得我们花费好几小时才能溯流而上。十五个纤夫,用长长地纤绳系住我们船上的桅杆,在岸上拉着船前进,还有五、六个船员拿着长长的竹篙,奋力地撑着船。没有什么比这更能展现中国人那不屈不挠的毅力。当打量着像这样的一条河时,也许有人觉得它根本就不适合航行,但即使是这样的困难条件,人们也还是凭着艰辛的劳动和不屈的毅力把它克服掉了。</p>
<p>2023-11-30 16:03:02
庙里的和尚把我送到大门口,用中国的方式和我道了别。在我们在山里钻来钻去的时候,我看到采茶的人们正在山坡上的茶园里忙着采茶,他们似乎正在进行一场快乐而又心满意足的比赛,互相开着玩笑,到处都充满快乐的笑声,还有一些人在唱歌,就像庙里那些古树上的鸟儿一样高兴。</p>
<p>2023-11-30 16:08:54
这些树苗和其它的植物一样,它们的根部都被小心地用潮湿的苔藓包裹起来,然后外面再裹上一层油纸,用上油纸是为了让它们避开阳光,也避开中国人刺探的目光,</p>
<p>2023-11-30 16:22:23
我们从山脚向上走了一段距离以后,山路开始变得非常陡峭,我只好从轿子里出来步行。有那么一两次,我远远地走在仆人们前面,一个人走在那似乎无比荒凉、寂寞的道路上,我自己都几乎有些害怕了,好像随时都可能有老虎或其它肉食类动物从密林中窜出来咬人。</p>
<p>2023-11-30 16:21:35
路上我们看到了一种非常漂亮的红嘴蓝雀。这种鸟很少有长到像英国雀鸟那么大的,通体是美丽的淡蓝色,尾巴上几根长长的羽毛,羽尖则是白色的。它们通常都是十只或者十二只一群,当它们在山谷中掠过,翅翼张开的时候,看上去真是非常美。我们还看到了几种松鸡,显然是些不为人知的新品种。野鸡、鹧鸪以及啄木鸟很多,也很驯顺。似乎没有什么猎鸟的中国人来打搅它们。</p>
<p>2023-11-30 17:11:04
在中国,劳动力很便宜,茶园里的工人,每天的工钱不过两、三便士。这点工钱,在美国和澳大利亚雇得到人吗?</p>
<p>2023-11-30 17:11:34
茶树是一种很美的常绿灌木,每到冬春时节,也就是山茶花开花的时候,白色的单瓣茶花也都争相盛开。但人们种植茶树不是为了欣赏它的花卉,尽管茶花之美也确实值得欣赏,而是因为茶树能够给人们提供自己喜爱的茶叶。</p>
<p>2023-11-30 17:13:11
我的轿夫们,收到了工钱,现在都坐在旁边一间屋子的桌边,全神贯注地投入到赌博游戏中去了。
注: 哎!拿辛苦赚来的钱去赌博。</p>
<p>2023-11-30 17:24:57
在寺庙下面一英里左右的地方,我注意到有一家造纸厂,用竹子造纸。田野上立了几个大大的水箱,用来浸泡毛竹竿子。这些毛竹似乎要在石灰水中浸泡上一段较长的时间,然后取出放到石头上锤打,直到它们变得非常柔软,或者说,直到把竹竿中那些较硬的物质去除干净为止。</p>
<p>多看笔记 来自多看 for iOS</p>
读书笔记:如何学习https://blog.shukebeta.com/id/post/240/2023-11-08T09:43:49+13:002023-11-08T08:30:54+13:00David Weihttps://shukebeta.com<h5>作者: [美]本尼迪克特·凯里</h5>
<h2>引言 为什么学习最好的不是最用功的学生</h2>
<h3>Page 21 @ 29 October 2023 04:35:32 PM</h3>
<p><em>跟很多人一样,我从小就相信,学习靠的全是自律:沿着一块巨大的知识岩石,你要努力地、孤独地往上攀登,直到攀上那些聪明能干的同学早已到达的岩顶。我攀登的动力,与其说是源于好奇心和探索心,还不如说是因为惧怕跌落下来更为确切。</em></p>
<h3>Page 25 @ 29 October 2023 04:37:01 PM</h3>
<p><em>科学家得出的结论实在古怪。比如,分心反而有助于学习,打个盹儿也有助于学习,在某门课程将要学完之前半途而废,其实并不是坏事,因为这种快要完成的东西与已经彻底完成的东西相比,反而会在人的记忆中逗留得更为长久,还有,在开始学习新东西前先测试一下,会使你在随后的学习中事半功倍,等等。</em></p>
<h3>Page 31 @ 29 October 2023 04:40:33 PM</h3>
<p><em>阅读障碍能提高人对图案的辨识能力,接受双语教育的孩子有更强的学习能力,遇到数学就头疼其实是一种脑功能紊乱,游戏是最好的学习工具,音乐能增强一个人在科学方面的才能</em></p>
<h2>大脑是如何编故事的</h2>
<h3>Page 69 @ 29 October 2023 07:54:32 PM</h3>
<p><em>左脑能根据它所看到的东西编造出一套有条理的说法来</em></p>
<h2>记忆的“逆袭”</h2>
<h3>Page 107 @ 30 October 2023 09:48:22 PM</h3>
<p><em>“我们不仅会忘记曾经一度记得的东西,”他写道,“我们也同样会记起曾经一度被遗忘的东西。”</em></p>
<h2>遗忘式学习</h2>
<h3>Page 133 @ 30 October 2023 10:03:25 PM</h3>
<p><em>记忆是不会“丢失”的,不会像我们以为的那样越变越淡,直至踪迹全无。准确地说,“丢失”了的其实只是我们一时无法提取出来的记忆而已,它的提取能力在当下很低,低到几乎为零。</em></p>
<h3>Page 133 @ 30 October 2023 10:03:46 PM</h3>
<p><em>提取能力不同于储存能力,是用来衡量某项信息被提取到意识中的难易程度的。这一能力同样也会因为学习和反复运用而变得越加坚实。反之,如果得不到强化的机会,提取能力便会迅速下降。而且,与储存能力相比,能够提取出来的记忆容量很小。在任意时间,我们只能提取与大脑发出的提示与给定的线索有关的记忆,而且仅仅是非常有限的一小部分。</em></p>
<h2>乌龟储存与兔子提取</h2>
<h3>Page 136 @ 30 October 2023 10:05:30 PM</h3>
<p><em>大脑一旦重新找到“不见了”的信息或者记忆,那么“曾经遗忘”本身便能起到增强记忆的作用。</em></p>
<h3>Page 136 @ 30 October 2023 10:05:53 PM</h3>
<p><em>做引体向上,首先会导致你的肌肉细胞受损,可是,等休息一天后再度做这个动作时,肌肉却已经因昨天的受损而变得更加强壮了。</em></p>
<h3>Page 136 @ 30 October 2023 10:06:08 PM</h3>
<p><em>我们在提取某项记忆的时候越是大费力气,那么在得到之后,该项记忆的提取能力以及储存能力就飙升得越高,也就是学得越扎实。</em></p>
<h2>环境的还原是增强记忆的法宝</h2>
<h3>Page 161 @ 31 October 2023 09:39:01 PM</h3>
<p><em>与有音乐背景的学习环境相比,安静的学习环境显然过于苍白了些。</em></p>
<h2>詹姆斯法与学习外语的新规律</h2>
<h3>Page 211 @ 01 November 2023 07:54:22 PM</h3>
<p><em>一个接受过良好英语教育的人能认识2万~3万个单词,外加好几百个成语以及惯用语。假如你是从头开始学,那要想储备起哪怕仅仅半数的词汇量,就已经是一项艰巨的任务了。有人预计,假如每天花两个小时学习,那大约需要5年的时间才能做到。</em></p>
<h2>了解考试的真相</h2>
<h3>Page 240 @ 01 November 2023 08:13:27 PM</h3>
<p><em>假如你想把一段课文背诵下来,与反复阅读20遍相比,更容易记住的做法是只读10遍,而且边读边尽力背一些出来,记不清的时候才翻开课本来看看。”</em></p>
<h3>Page 241 @ 01 November 2023 08:14:11 PM</h3>
<p><em>我们的记忆有一个奇怪的特点,即主动的回想比被动的重复效果要更好。也就是说,以背诵为例,学到差不多的时候最好先放一放,然后尽量用心去回想刚才的内容,这样的学习效果比直接再看书要更好。如果我们‘用心回想’出了一部分词句,那几乎可以肯定下次还能再想出来;而如果我们‘直接再看书’,那么下一次很可能还是离不开书。”</em></p>
<h2>学习与背诵的最佳时间配比</h2>
<h3>Page 247 @ 01 November 2023 08:15:35 PM</h3>
<p><em>先花1/3的时间去学去记,剩下的时间则要用来凭记忆背诵。</em></p>
<h2>何时才是考试的最佳时机</h2>
<h3>Page 250 @ 01 November 2023 09:09:55 PM</h3>
<p><em>考试其实就是一种学习方式,一种不同常规却很有功效的学习方式。</em></p>
<h3>Page 254 @ 01 November 2023 09:11:50 PM</h3>
<p><em>“学过之后以考试的形式立即复习,是帮助学生加深记忆的一种很有效的办法,因此应该多多增加考试频率,”他总结道,“水平测试和成绩考核等都是学习的辅助手段,我们不应该仅仅将其当作衡量学生学习水平的工具。”</em></p>
<h2>考试是记忆的好帮手</h2>
<h3>Page 266 @ 01 November 2023 09:18:07 PM</h3>
<p><em>大脑要从记忆中提取已经学过的课文、名称、公式、技能等任何东西,所要付出的努力远比直接重读一遍或者重学一遍要多得多,而这份额外的努力则加强了这些记忆的储存能力与提取能力。</em></p>
<h2>预考中展现的“无知”最具价值</h2>
<h3>Page 288 @ 01 November 2023 09:28:16 PM</h3>
<p><em>对着自己也好,对着他人也罢,把你学过的东西表述出来,这种简单的做法并非仅是传统意义上的一种“自考”方式,它更是一种“学习”的方式,一种更高效的学习方式。这比你继续坐在那里盯着重点划线的效果肯定要更好,至少能高上20%~30%。更划算的是,这样的练习还能消除我们前面讲过的“熟练度错觉”,让你能真正看清哪些地方你还不知道,哪些地方你还有疑惑,哪些地方你已经忘记……立竿见影。</em></p>
<h2>“蔡加尼克效应”与打断的重要意义</h2>
<h3>Page 365 @ 03 November 2023 06:18:44 PM</h3>
<p><em>当我们有了某个目标时,大脑里会自动生出两种本能的预设,也叫做内在偏差。第一种预设是,一旦着手某项工作之后,你就在心理上给那项工作添加了一个“要完成它”的砝码,哪怕根本就不是什么要紧的事情。</em></p>
<h3>Page 366 @ 03 November 2023 06:18:56 PM</h3>
<p><em>第二种预设是,在你全神贯注于工作时,他人对你的打扰不但会延长这项工作在你记忆中驻留的时间,而且还会让你在心理上把这项工作提高到“需要先去完成”的首要位置上。</em></p>
<h3>Page 323 @ 03 November 2023 06:49:32 PM</h3>
<p><em>大多数时候,被人打扰是件很让人讨厌的事,尤其是在一件要紧的事情正忙到一半的时候,偏偏来了一位好管闲事的邻居、一只吵着要出门的猫咪,甚至是一个兜售生意的电话……但是,假如是你自己故意中断了手上的事情,那可就是另外一回事了。这恰恰就是狄更斯最擅长使用的小说技巧,每章都给你留下一个扣人心弦的尾巴。那些电视剧的编剧们也都会这一招,让观众看完一集之后就期盼着下一集:一声尖叫、漆黑走道里的一串脚印,或是一段爱情忽然意外恶化或者升华之时,这一集便戛然而止。
这样的中断在你心里留下了一个悬念,而根据蔡加尼克效应,我们的大脑会自动把这些未完结的章节、剧集、项目给推到居于前列的首要位置,让我们满心牵挂它接下来到底会如何。假如我们正着手一项既耗时又耗心血的项目,这不正好是我们最希望它能在头脑中所占据的位置吗?
学习的科学</em></p>
<h2>有意识的反思:问问你自己</h2>
<h3>Page 385 @ 03 November 2023 06:30:39 PM</h3>
<p><em>渗滤的头两个要素一个是被打断,一个是被调动起来的、不断到处搜索的感知系统。而戴夫利要求学生做的学习笔记则构成了渗滤的第三个要素,就是有意识的反思。</em></p>
<h3>Page 387 @ 03 November 2023 06:33:04 PM</h3>
<p><em>了解这些原理对我们建立自己的学习方式有什么帮助呢?这是在建议我们如果手上有一个相当庞大的项目,那就应该尽早开始,遇到思路不畅的时候不妨停一停,告诉自己这样的停顿不是逃避困难,而是主动进入渗滤过程。
我自己当学生那会儿,每当必须要完成一份繁重的研究论文时,总是习惯性地往后拖延,把时间先用在容易完成的小事情上,比如说,读篇浅显的文章、收拾收拾厨房、看看还有什么该做的事情……然后,等我终于不得不坐下来啃那块“硬骨头”时,我又会鞭策自己一路拼命往终点猛冲,一旦遭遇困难冲不下去了,我就总会备感灰心。
真不该如此。</em></p>
<h2>你仍然信奉刻意练习吗</h2>
<h3>Page 353 @ 03 November 2023 07:02:50 PM</h3>
<p><em>“长短距离交替练习可能有助于运动模式的初步形成,”克尔和布思写道,“交替训练强化了肌体对动作的意识。”换句话说就是:不同动作的交替训练比单一动作的固定训练更为有效,因为它能迫使我们内化肌体动作的基本法则,从而使肌体经过调整,对任何距离的目标都更有准头。</em></p>
<h2>运用穿插交替使训练成效倍增</h2>
<h3>Page 410 @ 03 November 2023 07:23:01 PM</h3>
<p><em>你我都曾见识过在练习时毫无瑕疵、上场后却只能发挥出中等水平的小朋友,也都曾见识过训练时磕磕绊绊,可到了关键时刻,比如比赛、表演之时,却能在观众面前生龙活虎的孩子。你可以在自家院子里拿一只足球练习上千遍的带球过人,但这跟在赛场上有对方两名球员夹攻你的状况下带球全速飞奔完全不是一回事</em></p>
<h3>Page 412 @ 03 November 2023 07:23:51 PM</h3>
<p><em>“过去,人们一直认为越是能让训练方式变得更直接、更专精、更频繁或是更有效的改进,越能有助于人们尽快掌握,”施密特和比约克在报告中写道,“但是我们搜集到的这些证据说明,这种观念很值得商榷。”
“值得商榷”是很委婉的说法了,实际上应该是“需要重新考虑”甚至是“应该彻底摒弃”才对。</em></p>
<h2>来自数学成绩的强效印证</h2>
<h3>Page 441 @ 03 November 2023 07:35:54 PM</h3>
<p><em>交替学习的功效就是让大脑准备好随时面对意想不到的事情。</em></p>
<h2>梦的启示</h2>
<h3>Page 497 @ 03 November 2023 07:50:49 PM</h3>
<p><em>为了照看刚生下来的小鲸鱼,虎鲸妈妈可以连续三个星期保持警醒、维持动态,甚至一个月不眠不休。迁徙中的鸟类也可以连飞数星期而不必中途停歇、睡觉。</em></p>
<h2>何时睡、怎么睡有讲究</h2>
<h3>Page 527 @ 03 November 2023 08:03:03 PM</h3>
<p><em>“在一些实验中我们发现,白天睡上一小时到一个半小时所得到的学习辅助效果,跟一整晚8小时的通宵睡眠几乎不相上下。”</em></p>
<h2>睡眠增强记忆力、理解力、学习力</h2>
<h3>Page 529 @ 03 November 2023 08:03:40 PM</h3>
<p><em>睡眠进化是对安全的保障,以免我们在狩猎、采集时太过于危险或劳而无功。在觅食容易、需要群体交往的时候,我们就应该醒着;而如果从事上述活动成本过高、得不偿失,那我们就应该去睡觉。</em></p>
<h3>Page 533 @ 03 November 2023 08:07:19 PM</h3>
<p><em>最新研究表明,在失去意识的停机状态中,大脑实际上是在澄清记忆、深化技能——睡眠是完成这两项任务必不可少的步骤。换句话说,从本质上讲,睡觉就是学习。</em></p>
<h3>Page 535 @ 03 November 2023 08:08:43 PM</h3>
<p><em>我再也不觉得白天打个盹儿或者晚上早早睡就表示我懒、我浪费光阴,甚至是我根本不愿意学习。相反,我现在把睡眠看作是闭着眼睛在学习。</em></p>
<h2>尾声 终身学习用好大脑</h2>
<h3>Page 539 @ 03 November 2023 08:11:34 PM</h3>
<p><em>请你想想,那终其一生的风餐露宿意味着什么?狩猎和追踪是你的阅读与写作课程,勘察周遭的地理环境——每一处沟壑、每一片开阔地、每一块秘密的采集园,就是你的地理课程。你的科学课包括了植物学,因为你必须知道哪些植物的果实可以吃、哪些植物有什么药用效果,也包括了动物行为学,因为你必须知道想要捕食你的动物有什么捕食习惯,以及你要捕食的动物的摄食习性。
是的,经年累月之中,你得到了该得到的教育。有些知识来自年长者以及同龄人,但大部分都来自你自己积累起来的经验。你听,你看,你在这个无限延展的世界中探索。在每天所有清醒着的时刻,在各种各样的生存条件下,在日复一日的辛勤劳作中,你的大脑一点一滴地学习到了你需要的知识。在我们觅食的过程中,大脑也在觅食——以最高效益吸收着最有价值的信息以及最为关键的求生经验。</em></p>
<h3>Page 449 @ 28 October 2023 04:04:23 PM</h3>
<p><em>“我们需要有某种结构体系,让事情能显得合乎情理。如果事情不合情理,我们就会千方百计想要摆脱那种不合情理的感觉,因此这时思维会十分活跃,”</em></p>
<h3>Page 552 @ 03 November 2023 08:17:27 PM</h3>
<p><em>在学习上,我们能自己掌控的地方并不多,比如我们的基因、我们的老师、我们能住在哪里、我们能上哪所学校……我们无法选择自己的家庭环境,无论你的爸爸是成天围着你转还是开着飞机在天上飞,或者你的妈妈是全天候呵护着你还是成天不着家。我们只能接受所有这一切</em></p>
<h3>Page 552 @ 03 November 2023 08:18:13 PM</h3>
<p><em>我们唯一能自己掌控的是我们怎么去学习。科学告诉我们,在一天之中,这里学一点那里学一点地完成功课并不是什么“不专心学习”的不良症状,那叫间隔式学习,而这正是现代社会文化中的焦虑之一,如果你照着本书所讲的去做,你会学得更深,学得事半功倍,成效肯定只多不少。科学还为我们打开了一扇窗,让我们不再因为自己做不到每一个小时都专注于一项练习而觉得自己不正常。学习本就应该是在不断的分心中进行的活动,不仅在学习过程中你的心神会不断跳跃,而且你学习的内容也应该多样化,这样你才能获得把新旧内容混合到一起学习的超值效果。</em></p>
<h3>Page 456 @ 28 October 2023 04:08:17 PM</h3>
<p><em>遗忘对学习的意义恰如氧气对我们的意义</em></p>
<h3>Page 558 @ 03 November 2023 08:21:07 PM</h3>
<p><em>学习,归根结底就是你做的每一件事。</em></p>
<h2>不能错过的彩蛋 有关学习的11个关键问题</h2>
<h3>Page 462 @ 29 October 2023 07:52:15 AM</h3>
<p><em>你打算用两个小时来掌握一节德语课的内容,那与你一口气连学两个小时相比,今天学一小时、明天再学一小时的方式能记得更多、更牢,如果后天再学一小时就更好了</em></p>
<h3>Page 463 @ 29 October 2023 07:52:43 AM</h3>
<p><em>将学习时间分散开是最可靠、最有效的加深记忆、延长记忆时间的好办法</em></p>
<h3>Page 463 @ 29 October 2023 08:31:46 AM</h3>
<p><em>拉开时间间隔来复习(见上一题)或是自测(见下一题)都是比通宵复习要靠谱得多的备考方式。</em></p>
<h3>Page 465 @ 29 October 2023 08:32:42 AM</h3>
<p><em>在纸上或者电脑上划几道荧光线甚至再抄写一遍,并不等于你的大脑真的和那些学习内容之间有了深度的互动。但是反过来,你在看过一遍荧光笔划过的内容之后,合上笔记,再把它们默写出来,则能让你的记忆系统运转得更加费力,因此你的复习效果也就强多了。这么做还有另外一个好处:让你立即就能知道自己没记住、没弄明白的地方,知道哪里需要回头再复习。</em></p>
<p><em>Generated at: 2023-11-03-23-16-38</em></p>
Free koreader sync serverhttps://blog.shukebeta.com/id/post/239/2023-10-24T16:59:18+13:002023-10-24T16:52:59+13:00David Weihttps://shukebeta.com<p>I use koreader a lot recently, to sync the reading progress between my mobile devices, I set up a custom koreader sync server on a cheap VPS.
If you want a sync server but don't want to bother setting your own one, you can use my one with own risk.</p>
<p>server address: <a href="https://koreader-sync.shukebeta.eu.org:7200">https://koreader-sync.shukebeta.eu.org:7200</a></p>
<p>I hope it helps.</p>
Fix `Set-ItemProperty: Cannot find drive. A drive with the name 'IIS' does not exist.` issuehttps://blog.shukebeta.com/id/post/238/2023-09-29T08:27:43+13:002023-09-25T08:24:35+13:00David Weihttps://shukebeta.com<p><strong>Background</strong>
We still have quite a few projects that depends windows platform. I met <code>Set-ItemProperty: Cannot find drive. A drive with the name 'IIS' does not exist.</code> issue when I was running a powershell script, and I couldn't find an answer until I asked my colleague Matthew.</p>
<h2>The ANSWER</h2>
<p>Powershell 7 is supposed to support all platforms, so it removed those windows specific features.You should use Powershell for windows instead.</p>
<p>Yes, this solved the issue. Thanks!</p>
一个想法:利用 TailScale 拯救被墙 iphttps://blog.shukebeta.com/id/post/236/2023-07-20T11:00:31+12:002023-07-16T09:23:58+12:00David Weihttps://shukebeta.com<p>昨天才注意到我的 racknerd vps被墙了。换一个IP要 $3,虽然不贵,但racknerd并不能保证新IP是没有被墙的。
网上东搜西搜,有人建议用 cloudflare CDN 挽救,但这样只能解决一个端口(即443),无法享受到 kcptun 加速的快乐。</p>
<p>还有其他的法子吗?我想到了Tailscale。如果你身在墙内,由于VPS IP已经被墙,你无法直接连接。但你可以用 azure cloud terminal 或者其他云服务商提供的 cloud terminal,因为他们的云Shell到你的vps通常都是通的。</p>
<p>我很懒惰,下面简要罗列主要步骤:</p>
<ol start="1">
<li>vps端安装 tailscale</li>
<li>为方便记忆,解析 vps tailscale IP到一个域名(可选)。如果你没有个人域名,有个免费的解决方案是去 eu.org 申请一个终身免费的二级域名。(申请后要等几天才能收到回信)</li>
<li>你的墙内设备或者路由器上(openwrt)安装 tailscale,使用同一个账号,这样墙内设备与墙外设备就处于同一个内网</li>
<li>连接 vps 的tailscale IP或者指向tailscale IP的域名,实现翻墙</li>
</ol>
<p>这样当然是有局限性的啦,除非你利用openwrt得到一个无墙的wifi,你每个设备都要安装tailscale。这也不是什么坏事,tailscale这个利器,早装早享受。说不准啥时候就能救你一次!</p>
水星/TL-WR703N LEDE 系统配置 shadowsocks + kcptun 全站翻墙备忘https://blog.shukebeta.com/id/post/235/2023-07-18T20:10:58+12:002023-07-08T21:29:50+12:00David Weihttps://shukebeta.com<p>多年前在淘宝买了这个小盒子,只是几十块钱的东西,卖家不但给解了锁,扩了ROM和内存,还给焊了一个USB口。我买它原意是当个旅行路由器,不管到哪个旅店,只要接上网线就能瞬间得到一个无墙的网络, 多好。当初也确实配好了,但因为那时还没有kcptun加速,当时用的vps网络连接也差,总是差强人意。更重要的, 在国内工作这么多年,旅行的次数实在有限,一个手的手指头都用不完, 更不用提很多旅店根本不提供以太网接口了。</p>
<p>不意外,这个小东西就一直闲置了。然而,我又有了要配好它的理由:我近期就要回国一趟,虽然手机可以装翻墙软件,但iOS上我一直没有配好kcptun加速,而 iPhone 是我的主力机,这会不爽。所以,</p>
<p>我今天就搞定了家里这台小破路由器openwrt 的翻墙!为了避免忘掉,在这里记个笔记:</p>
<ol start="1">
<li>干净 LEDE 系统,</li>
<li>因为剩余空间不够(主要是kcptun客户端体积比较大),参考<a href="https://linuxconfig.org/how-to-extend-lede-openwrt-system-storage-with-an-usb-device">这篇文章</a>搞定了系统 overley 文件系统用U盘扩容。</li>
<li>用到这些软件包。(如果你也是这款机器,可以从<a href="https://shukebeta.com/openwrt-ss-kcptun.tar">这里</a> 下载我打好包的以下所有软件)<ul>
<li>kcptun-client_20200409-1_mips_24kc.ipk</li>
<li>luci-app-kcptun_1.4.3-1_all.ipk</li>
<li>luci-app-kcptun_1.5.3_all.ipk</li>
<li>luci-app-shadowsocks_1.9.1-1_all.ipk</li>
<li>luci-i18n-kcptun-zh-cn_1.4.3-1_all.ipk</li>
<li>luci-i18n-kcptun-zh-cn_git-20.109.30409-d04c89b_all.ipk</li>
<li>shadowsocks-libev_3.2.1-1_mips_24kc.ipk</li>
</ul>
</li>
<li>下载这些软件主要参考了<a href="https://github.com/boxhg/openwrt-ss-kcp">这个仓库</a> 里的 <a href="https://github.com/boxhg/openwrt-ss-kcp/blob/master/Netgear-WNDR4300-v1.md">这个链接</a></li>
<li>具体配置主要参考了<a href="https://github.com/boxhg/openwrt-ss-kcp/blob/master/README.md">同一他库的README</a></li>
</ol>
<p>又, 2022-07-18, 参照 <a href="https://github.com/adyanth/openwrt-tailscale-enabler">这个仓库</a> 在这个小小的路由器上安装了 tailscale,从此我能自由的访问这个小盒子。我还顺便给它安装了 git,vim 和 python。</p>
看了电影《春逝》https://blog.shukebeta.com/id/post/234/2023-07-01T18:43:07+12:002023-06-17T12:32:04+12:00David Weihttps://shukebeta.com<p>追随我的网友 ArgentaQ,看了这部韩国电影。我信赖她选片的水准。
果然是很美的一部电影。爱情是复杂的,微妙的。
你和我愿意像这一对坟丘,将来合葬在一起吗?面对这样浪漫的爱情表白,我不能理解男主为什么摇头。
起初是她选择了不继续这段感情,但最终是他选择了不复合。谁是谁非?这重要,又不重要。
那曾经的过往啊,是那样真实而美丽。</p>
git stash -S # stash staging changes onlyhttps://blog.shukebeta.com/id/post/233/2023-06-12T08:35:02+12:002023-06-12T08:35:02+12:00David Weihttps://shukebeta.com一个永生不死的爱情故事https://blog.shukebeta.com/id/post/232/2023-09-29T10:42:19+13:002023-05-15T21:42:01+12:00David Weihttps://shukebeta.com<p>这是2019年时的一个灵光乍现。本来我是想将它扩展成一个中长篇的,但或者是没有那个才气,又或者是总是找不到时间。那就把这个故事梗概当作超短篇放出来吧,也许能启发什么人写个有意思的故事。</p>
<p>2084,地球人生育率降为0。科技已经高度发达,人类已经战胜衰老。死亡是罕见的,除非发生意外,或者对现世太不满意而选择重活一遍。人类已不再依赖自然进化,或者说人类已经主动拒绝了自然进化。</p>
<p>“叮”你有新邮件。老太太Rose那台老掉牙的iPhone发出了熟悉而又遥远的提示音。</p>
<p>距离上一封电邮,又有十年过去了。“不知道老头子这次会在邮件里说些啥。”Rose嘟囔着颤颤微微地点开了那个提醒。她的老头子D已经死去三十年了,受益于科技的进步,本来以为自己很快会步D后尘离世的Rose一直活到现在。奇怪的,每隔一段时间她是还会收到来自D的电邮,信件的内容仿佛是用某种随机算法生成的。</p>
<p>但是Rose知道,这里面的每一段都是D在世的时候写过的,可能是他的twitter,他的weibo,或者来自他的facebook。每隔几段就一定会出现和 Rose 关联的内容。不尽是甜蜜,也有曾经的争吵。读着他的邮件,体会着过去的酸酸甜甜,恍若他还在世。</p>
<p>这个老头子啊。</p>
Switch Debian from legacy to UEFI boot modehttps://blog.shukebeta.com/id/post/231/2023-05-18T17:51:17+12:002023-05-13T18:30:34+12:00David Weihttps://shukebeta.com<figure><a rel="external" href="http://blog.getreu.net/projects/legacy-to-uefi-boot/">Switch Debian from legacy to UEFI boot mode</a><figcaption><p>I updated the Sea BIOS for my DELL Chromebook today, which only supports UEFI boot mode. I don't want to reinstall the system, I thought there must be a way I could convert the legacy mode to UEFI mode. Yes, I found it. <a href="http://blog.getreu.net/projects/legacy-to-uefi-boot/">this article</a> and <a href="https://superuser.com/questions/1738694/linux-from-scratch-efi-variables-are-not-supported-on-this-system">this answer</a> helped me out.</p>
</figcaption></figure>可以让Linux在Chromebook上运行的与ChromeOS 一样快吗?https://blog.shukebeta.com/id/post/230/2023-05-25T19:52:10+12:002023-05-13T10:00:43+12:00David Weihttps://shukebeta.com<p>我前两天在Facebook Market上又捡了一台电子垃圾:$50买了一台 Dell Chromebook 11 3120,配置是 2GB 内存,16GB硬盘。卖家之前已刷了Sea BIOS,安装了CloudReady系统,但没有搞定声卡驱动,所以没有声音,也因此他才愿意便宜出售。</p>
<p>我喜欢ChromeOS的流畅,但讨厌不能自由安装软件。那有没有可能在Chromebook上安装Linux并让它跑得几乎与ChromeOS一样快呢?我没有把握,也知道可能性并不大,但我还是想试试。</p>
<p>我在这台Chromebook 上安装了Debian 11系统,目前没有遇到大的问题,声音,蓝牙,wifi,hdmi都能正常工作,除了觉得有点慢,以及从suspend状态复原时系统变得极度缓慢,几乎没有响应。</p>
<p>我在这台Chromebook上目前已经做了以下尝试:</p>
<ol start="1">
<li>禁用Wayland</li>
<li>删除SWAP分区</li>
<li>升级到最新内核</li>
</ol>
<p>今天打算再设置下 ZRAM内存压缩。没想到极其简单,有ZRAM Tools加持,一分钟就设置好了。照抄的例子,给ZRAM分配了60%的物理内存。<a href="https://wiki.debian.org/ZRam">Reference</a> 那就看后续使用效果了,我会过两天再更新这个文章。</p>
<p>「25-05-2023更新」
我卸掉了gnome3,装上了xfce4。这是我在移情gnome之前最喜欢的桌面环境。2G内存毕竟太少了,而gnome太贪心,它吃掉了太多的内存。为了更好的性能,我转向了xfce4,而它也确实没有让我失望。这台小机器现在能做很多事,并且跑得很流畅。我很开心啦!</p>
<h2>English Version (Thanks ChatGPT)</h2>
<p>I picked up another piece of electronic junk on Facebook Marketplace a couple of days ago: a Dell Chromebook 11 3120 for $50. It came with 2GB of RAM and a 16GB hard drive. The seller had previously flashed Sea BIOS and installed CloudReady, but couldn't get the sound card driver working, so there was no audio. That's why he was willing to sell it cheap.</p>
<p>I like the smoothness of ChromeOS but dislike the limitations when it comes to installing software. So, I wondered if it would be possible to install Linux on the Chromebook and have it run almost as fast as ChromeOS. I wasn't sure and knew it was unlikely, but I wanted to give it a try anyway.</p>
<p>I installed Debian 11 on this Chromebook, and so far, I haven't encountered any major issues. The sound, Bluetooth, Wi-Fi, and HDMI all work fine. The only drawbacks are that it feels a bit slow, and the system becomes extremely sluggish when resuming from suspend, almost unresponsive.</p>
<p>Here are the things I've tried on this Chromebook so far:</p>
<ul>
<li>Disable Wayland in /etc/gdm3/daemon.conf</li>
<li>Removing the SWAP partition</li>
<li>Upgrading to the latest kernel</li>
</ul>
<p>Today, I'm planning to set up ZRAM memory compression. Surprisingly, it was incredibly simple with the help of ZRAM Tools. I allocated 60% of the physical memory to ZRAM, following an example I found <a href="https://wiki.debian.org/ZRam">at Debian Wiki</a>. We'll see how it performs in practice, and I'll update this article in a couple of days.</p>
<p><strong>Update on 25-05-2023:</strong>
I have uninstalled GNOME 3 and installed XFCE4. This is my favorite desktop environment before switching to GNOME. With only 2GB of memory, it was just too little, and GNOME was too resource-intensive, consuming a significant amount of memory. In order to improve performance, I turned to XFCE4, and it has not let me down. This little machine can now handle many tasks and runs smoothly. I am very happy!"</p>
Don't change the inode when editing a file with Vimhttps://blog.shukebeta.com/id/post/229/2023-05-13T09:56:29+12:002023-05-04T18:22:26+12:00David Weihttps://shukebeta.com<p>I keep my config files on github, and I use hard-link for most of the config files. It's convenient, as I can check the new changes easily and submit some of the changes when necessary. However, the default behavior of vim troubles me. It always changed the inode when I save the config file!</p>
<p>tldr; the solution is: put the following line in your <code>.vimrc</code></p>
<pre><code>set backupcopy=yes
</code></pre>
<p><strong>PS</strong>
Though this way fixed Vim's behavior, I sadly found that <code>git pull</code> will change the config file's inode as well. So there is actually no feasible solution. I have abandoned this hard link approach. If you have better solutions to maintain all your config files in one repository, please let me know!</p>
How to delete all bin/obj folders in a complex solution in GitBashhttps://blog.shukebeta.com/id/post/228/2023-05-03T15:28:38+12:002023-05-03T15:28:38+12:00David Weihttps://shukebeta.com<p>Sometimes we need to delete all the bin/obj folders in a solution to resolve issues in Rider or Visual Studio. I assume you already have your preferred method for this task, but I would like to share my approach here in case someone else is unaware of how to do it in GitBash or MSys terminal:</p>
<pre><code class="language-bash">cat ~/bin/delBinObj
set -e
find . -iname "bin" -print0 | xargs -0 echo
find . -iname "obj" -print0 | xargs -0 echo
read -p "The above folders are going to be deleted, are you sure? " -n 1 -r
echo # (optional) move to a new line
if [[ $REPLY =~ ^[Yy]$ ]]; then
find . -iname "bin" -print0 | xargs -0 rm -rfv
find . -iname "obj" -print0 | xargs -0 rm -rfv
echo done
else
echo no
exit 1
fi
</code></pre>